@forgeax/engine-rhi-debug 0.0.0-dev.8d955ade1c79
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/LICENSE +202 -0
- package/README.md +178 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/bootstrap-integration.test.d.ts +2 -0
- package/dist/__tests__/bootstrap-integration.test.d.ts.map +1 -0
- package/dist/__tests__/consumer-inventory.unit.test.d.ts +2 -0
- package/dist/__tests__/consumer-inventory.unit.test.d.ts.map +1 -0
- package/dist/__tests__/copy-src-usage-validity.dawn.test.d.ts +15 -0
- package/dist/__tests__/copy-src-usage-validity.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/coverage-invariant.test-d.d.ts +2 -0
- package/dist/__tests__/coverage-invariant.test-d.d.ts.map +1 -0
- package/dist/__tests__/coverage-invariant.unit.test.d.ts +2 -0
- package/dist/__tests__/coverage-invariant.unit.test.d.ts.map +1 -0
- package/dist/__tests__/e2e.browser.test.d.ts +2 -0
- package/dist/__tests__/e2e.browser.test.d.ts.map +1 -0
- package/dist/__tests__/error-code-narrowing.test-d.d.ts +2 -0
- package/dist/__tests__/error-code-narrowing.test-d.d.ts.map +1 -0
- package/dist/__tests__/errors-v7.test-d.d.ts +2 -0
- package/dist/__tests__/errors-v7.test-d.d.ts.map +1 -0
- package/dist/__tests__/errors-v7.unit.test.d.ts +2 -0
- package/dist/__tests__/errors-v7.unit.test.d.ts.map +1 -0
- package/dist/__tests__/errors.unit.test.d.ts +2 -0
- package/dist/__tests__/errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/event-semantics-coverage.unit.test.d.ts +2 -0
- package/dist/__tests__/event-semantics-coverage.unit.test.d.ts.map +1 -0
- package/dist/__tests__/format-info.unit.test.d.ts +2 -0
- package/dist/__tests__/format-info.unit.test.d.ts.map +1 -0
- package/dist/__tests__/frame-model-parity.test-d.d.ts +2 -0
- package/dist/__tests__/frame-model-parity.test-d.d.ts.map +1 -0
- package/dist/__tests__/frame-model-parity.unit.test.d.ts +2 -0
- package/dist/__tests__/frame-model-parity.unit.test.d.ts.map +1 -0
- package/dist/__tests__/guard-gates.test.d.ts +2 -0
- package/dist/__tests__/guard-gates.test.d.ts.map +1 -0
- package/dist/__tests__/public-surface.integration.test.d.ts +2 -0
- package/dist/__tests__/public-surface.integration.test.d.ts.map +1 -0
- package/dist/__tests__/readback-fault-cleanup.unit.test.d.ts +2 -0
- package/dist/__tests__/readback-fault-cleanup.unit.test.d.ts.map +1 -0
- package/dist/__tests__/readback-format-matrix.dawn.test.d.ts +2 -0
- package/dist/__tests__/readback-format-matrix.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/readback-format-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/readback-format-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/readback-matrix-fixture.d.ts +32 -0
- package/dist/__tests__/readback-matrix-fixture.d.ts.map +1 -0
- package/dist/__tests__/recorder-bootstrap.unit.test.d.ts +2 -0
- package/dist/__tests__/recorder-bootstrap.unit.test.d.ts.map +1 -0
- package/dist/__tests__/recorder-budget.unit.test.d.ts +2 -0
- package/dist/__tests__/recorder-budget.unit.test.d.ts.map +1 -0
- package/dist/__tests__/recorder-fail-fast.unit.test.d.ts +2 -0
- package/dist/__tests__/recorder-fail-fast.unit.test.d.ts.map +1 -0
- package/dist/__tests__/recorder-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/recorder-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/recorder-push-event.unit.test.d.ts +2 -0
- package/dist/__tests__/recorder-push-event.unit.test.d.ts.map +1 -0
- package/dist/__tests__/recorder-session.integration.test.d.ts +2 -0
- package/dist/__tests__/recorder-session.integration.test.d.ts.map +1 -0
- package/dist/__tests__/recorder-session.unit.test.d.ts +2 -0
- package/dist/__tests__/recorder-session.unit.test.d.ts.map +1 -0
- package/dist/__tests__/recorder-steady-frame.dawn.test.d.ts +2 -0
- package/dist/__tests__/recorder-steady-frame.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/replay-fail-fast.unit.test.d.ts +2 -0
- package/dist/__tests__/replay-fail-fast.unit.test.d.ts.map +1 -0
- package/dist/__tests__/replay-session.dawn.test.d.ts +2 -0
- package/dist/__tests__/replay-session.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/replay-session.test-d.d.ts +2 -0
- package/dist/__tests__/replay-session.test-d.d.ts.map +1 -0
- package/dist/__tests__/replay-session.unit.test.d.ts +2 -0
- package/dist/__tests__/replay-session.unit.test.d.ts.map +1 -0
- package/dist/__tests__/resolve-texture-descriptor.unit.test.d.ts +2 -0
- package/dist/__tests__/resolve-texture-descriptor.unit.test.d.ts.map +1 -0
- package/dist/__tests__/resource-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/resource-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/rhi-debug-fresh-replay.dawn.test.d.ts +2 -0
- package/dist/__tests__/rhi-debug-fresh-replay.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/tape-index.unit.test.d.ts +2 -0
- package/dist/__tests__/tape-index.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tape-v7-invalid.unit.test.d.ts +2 -0
- package/dist/__tests__/tape-v7-invalid.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tape-v7-roundtrip.unit.test.d.ts +2 -0
- package/dist/__tests__/tape-v7-roundtrip.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tape-v7-version.unit.test.d.ts +2 -0
- package/dist/__tests__/tape-v7-version.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tree-shake.unit.test.d.ts +2 -0
- package/dist/__tests__/tree-shake.unit.test.d.ts.map +1 -0
- package/dist/__tests__/types.test.d.ts +2 -0
- package/dist/__tests__/types.test.d.ts.map +1 -0
- package/dist/browser.d.ts +45 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.mjs +83 -0
- package/dist/browser.mjs.map +1 -0
- package/dist/errors.d.ts +85 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/frame-model.d.ts +158 -0
- package/dist/frame-model.d.ts.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +10415 -0
- package/dist/index.mjs.map +1 -0
- package/dist/protocol/codec.d.ts +6 -0
- package/dist/protocol/codec.d.ts.map +1 -0
- package/dist/protocol/event-semantics.d.ts +15 -0
- package/dist/protocol/event-semantics.d.ts.map +1 -0
- package/dist/protocol/tape-index.d.ts +30 -0
- package/dist/protocol/tape-index.d.ts.map +1 -0
- package/dist/protocol/types.d.ts +44 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/validation.d.ts +7 -0
- package/dist/protocol/validation.d.ts.map +1 -0
- package/dist/readback.d.ts +156 -0
- package/dist/readback.d.ts.map +1 -0
- package/dist/recorder/assemble.d.ts +11 -0
- package/dist/recorder/assemble.d.ts.map +1 -0
- package/dist/recorder/closure.d.ts +39 -0
- package/dist/recorder/closure.d.ts.map +1 -0
- package/dist/recorder/core.d.ts +296 -0
- package/dist/recorder/core.d.ts.map +1 -0
- package/dist/recorder/device.d.ts +4 -0
- package/dist/recorder/device.d.ts.map +1 -0
- package/dist/recorder/encoder.d.ts +5 -0
- package/dist/recorder/encoder.d.ts.map +1 -0
- package/dist/recorder/lifecycle.d.ts +20 -0
- package/dist/recorder/lifecycle.d.ts.map +1 -0
- package/dist/recorder/pass.d.ts +6 -0
- package/dist/recorder/pass.d.ts.map +1 -0
- package/dist/recorder/proxy.d.ts +19 -0
- package/dist/recorder/proxy.d.ts.map +1 -0
- package/dist/recorder/queue.d.ts +4 -0
- package/dist/recorder/queue.d.ts.map +1 -0
- package/dist/recorder/resource-registry.d.ts +15 -0
- package/dist/recorder/resource-registry.d.ts.map +1 -0
- package/dist/recorder/session.d.ts +25 -0
- package/dist/recorder/session.d.ts.map +1 -0
- package/dist/recorder/shader.d.ts +3 -0
- package/dist/recorder/shader.d.ts.map +1 -0
- package/dist/recorder/snapshot.d.ts +10 -0
- package/dist/recorder/snapshot.d.ts.map +1 -0
- package/dist/recorder/wrap.d.ts +4 -0
- package/dist/recorder/wrap.d.ts.map +1 -0
- package/dist/recorder.d.ts +7 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/replay/device-request.d.ts +8 -0
- package/dist/replay/device-request.d.ts.map +1 -0
- package/dist/replay/execute-support.d.ts +33 -0
- package/dist/replay/execute-support.d.ts.map +1 -0
- package/dist/replay/execute.d.ts +18 -0
- package/dist/replay/execute.d.ts.map +1 -0
- package/dist/replay/readback.d.ts +32 -0
- package/dist/replay/readback.d.ts.map +1 -0
- package/dist/replay/resources.d.ts +57 -0
- package/dist/replay/resources.d.ts.map +1 -0
- package/dist/replay/session.d.ts +49 -0
- package/dist/replay/session.d.ts.map +1 -0
- package/dist/replay/texture-format.d.ts +21 -0
- package/dist/replay/texture-format.d.ts.map +1 -0
- package/dist/texel-decode.d.ts +35 -0
- package/dist/texel-decode.d.ts.map +1 -0
- package/dist/texel-layout.d.ts +76 -0
- package/dist/texel-layout.d.ts.map +1 -0
- package/dist/types.d.ts +722 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +72 -0
- package/src/__tests__/bootstrap-integration.test.ts +268 -0
- package/src/__tests__/consumer-inventory.unit.test.ts +154 -0
- package/src/__tests__/copy-src-usage-validity.dawn.test.ts +117 -0
- package/src/__tests__/coverage-invariant.test-d.ts +115 -0
- package/src/__tests__/coverage-invariant.unit.test.ts +45 -0
- package/src/__tests__/e2e.browser.test.ts +239 -0
- package/src/__tests__/error-code-narrowing.test-d.ts +32 -0
- package/src/__tests__/errors-v7.test-d.ts +19 -0
- package/src/__tests__/errors-v7.unit.test.ts +15 -0
- package/src/__tests__/errors.unit.test.ts +83 -0
- package/src/__tests__/event-semantics-coverage.unit.test.ts +22 -0
- package/src/__tests__/format-info.unit.test.ts +85 -0
- package/src/__tests__/frame-model-parity.test-d.ts +20 -0
- package/src/__tests__/frame-model-parity.unit.test.ts +285 -0
- package/src/__tests__/guard-gates.test.ts +317 -0
- package/src/__tests__/public-surface.integration.test.ts +38 -0
- package/src/__tests__/readback-fault-cleanup.unit.test.ts +66 -0
- package/src/__tests__/readback-format-matrix.dawn.test.ts +378 -0
- package/src/__tests__/readback-format-matrix.unit.test.ts +120 -0
- package/src/__tests__/readback-matrix-fixture.ts +20 -0
- package/src/__tests__/recorder-bootstrap.unit.test.ts +302 -0
- package/src/__tests__/recorder-budget.unit.test.ts +42 -0
- package/src/__tests__/recorder-fail-fast.unit.test.ts +434 -0
- package/src/__tests__/recorder-lifecycle.unit.test.ts +42 -0
- package/src/__tests__/recorder-push-event.unit.test.ts +573 -0
- package/src/__tests__/recorder-session.integration.test.ts +32 -0
- package/src/__tests__/recorder-session.unit.test.ts +63 -0
- package/src/__tests__/recorder-steady-frame.dawn.test.ts +52 -0
- package/src/__tests__/replay-fail-fast.unit.test.ts +155 -0
- package/src/__tests__/replay-session.dawn.test.ts +220 -0
- package/src/__tests__/replay-session.test-d.ts +27 -0
- package/src/__tests__/replay-session.unit.test.ts +171 -0
- package/src/__tests__/resolve-texture-descriptor.unit.test.ts +144 -0
- package/src/__tests__/resource-lifecycle.unit.test.ts +114 -0
- package/src/__tests__/rhi-debug-fresh-replay.dawn.test.ts +178 -0
- package/src/__tests__/tape-index.unit.test.ts +56 -0
- package/src/__tests__/tape-v7-invalid.unit.test.ts +45 -0
- package/src/__tests__/tape-v7-roundtrip.unit.test.ts +66 -0
- package/src/__tests__/tape-v7-version.unit.test.ts +13 -0
- package/src/__tests__/tree-shake.unit.test.ts +151 -0
- package/src/__tests__/types.test.ts +257 -0
- package/src/browser.ts +146 -0
- package/src/errors.ts +173 -0
- package/src/frame-model.ts +753 -0
- package/src/index.ts +92 -0
- package/src/pako.d.ts +8 -0
- package/src/protocol/codec.ts +220 -0
- package/src/protocol/event-semantics.ts +180 -0
- package/src/protocol/tape-index.ts +120 -0
- package/src/protocol/types.ts +60 -0
- package/src/protocol/validation.ts +173 -0
- package/src/readback.ts +804 -0
- package/src/recorder/assemble.ts +192 -0
- package/src/recorder/closure.ts +408 -0
- package/src/recorder/core.ts +587 -0
- package/src/recorder/device.ts +474 -0
- package/src/recorder/encoder.ts +251 -0
- package/src/recorder/lifecycle.ts +847 -0
- package/src/recorder/pass.ts +241 -0
- package/src/recorder/proxy.ts +59 -0
- package/src/recorder/queue.ts +109 -0
- package/src/recorder/resource-registry.ts +53 -0
- package/src/recorder/session.ts +152 -0
- package/src/recorder/shader.ts +47 -0
- package/src/recorder/snapshot.ts +38 -0
- package/src/recorder/wrap.ts +157 -0
- package/src/recorder.ts +15 -0
- package/src/replay/device-request.ts +38 -0
- package/src/replay/execute-support.ts +243 -0
- package/src/replay/execute.ts +870 -0
- package/src/replay/readback.ts +671 -0
- package/src/replay/resources.ts +154 -0
- package/src/replay/session.ts +509 -0
- package/src/replay/texture-format.ts +99 -0
- package/src/texel-decode.ts +289 -0
- package/src/texel-layout.ts +324 -0
- package/src/types.ts +888 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/common.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/trees.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/messages.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/strings.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/deflate.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/constants.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/inflate.js","../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/index.js","../src/errors.ts","../src/protocol/event-semantics.ts","../src/protocol/tape-index.ts","../src/texel-layout.ts","../src/frame-model.ts","../src/protocol/codec.ts","../src/protocol/types.ts","../src/protocol/validation.ts","../src/readback.ts","../src/recorder/assemble.ts","../src/recorder/closure.ts","../src/recorder/core.ts","../src/recorder/shader.ts","../src/recorder/pass.ts","../src/recorder/encoder.ts","../src/recorder/queue.ts","../src/recorder/device.ts","../src/recorder/lifecycle.ts","../src/recorder/wrap.ts","../src/recorder/proxy.ts","../src/recorder/resource-registry.ts","../src/recorder/snapshot.ts","../src/recorder/session.ts","../src/replay/device-request.ts","../src/replay/execute-support.ts","../src/replay/texture-format.ts","../src/replay/execute.ts","../src/replay/readback.ts","../src/replay/resources.ts","../src/replay/session.ts","../src/texel-decode.ts"],"names":["err","wrap","require_deflate","require_inflate","pako","groups","blob","ok","result","bytesToHex","sha256","makeErr","makeOk","estimateBytes","bytesPerTexel","COPY_DST_MAP_READ","createShaderModule","stringField","bytes","index"],"mappings":"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","file":"index.mjs","sourcesContent":["'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n var len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n var n; /* iterates over tree elements */\n var bits; /* bit counter */\n var length; /* length value */\n var code; /* code value */\n var dist; /* distance index */\n var bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar trees = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_SYNC_FLUSH = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar inflate_fast = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar c = require('./zlib/constants');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\nvar GZheader = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 aligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign = require('./lib/utils/common').assign;\n\nvar deflate = require('./lib/deflate');\nvar inflate = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n","// @forgeax/engine-rhi-debug/src/errors -- one closed core error union.\n\n/// <reference types=\"@webgpu/types\" />\n\n/** The only error vocabulary crossing the RHI-debug core boundary. */\nexport type RhiDebugErrorCode =\n | 'capture-unavailable'\n | 'capture-busy'\n | 'capture-snapshot-failed'\n | 'capture-timeout'\n | 'tape-invalid'\n | 'tape-version-unsupported'\n | 'replay-capability-mismatch'\n | 'replay-event-failed'\n | 'replay-position-invalid'\n | 'readback-failed'\n | 'readback-unsupported';\n\nexport type CaptureStage = 'capture' | 'snapshot';\n\nexport interface CaptureFailureDetail {\n readonly stage: CaptureStage;\n readonly cause: string;\n readonly handleId?: string;\n readonly resourceKind?: 'buffer' | 'texture';\n}\n\nexport interface CaptureTimeoutDetail {\n readonly stage: 'snapshot';\n readonly cause: string;\n readonly timeoutMs: number;\n readonly progress?: {\n readonly snapshotStage: 'queue-drain' | 'resource-readback';\n readonly totalResources: number;\n readonly completedResources: number;\n readonly skippedResources: number;\n readonly currentHandleId: string | null;\n readonly currentKind: 'buffer' | 'texture' | null;\n readonly currentSizeBytes: number | null;\n readonly elapsedMs: number;\n };\n}\n\nexport interface TapeFailureDetail {\n readonly stage: 'decode' | 'validate';\n readonly cause: string;\n readonly handleId?: string;\n readonly eventIndex?: number;\n}\n\nexport interface TapeVersionDetail {\n readonly foundVersion: number;\n readonly expectedVersion: number;\n}\n\nexport interface ReplayCapabilityFailureDetail {\n readonly stage: 'replay';\n readonly cause: string;\n}\n\nexport interface ReplayEventFailureDetail {\n readonly eventIndex: number;\n readonly kind: string;\n readonly stage: string;\n readonly cause: string;\n}\n\nexport interface ReplayPositionDetail {\n readonly requested: number;\n readonly available: number;\n}\n\nexport interface ReadbackFailureDetail {\n readonly stage: 'readback';\n readonly cause: string;\n readonly phase?: 'copy' | 'map';\n}\n\nexport interface ReadbackUnsupportedDetail {\n readonly stage: 'readback';\n readonly resourceId?: string;\n readonly format?: string;\n readonly reason: string;\n}\n\ntype RhiDebugDetailByCode = {\n 'capture-unavailable': CaptureFailureDetail;\n 'capture-busy': CaptureFailureDetail;\n 'capture-snapshot-failed': CaptureFailureDetail;\n 'capture-timeout': CaptureTimeoutDetail;\n 'tape-invalid': TapeFailureDetail;\n 'tape-version-unsupported': TapeVersionDetail;\n 'replay-capability-mismatch': ReplayCapabilityFailureDetail;\n 'replay-event-failed': ReplayEventFailureDetail;\n 'replay-position-invalid': ReplayPositionDetail;\n 'readback-failed': ReadbackFailureDetail;\n 'readback-unsupported': ReadbackUnsupportedDetail;\n};\n\nexport type RhiDebugErrorDetail = RhiDebugDetailByCode[RhiDebugErrorCode];\n\nexport type RhiDebugErrorFor<C extends RhiDebugErrorCode> = {\n readonly code: C;\n readonly expected: string;\n readonly hint: string;\n readonly detail: RhiDebugDetailByCode[C];\n};\n\nexport type RhiDebugError = {\n [C in RhiDebugErrorCode]: RhiDebugErrorFor<C>;\n}[RhiDebugErrorCode];\n\nconst VERSION_HINT =\n 'use the source revision/tool that produced this tape, or capture again on the current revision';\n\nexport function createRhiDebugError<C extends RhiDebugErrorCode>(\n code: C,\n detail: RhiDebugDetailByCode[C],\n): RhiDebugErrorFor<C> {\n return {\n code,\n expected: expectedFor(code),\n hint: recoveryHint(code),\n detail,\n };\n}\n\nfunction expectedFor(code: RhiDebugErrorCode): string {\n switch (code) {\n case 'capture-unavailable':\n case 'capture-busy':\n case 'capture-snapshot-failed':\n case 'capture-timeout':\n return 'a capture capability that can complete one bounded frame';\n case 'tape-invalid':\n case 'tape-version-unsupported':\n return 'a valid v7 RHI debug tape';\n case 'replay-capability-mismatch':\n case 'replay-event-failed':\n case 'replay-position-invalid':\n return 'a fresh replay session with a valid workIndex';\n case 'readback-failed':\n case 'readback-unsupported':\n return 'a supported readback target';\n }\n}\n\nfunction recoveryHint(code: RhiDebugErrorCode): string {\n switch (code) {\n case 'capture-unavailable':\n return 'enable the single RHI capture capability and retry';\n case 'capture-busy':\n return 'wait for the active capture to finish, then issue one new request';\n case 'capture-snapshot-failed':\n return 'inspect the snapshot stage and capture again after fixing the resource';\n case 'capture-timeout':\n return 'increase the bounded timeout or capture again after the device becomes idle';\n case 'tape-invalid':\n return 'obtain complete bytes and retry strict decoding; do not continue to replay';\n case 'tape-version-unsupported':\n return VERSION_HINT;\n case 'replay-capability-mismatch':\n return 'use a fresh device satisfying the recorded RHI capabilities';\n case 'replay-event-failed':\n return 'inspect eventIndex, kind, stage, and cause; later work is not valid';\n case 'replay-position-invalid':\n return 'choose a workIndex present in FrameModel.works';\n case 'readback-failed':\n return 'inspect the readback cause and retry on a live fresh replay session';\n case 'readback-unsupported':\n return 'inspect the descriptor or use a backend with the requested readback support';\n }\n}\n","import type { EventKind, ResourceKind, RhiCallEvent } from './types';\n\nexport type EventCategory = 'resource' | 'pass' | 'state' | 'work' | 'copy' | 'submit' | 'marker';\n\nexport interface EventSemantics {\n readonly category: EventCategory;\n readonly created: (event: RhiCallEvent) => readonly string[];\n readonly read: (event: RhiCallEvent) => readonly string[];\n readonly written: (event: RhiCallEvent) => readonly string[];\n readonly destroyed: (event: RhiCallEvent) => readonly string[];\n}\n\nexport const eventKinds = [\n 'frameMark',\n 'createBuffer',\n 'createTexture',\n 'destroyBuffer',\n 'destroyTexture',\n 'createTextureView',\n 'createSampler',\n 'createBindGroupLayout',\n 'createBindGroup',\n 'createPipelineLayout',\n 'createRenderPipeline',\n 'createComputePipeline',\n 'createShaderModule',\n 'createCommandEncoder',\n 'writeBuffer',\n 'writeTexture',\n 'copyExternalImageToTexture',\n 'submit',\n 'beginRenderPass',\n 'beginComputePass',\n 'copyBufferToBuffer',\n 'copyBufferToTexture',\n 'copyTextureToBuffer',\n 'copyTextureToTexture',\n 'clearBuffer',\n 'pushDebugGroup',\n 'popDebugGroup',\n 'insertDebugMarker',\n 'finish',\n 'setPipeline',\n 'setVertexBuffer',\n 'setIndexBuffer',\n 'setBindGroup',\n 'draw',\n 'drawIndexed',\n 'setViewport',\n 'setScissorRect',\n 'setStencilReference',\n 'endRenderPass',\n 'setBlendConstant',\n 'drawIndirect',\n 'drawIndexedIndirect',\n 'passPushDebugGroup',\n 'passPopDebugGroup',\n 'passInsertDebugMarker',\n 'setComputePipeline',\n 'dispatchWorkgroups',\n 'dispatchWorkgroupsIndirect',\n 'endComputePass',\n 'initialData',\n] as const satisfies readonly EventKind[];\n\nexport const workEventKinds = [\n 'draw',\n 'drawIndexed',\n 'drawIndirect',\n 'drawIndexedIndirect',\n 'dispatchWorkgroups',\n 'dispatchWorkgroupsIndirect',\n] as const satisfies readonly EventKind[];\n\nexport function isWorkEvent(kind: EventKind): boolean {\n return (workEventKinds as readonly string[]).includes(kind);\n}\n\nexport const EVENT_SEMANTICS: Readonly<Record<EventKind, EventSemantics>> = Object.fromEntries(\n eventKinds.map((kind) => [kind, semanticsFor(kind)]),\n) as Record<EventKind, EventSemantics>;\n\nexport function resourceKindForEvent(kind: EventKind): ResourceKind | undefined {\n switch (kind) {\n case 'createBuffer':\n return 'buffer';\n case 'createTexture':\n return 'texture';\n case 'createTextureView':\n return 'texture-view';\n case 'createSampler':\n return 'sampler';\n case 'createShaderModule':\n return 'shader-module';\n case 'createRenderPipeline':\n case 'createComputePipeline':\n return 'pipeline';\n case 'createBindGroup':\n case 'createBindGroupLayout':\n case 'createPipelineLayout':\n return 'binding';\n case 'createCommandEncoder':\n return 'encoder';\n default:\n return undefined;\n }\n}\n\nfunction semanticsFor(kind: EventKind): EventSemantics {\n const category = categoryFor(kind);\n return {\n category,\n created: (event) => createdHandles(event),\n read: (event) => referencedHandles(event),\n written: (event) => writtenHandles(event),\n destroyed: (event) =>\n event.kind === 'destroyBuffer' || event.kind === 'destroyTexture'\n ? stringField(event, 'handleId')\n : [],\n };\n}\n\nfunction categoryFor(kind: EventKind): EventCategory {\n if (isWorkEvent(kind)) return 'work';\n if (kind.startsWith('create') || kind.startsWith('destroy') || kind === 'initialData')\n return 'resource';\n if (kind.includes('Pass')) return 'pass';\n if (kind.startsWith('copy') || kind === 'clearBuffer' || kind.startsWith('write')) return 'copy';\n if (kind === 'submit' || kind === 'finish') return 'submit';\n if (kind.includes('Debug')) return 'marker';\n return 'state';\n}\n\nfunction createdHandles(event: RhiCallEvent): readonly string[] {\n if (event.kind === 'createTextureView') return [event.resultHandleId];\n if (event.kind === 'createCommandEncoder') return [event.cmdHandleId];\n if (resourceKindForEvent(event.kind) !== undefined) return stringField(event, 'handleId');\n return [];\n}\n\nfunction referencedHandles(event: RhiCallEvent): readonly string[] {\n const keys = [\n 'sourceHandleId',\n 'layoutHandleId',\n 'vertexShaderModuleHandleId',\n 'fragmentShaderModuleHandleId',\n 'computeShaderModuleHandleId',\n 'handleId',\n 'bufferHandleId',\n 'textureHandleId',\n 'source',\n 'destination',\n 'resourceHandleIds',\n 'bindGroupHandleId',\n 'pipelineHandleId',\n 'indexBufferHandleId',\n 'vertexBufferHandleId',\n ];\n return keys.flatMap((key) => stringField(event, key));\n}\n\nfunction writtenHandles(event: RhiCallEvent): readonly string[] {\n if (event.kind === 'writeBuffer' || event.kind === 'writeTexture')\n return stringField(event, 'handleId');\n if (\n event.kind === 'copyBufferToBuffer' ||\n event.kind === 'copyBufferToTexture' ||\n event.kind === 'copyTextureToBuffer' ||\n event.kind === 'copyTextureToTexture'\n )\n return stringField(event, 'destination');\n return [];\n}\n\nfunction stringField(event: object, key: string): readonly string[] {\n const value = (event as Record<string, unknown>)[key];\n if (typeof value === 'string') return [value];\n if (Array.isArray(value)) return value.filter((item): item is string => typeof item === 'string');\n return [];\n}\n","import { EVENT_SEMANTICS, eventKinds, isWorkEvent, resourceKindForEvent } from './event-semantics';\nimport type { EventKind, ResourceKind, Tape } from './types';\n\nexport interface TapePassEntry {\n readonly passIndex: number;\n readonly kind: 'render' | 'compute';\n readonly beginEventIndex: number;\n readonly endEventIndex: number | undefined;\n readonly workIndices: readonly number[];\n}\n\nexport interface TapeWorkEntry {\n readonly workIndex: number;\n readonly eventIndex: number;\n readonly passIndex: number;\n readonly kind: Extract<\n EventKind,\n | 'draw'\n | 'drawIndexed'\n | 'drawIndirect'\n | 'drawIndexedIndirect'\n | 'dispatchWorkgroups'\n | 'dispatchWorkgroupsIndirect'\n >;\n}\n\nexport interface TapeResourceEntry {\n readonly resourceId: string;\n readonly kind: ResourceKind;\n readonly origin: 'bootstrap' | 'frame';\n readonly createEventIndex: number | undefined;\n readonly destroyEventIndex: number | undefined;\n}\n\nexport interface TapeIndex {\n readonly passes: readonly TapePassEntry[];\n readonly works: readonly TapeWorkEntry[];\n readonly resources: readonly TapeResourceEntry[];\n readonly eventKinds: readonly EventKind[];\n readonly passIndexByEvent: readonly number[];\n}\n\nexport function buildTapeIndex(tape: Tape): TapeIndex {\n const passes: TapePassEntry[] = [];\n const works: TapeWorkEntry[] = [];\n const resources = new Map<string, TapeResourceEntry>();\n const passIndexByEvent: number[] = [];\n let passIndex = -1;\n let currentPass:\n | { kind: 'render' | 'compute'; beginEventIndex: number; workIndices: number[] }\n | undefined;\n for (const [eventIndex, event] of tape.events.entries()) {\n passIndexByEvent[eventIndex] = passIndex;\n const semantics = EVENT_SEMANTICS[event.kind];\n if (event.kind === 'beginRenderPass' || event.kind === 'beginComputePass') {\n passIndex++;\n passIndexByEvent[eventIndex] = passIndex;\n currentPass = {\n kind: event.kind === 'beginRenderPass' ? 'render' : 'compute',\n beginEventIndex: eventIndex,\n workIndices: [],\n };\n }\n if (isWorkEvent(event.kind)) {\n const workIndex = works.length;\n works.push({ workIndex, eventIndex, passIndex, kind: event.kind as TapeWorkEntry['kind'] });\n currentPass?.workIndices.push(workIndex);\n }\n if (event.kind === 'endRenderPass' || event.kind === 'endComputePass') {\n if (currentPass) {\n passes.push({\n passIndex,\n kind: currentPass.kind,\n beginEventIndex: currentPass.beginEventIndex,\n endEventIndex: eventIndex,\n workIndices: currentPass.workIndices,\n });\n currentPass = undefined;\n }\n }\n const kind = resourceKindForEvent(event.kind);\n for (const resourceId of semantics.created(event)) {\n if (kind)\n resources.set(resourceId, {\n resourceId,\n kind,\n origin: 'frame',\n createEventIndex: eventIndex,\n destroyEventIndex: undefined,\n });\n }\n for (const resourceId of semantics.destroyed(event)) {\n const previous = resources.get(resourceId);\n if (previous) resources.set(resourceId, { ...previous, destroyEventIndex: eventIndex });\n }\n }\n if (currentPass)\n passes.push({\n passIndex,\n kind: currentPass.kind,\n beginEventIndex: currentPass.beginEventIndex,\n endEventIndex: undefined,\n workIndices: currentPass.workIndices,\n });\n for (const resource of tape.bootstrap)\n resources.set(resource.handleId, {\n resourceId: resource.handleId,\n kind: resource.kind,\n origin: 'bootstrap',\n createEventIndex: undefined,\n destroyEventIndex: undefined,\n });\n return {\n passes,\n works,\n resources: [...resources.values()],\n eventKinds: [...eventKinds],\n passIndexByEvent,\n };\n}\n","/// <reference types=\"@webgpu/types\" />\n// @forgeax/engine-rhi-debug/texel-layout -- SSOT for how a color texture's GPU\n// bytes are laid out, shared by the snapshot readback (recorder) and the seed\n// write-back (replayer) so both agree on byte layout without duplicating it in\n// the tape (architecture-principles #1 SSOT / #2 Derive: format + size +\n// mipLevelCount already live in the createTexture event; layout is derived, not\n// re-stored in the initialData event).\n//\n// Why this exists: the original frame-header snapshot hardcoded bytesPerRow =\n// width*4, depthOrArrayLayers = 1, mipLevel = 0 -- correct only for a single-mip\n// single-layer 4-byte texture (rgba8). IBL resources break all three: the\n// irradiance/prefilter cubemaps are rgba16float (8 B/texel), 6 array layers, and\n// the prefilter map has a 5-mip roughness chain. Snapshotting them with the old\n// assumptions either skipped them (-> replay renders unlit/black) or would have\n// seeded corrupt bytes. This module computes the real per-subresource layout so a\n// full snapshot + faithful seed round-trips each color format with a known texel\n// block footprint, including block-compressed formats.\n\n/**\n * Bytes per texel for uncompressed color formats. Block-compressed formats use\n * {@link textureBlockLayout} because their bytes are addressed by blocks.\n */\nexport function bytesPerTexel(format: GPUTextureFormat | undefined): number | undefined {\n if (format === undefined) return undefined;\n return TEXEL_BYTES[format];\n}\n\n// Uncompressed color formats only. Keyed to the W3C WebGPU GPUTextureFormat\n// names. Depth/stencil and block-compressed formats are deliberately absent.\nconst TEXEL_BYTES: Partial<Record<GPUTextureFormat, number>> = {\n // 8-bit channels\n r8unorm: 1,\n r8snorm: 1,\n r8uint: 1,\n r8sint: 1,\n rg8unorm: 2,\n rg8snorm: 2,\n rg8uint: 2,\n rg8sint: 2,\n rgba8unorm: 4,\n 'rgba8unorm-srgb': 4,\n rgba8snorm: 4,\n rgba8uint: 4,\n rgba8sint: 4,\n bgra8unorm: 4,\n 'bgra8unorm-srgb': 4,\n // 16-bit channels\n r16uint: 2,\n r16sint: 2,\n r16float: 2,\n rg16uint: 4,\n rg16sint: 4,\n rg16float: 4,\n rgba16uint: 8,\n rgba16sint: 8,\n rgba16float: 8,\n // 32-bit channels\n r32uint: 4,\n r32sint: 4,\n r32float: 4,\n rg32uint: 8,\n rg32sint: 8,\n rg32float: 8,\n rgba32uint: 16,\n rgba32sint: 16,\n rgba32float: 16,\n // packed\n rgb10a2unorm: 4,\n rg11b10ufloat: 4,\n};\n\nexport interface TextureBlockLayout {\n readonly blockWidth: number;\n readonly blockHeight: number;\n readonly bytesPerBlock: number;\n}\n\nconst COMPRESSED_BLOCKS: Partial<Record<GPUTextureFormat, TextureBlockLayout>> = {\n // BCn: all formats use 4x4 blocks; BC1/BC4 are 8 bytes, the rest 16.\n 'bc1-rgba-unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'bc1-rgba-unorm-srgb': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'bc2-rgba-unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc2-rgba-unorm-srgb': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc3-rgba-unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc3-rgba-unorm-srgb': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc4-r-unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'bc4-r-snorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'bc5-rg-unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc5-rg-snorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc6h-rgb-ufloat': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc6h-rgb-float': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc7-rgba-unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'bc7-rgba-unorm-srgb': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n // ETC2/EAC: all formats use 4x4 blocks; one or two 64-bit blocks.\n 'etc2-rgb8unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'etc2-rgb8unorm-srgb': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'etc2-rgb8a1unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'etc2-rgb8a1unorm-srgb': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'etc2-rgba8unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'etc2-rgba8unorm-srgb': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'eac-r11unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'eac-r11snorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 8 },\n 'eac-rg11unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'eac-rg11snorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n // ASTC uses 16-byte blocks with a format-specific footprint.\n 'astc-4x4-unorm': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'astc-4x4-unorm-srgb': { blockWidth: 4, blockHeight: 4, bytesPerBlock: 16 },\n 'astc-5x4-unorm': { blockWidth: 5, blockHeight: 4, bytesPerBlock: 16 },\n 'astc-5x4-unorm-srgb': { blockWidth: 5, blockHeight: 4, bytesPerBlock: 16 },\n 'astc-5x5-unorm': { blockWidth: 5, blockHeight: 5, bytesPerBlock: 16 },\n 'astc-5x5-unorm-srgb': { blockWidth: 5, blockHeight: 5, bytesPerBlock: 16 },\n 'astc-6x5-unorm': { blockWidth: 6, blockHeight: 5, bytesPerBlock: 16 },\n 'astc-6x5-unorm-srgb': { blockWidth: 6, blockHeight: 5, bytesPerBlock: 16 },\n 'astc-6x6-unorm': { blockWidth: 6, blockHeight: 6, bytesPerBlock: 16 },\n 'astc-6x6-unorm-srgb': { blockWidth: 6, blockHeight: 6, bytesPerBlock: 16 },\n 'astc-8x5-unorm': { blockWidth: 8, blockHeight: 5, bytesPerBlock: 16 },\n 'astc-8x5-unorm-srgb': { blockWidth: 8, blockHeight: 5, bytesPerBlock: 16 },\n 'astc-8x6-unorm': { blockWidth: 8, blockHeight: 6, bytesPerBlock: 16 },\n 'astc-8x6-unorm-srgb': { blockWidth: 8, blockHeight: 6, bytesPerBlock: 16 },\n 'astc-8x8-unorm': { blockWidth: 8, blockHeight: 8, bytesPerBlock: 16 },\n 'astc-8x8-unorm-srgb': { blockWidth: 8, blockHeight: 8, bytesPerBlock: 16 },\n 'astc-10x5-unorm': { blockWidth: 10, blockHeight: 5, bytesPerBlock: 16 },\n 'astc-10x5-unorm-srgb': { blockWidth: 10, blockHeight: 5, bytesPerBlock: 16 },\n 'astc-10x6-unorm': { blockWidth: 10, blockHeight: 6, bytesPerBlock: 16 },\n 'astc-10x6-unorm-srgb': { blockWidth: 10, blockHeight: 6, bytesPerBlock: 16 },\n 'astc-10x8-unorm': { blockWidth: 10, blockHeight: 8, bytesPerBlock: 16 },\n 'astc-10x8-unorm-srgb': { blockWidth: 10, blockHeight: 8, bytesPerBlock: 16 },\n 'astc-10x10-unorm': { blockWidth: 10, blockHeight: 10, bytesPerBlock: 16 },\n 'astc-10x10-unorm-srgb': { blockWidth: 10, blockHeight: 10, bytesPerBlock: 16 },\n 'astc-12x10-unorm': { blockWidth: 12, blockHeight: 10, bytesPerBlock: 16 },\n 'astc-12x10-unorm-srgb': { blockWidth: 12, blockHeight: 10, bytesPerBlock: 16 },\n 'astc-12x12-unorm': { blockWidth: 12, blockHeight: 12, bytesPerBlock: 16 },\n 'astc-12x12-unorm-srgb': { blockWidth: 12, blockHeight: 12, bytesPerBlock: 16 },\n};\n\n/** Return the WebGPU texel-block footprint for each supported color format. */\nexport function textureBlockLayout(\n format: GPUTextureFormat | undefined,\n): TextureBlockLayout | undefined {\n if (format === undefined) return undefined;\n return (\n COMPRESSED_BLOCKS[format] ??\n (TEXEL_BYTES[format] === undefined\n ? undefined\n : { blockWidth: 1, blockHeight: 1, bytesPerBlock: TEXEL_BYTES[format] })\n );\n}\n\n// ============================================================================\n// formatInfo -- per-channel semantics for CPU-side decode (viewer preview)\n// ============================================================================\n\n/** How a channel's bits are interpreted (drives the host-side decode-to-RGBA8). */\nexport type ChannelType = 'unorm' | 'snorm' | 'uint' | 'sint' | 'float' | 'ufloat';\n\n/**\n * Per-channel layout of an uncompressed color format, enough to decode its raw\n * GPU bytes into displayable RGBA8 on the host (no GPU). Sits beside\n * {@link bytesPerTexel} (which stays the SSOT for total texel size); the\n * per-channel byte width is derived as `bytesPerTexel / channels` for plain\n * formats, so no byte count is re-stored here. `packed` formats pack all\n * channels into a single 4-byte word (channels read by bit-field, not by a\n * uniform per-channel width).\n */\nexport interface FormatInfo {\n readonly channels: 1 | 2 | 3 | 4;\n readonly channelType: ChannelType;\n /** Channels stored blue-first in memory (swizzle B<->R when decoding). */\n readonly bgra?: boolean;\n /** Bit-packed layout (channels share one 32-bit word) needing special unpack. */\n readonly packed?: 'rgb10a2unorm' | 'rg11b10ufloat';\n}\n\n// Keyed to the same uncompressed color formats as TEXEL_BYTES. Depth/stencil and\n// block-compressed formats are absent (return undefined -> caller falls back).\nconst FORMAT_INFO: Partial<Record<GPUTextureFormat, FormatInfo>> = {\n // 8-bit channels\n r8unorm: { channels: 1, channelType: 'unorm' },\n r8snorm: { channels: 1, channelType: 'snorm' },\n r8uint: { channels: 1, channelType: 'uint' },\n r8sint: { channels: 1, channelType: 'sint' },\n rg8unorm: { channels: 2, channelType: 'unorm' },\n rg8snorm: { channels: 2, channelType: 'snorm' },\n rg8uint: { channels: 2, channelType: 'uint' },\n rg8sint: { channels: 2, channelType: 'sint' },\n rgba8unorm: { channels: 4, channelType: 'unorm' },\n 'rgba8unorm-srgb': { channels: 4, channelType: 'unorm' },\n rgba8snorm: { channels: 4, channelType: 'snorm' },\n rgba8uint: { channels: 4, channelType: 'uint' },\n rgba8sint: { channels: 4, channelType: 'sint' },\n bgra8unorm: { channels: 4, channelType: 'unorm', bgra: true },\n 'bgra8unorm-srgb': { channels: 4, channelType: 'unorm', bgra: true },\n // 16-bit channels\n r16uint: { channels: 1, channelType: 'uint' },\n r16sint: { channels: 1, channelType: 'sint' },\n r16float: { channels: 1, channelType: 'float' },\n rg16uint: { channels: 2, channelType: 'uint' },\n rg16sint: { channels: 2, channelType: 'sint' },\n rg16float: { channels: 2, channelType: 'float' },\n rgba16uint: { channels: 4, channelType: 'uint' },\n rgba16sint: { channels: 4, channelType: 'sint' },\n rgba16float: { channels: 4, channelType: 'float' },\n // 32-bit channels\n r32uint: { channels: 1, channelType: 'uint' },\n r32sint: { channels: 1, channelType: 'sint' },\n r32float: { channels: 1, channelType: 'float' },\n rg32uint: { channels: 2, channelType: 'uint' },\n rg32sint: { channels: 2, channelType: 'sint' },\n rg32float: { channels: 2, channelType: 'float' },\n rgba32uint: { channels: 4, channelType: 'uint' },\n rgba32sint: { channels: 4, channelType: 'sint' },\n rgba32float: { channels: 4, channelType: 'float' },\n // packed (channels share one 32-bit word; decoded by bit-field)\n rgb10a2unorm: { channels: 4, channelType: 'unorm', packed: 'rgb10a2unorm' },\n rg11b10ufloat: { channels: 3, channelType: 'ufloat', packed: 'rg11b10ufloat' },\n};\n\n/**\n * Per-channel layout of an uncompressed color format for host-side decode.\n * Returns `undefined` for depth/stencil, block-compressed, or unknown formats\n * (the viewer's preview path treats `undefined` as \"not directly previewable\").\n */\nexport function formatInfo(format: GPUTextureFormat | string | undefined): FormatInfo | undefined {\n if (format === undefined) return undefined;\n return FORMAT_INFO[format as GPUTextureFormat];\n}\n\n/** One mip level of one array layer: its extent + where its tight bytes live in the blob. */\nexport interface SubresourceSlice {\n readonly layer: number;\n readonly mip: number;\n readonly width: number;\n readonly height: number;\n readonly byteOffset: number;\n readonly byteLength: number;\n}\n\n/** Full subresource layout of a texture snapshot blob. */\nexport interface TextureLayout {\n readonly blockWidth: number;\n readonly blockHeight: number;\n readonly bytesPerBlock: number;\n readonly layerCount: number;\n readonly mipLevelCount: number;\n readonly slices: readonly SubresourceSlice[];\n /** Total tight byte length across every subresource (the blob size). */\n readonly totalBytes: number;\n}\n\nexport interface TextureExtent {\n readonly width: number;\n readonly height: number;\n readonly layerCount: number;\n}\n\n/** Project a serialized GPU texture extent onto the dimensions used by snapshots. */\nexport function projectTextureExtent(size: unknown): TextureExtent {\n if (typeof size === 'number') return { width: size, height: 1, layerCount: 1 };\n if (Array.isArray(size)) {\n const width = typeof size[0] === 'number' ? size[0] : 1;\n const height = typeof size[1] === 'number' ? size[1] : width;\n const layerCount = typeof size[2] === 'number' ? size[2] : 1;\n return { width, height, layerCount };\n }\n if (size !== null && typeof size === 'object') {\n const record = size as {\n readonly width?: unknown;\n readonly height?: unknown;\n readonly depthOrArrayLayers?: unknown;\n };\n const width = typeof record.width === 'number' ? record.width : 1;\n const height = typeof record.height === 'number' ? record.height : width;\n const layerCount =\n typeof record.depthOrArrayLayers === 'number' ? record.depthOrArrayLayers : 1;\n return { width, height, layerCount };\n }\n return { width: 1, height: 1, layerCount: 1 };\n}\n\n/**\n * Compute the canonical tight byte layout for a texture snapshot: every array\n * layer, every mip level, packed in layer-major then mip-minor order with no row\n * padding (tight bytesPerRow = blockCountX * bytesPerBlock). Mip dimensions halve\n * per level (floor, min 1), matching the WebGPU mip size rule.\n *\n * Returns `undefined` when the format has no known block footprint. The\n * recorder reads each slice into this exact offset; the replayer reads each\n * slice back out and writeTexture's it to (layer, mip).\n */\nexport function computeTextureLayout(\n format: GPUTextureFormat | undefined,\n width: number,\n height: number,\n layerCount: number,\n mipLevelCount: number,\n): TextureLayout | undefined {\n const block = textureBlockLayout(format);\n if (block === undefined) return undefined;\n\n const layers = Math.max(1, layerCount);\n const mips = Math.max(1, mipLevelCount);\n const slices: SubresourceSlice[] = [];\n let offset = 0;\n for (let layer = 0; layer < layers; layer++) {\n for (let mip = 0; mip < mips; mip++) {\n const mw = Math.max(1, width >> mip);\n const mh = Math.max(1, height >> mip);\n const blockCountX = Math.ceil(mw / block.blockWidth);\n const blockCountY = Math.ceil(mh / block.blockHeight);\n const byteLength = blockCountX * blockCountY * block.bytesPerBlock;\n slices.push({ layer, mip, width: mw, height: mh, byteOffset: offset, byteLength });\n offset += byteLength;\n }\n }\n return {\n blockWidth: block.blockWidth,\n blockHeight: block.blockHeight,\n bytesPerBlock: block.bytesPerBlock,\n layerCount: layers,\n mipLevelCount: mips,\n slices,\n totalBytes: offset,\n };\n}\n","// @forgeax/engine-rhi-debug/src/frame-model -- v7 structural tape projection.\n\n/// <reference types=\"@webgpu/types\" />\n\nimport {\n EVENT_SEMANTICS,\n type EventCategory,\n isWorkEvent,\n resourceKindForEvent,\n} from './protocol/event-semantics';\nimport type { TapeWorkEntry } from './protocol/tape-index';\nimport { buildTapeIndex } from './protocol/tape-index';\nimport type { Tape as V7Tape } from './protocol/types';\nimport { computeTextureLayout } from './texel-layout';\nimport type { HandleId, RhiCallEvent } from './types';\n\ntype JsonPrimitive = string | number | boolean | null;\nexport type JsonValue =\n | JsonPrimitive\n | readonly JsonValue[]\n | { readonly [key: string]: JsonValue };\n\nexport interface CommandEntry {\n readonly eventIndex: number;\n readonly passIndex: number;\n readonly kind: string;\n readonly category: EventCategory;\n readonly isWork: boolean;\n readonly params: JsonValue;\n readonly group: readonly string[];\n readonly marker?: string;\n}\n\nexport interface FramePass {\n readonly passIndex: number;\n readonly kind: 'render' | 'compute';\n readonly beginEventIndex: number;\n readonly endEventIndex: number | null;\n readonly workIndices: readonly number[];\n readonly commandIndices: readonly number[];\n colorAttachmentViewHandleIds: readonly string[];\n depthStencilViewHandleId: string | null;\n}\n\nexport interface ResourceConsumer {\n readonly eventIndex: number;\n readonly workIndex: number | null;\n readonly access: 'read' | 'write';\n}\n\nexport interface ResourceEntry {\n readonly resourceId: string;\n readonly kind: string;\n readonly origin: 'bootstrap' | 'frame';\n readonly createEventIndex: number | null;\n readonly destroyEventIndex: number | null;\n readonly descriptor: JsonValue | null;\n consumers: readonly ResourceConsumer[];\n readonly lifecycle: {\n readonly state: 'live' | 'destroyed' | 'unavailable';\n readonly byteEstimate: ResourceByteEstimate | null;\n };\n}\n\nexport interface WorkBinding {\n readonly groupIndex: number;\n readonly binding: number;\n readonly bindGroupId: string;\n readonly resourceId: string | null;\n readonly resourceKind: string | null;\n readonly bufferOffset: number | null;\n readonly bufferSize: number | null;\n}\n\nexport interface WorkPipeline {\n readonly status: 'available' | 'unavailable';\n readonly pipelineHandleId?: string;\n readonly kind?: 'render' | 'compute';\n readonly descriptor?: JsonValue;\n readonly shaders: readonly {\n readonly stage: 'vertex' | 'fragment' | 'compute';\n readonly moduleHandleId: string;\n readonly entryPoint: string | null;\n readonly source: string | null;\n }[];\n readonly reason?: 'pipeline-not-bound' | 'descriptor-unavailable';\n}\n\nexport interface WorkEntry extends TapeWorkEntry {\n readonly commandIndex: number;\n readonly drawCall: JsonValue;\n readonly pipeline: WorkPipeline;\n readonly bindings: readonly WorkBinding[];\n readonly vertexBuffers: readonly {\n readonly slot: number;\n readonly bufferHandleId: string;\n readonly offset: number;\n readonly size: number | null;\n }[];\n readonly indexBuffer: {\n readonly bufferHandleId: string;\n readonly format: string;\n readonly offset: number;\n readonly size: number | null;\n } | null;\n readonly attachments: {\n readonly colorViewHandleIds: readonly string[];\n readonly depthStencilViewHandleId: string | null;\n } | null;\n}\n\nexport interface FrameModel {\n readonly commands: readonly CommandEntry[];\n readonly passes: readonly FramePass[];\n readonly resources: readonly ResourceEntry[];\n readonly resourceLifecycle: ResourceLifecycleSummary;\n readonly works: readonly WorkEntry[];\n}\n\nfunction jsonValue(value: unknown): JsonValue {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n return value;\n if (value === undefined) return null;\n if (Array.isArray(value)) return value.map(jsonValue);\n if (ArrayBuffer.isView(value))\n return Array.from(value as unknown as ArrayLike<unknown>, jsonValue);\n if (typeof value === 'object') {\n const output: Record<string, JsonValue> = {};\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n if (child !== undefined) output[key] = jsonValue(child);\n }\n return output;\n }\n return String(value);\n}\n\nfunction eventDescriptor(event: RhiCallEvent): JsonValue {\n return jsonValue(event);\n}\n\nfunction workPipeline(\n pipelineId: string | undefined,\n pipelineEvents: ReadonlyMap<string, RhiCallEvent>,\n shaderEvents: ReadonlyMap<string, RhiCallEvent>,\n): WorkPipeline {\n if (pipelineId === undefined)\n return { status: 'unavailable', shaders: [], reason: 'pipeline-not-bound' };\n const event = pipelineEvents.get(pipelineId);\n if (event === undefined)\n return { status: 'unavailable', shaders: [], reason: 'descriptor-unavailable' };\n const shaders: WorkPipeline['shaders'][number][] = [];\n const shaderRefs =\n event.kind === 'createRenderPipeline'\n ? [\n ['vertex', event.vertexShaderModuleHandleId, event.desc.vertex?.entryPoint],\n ['fragment', event.fragmentShaderModuleHandleId, event.desc.fragment?.entryPoint],\n ]\n : event.kind === 'createComputePipeline'\n ? [['compute', event.computeShaderModuleHandleId, event.desc.compute.entryPoint]]\n : [];\n for (const [stage, moduleId, entryPoint] of shaderRefs) {\n if (typeof moduleId !== 'string') continue;\n const shader = shaderEvents.get(moduleId);\n shaders.push({\n stage: stage as 'vertex' | 'fragment' | 'compute',\n moduleHandleId: moduleId,\n entryPoint: typeof entryPoint === 'string' ? entryPoint : null,\n source: shader?.kind === 'createShaderModule' ? shader.wgslCode : null,\n });\n }\n return {\n status: 'available',\n pipelineHandleId: pipelineId,\n kind: event.kind === 'createRenderPipeline' ? 'render' : 'compute',\n descriptor: eventDescriptor(event),\n shaders,\n };\n}\n\nexport function buildFrameModel(tape: V7Tape): FrameModel {\n const index = buildTapeIndex(tape);\n const events = tape.events;\n const passCommandIndices = index.passes.map(() => [] as number[]);\n const commands: CommandEntry[] = [];\n const groupPath: string[] = [];\n const currentPassByEvent = index.passIndexByEvent;\n const passAttachmentByIndex = new Map<number, FramePass>();\n\n for (const pass of index.passes) {\n passAttachmentByIndex.set(pass.passIndex, {\n passIndex: pass.passIndex,\n kind: pass.kind,\n beginEventIndex: pass.beginEventIndex,\n endEventIndex: pass.endEventIndex ?? null,\n workIndices: pass.workIndices,\n commandIndices: [],\n colorAttachmentViewHandleIds: [],\n depthStencilViewHandleId: null,\n });\n const begin = events[pass.beginEventIndex];\n if (begin?.kind === 'beginRenderPass') {\n const attachment = passAttachmentByIndex.get(pass.passIndex);\n if (attachment !== undefined) {\n attachment.colorAttachmentViewHandleIds = begin.colorAttachmentViewHandleIds.filter(\n (id): id is string => typeof id === 'string',\n );\n attachment.depthStencilViewHandleId = begin.depthStencilViewHandleId ?? null;\n }\n }\n }\n\n for (const [eventIndex, event] of events.entries()) {\n const passIndex = currentPassByEvent[eventIndex] ?? -1;\n const isPush = event.kind === 'pushDebugGroup' || event.kind === 'passPushDebugGroup';\n const isPop = event.kind === 'popDebugGroup' || event.kind === 'passPopDebugGroup';\n const group = isPush ? [...groupPath, event.groupLabel] : [...groupPath];\n const marker =\n event.kind === 'insertDebugMarker' || event.kind === 'passInsertDebugMarker'\n ? event.markerLabel\n : undefined;\n const commandIndex = commands.length;\n commands.push({\n eventIndex,\n passIndex,\n kind: event.kind,\n category: EVENT_SEMANTICS[event.kind].category,\n isWork: isWorkEvent(event.kind),\n params: eventDescriptor(event),\n group,\n ...(marker === undefined ? {} : { marker }),\n });\n if (passIndex >= 0) passCommandIndices[passIndex]?.push(commandIndex);\n if (isPush) groupPath.push(event.groupLabel);\n if (isPop) groupPath.pop();\n }\n\n const pipelineEvents = new Map<string, RhiCallEvent>();\n const shaderEvents = new Map<string, RhiCallEvent>();\n const bindGroups = new Map<string, Extract<RhiCallEvent, { kind: 'createBindGroup' }>>();\n const resourceRecords = new Map<string, ResourceEntry>();\n const workByEvent = new Map<number, number>();\n for (const work of index.works) workByEvent.set(work.eventIndex, work.workIndex);\n\n for (const bootstrap of tape.bootstrap) {\n // Strict v7 decoding validates each bootstrap create record against the same\n // RhiCallEvent union before FrameModel construction.\n const create = bootstrap.create as unknown as RhiCallEvent;\n if (create.kind === 'createRenderPipeline' || create.kind === 'createComputePipeline')\n pipelineEvents.set(create.handleId, create);\n if (create.kind === 'createShaderModule') shaderEvents.set(create.handleId, create);\n if (create.kind === 'createBindGroup') bindGroups.set(create.handleId, create);\n resourceRecords.set(bootstrap.handleId, {\n resourceId: bootstrap.handleId,\n kind: bootstrap.kind,\n origin: 'bootstrap',\n createEventIndex: null,\n destroyEventIndex: null,\n descriptor: jsonValue(bootstrap.create),\n consumers: [],\n lifecycle: { state: 'unavailable', byteEstimate: null },\n });\n }\n for (const [eventIndex, event] of events.entries()) {\n if (event.kind === 'createRenderPipeline' || event.kind === 'createComputePipeline')\n pipelineEvents.set(event.handleId, event);\n if (event.kind === 'createShaderModule') shaderEvents.set(event.handleId, event);\n if (event.kind === 'createBindGroup') bindGroups.set(event.handleId, event);\n const kind = resourceKindForEvent(event.kind);\n const handleId =\n kind === undefined\n ? undefined\n : event.kind === 'createTextureView'\n ? event.resultHandleId\n : event.kind === 'createCommandEncoder'\n ? event.cmdHandleId\n : 'handleId' in event\n ? event.handleId\n : undefined;\n if (kind !== undefined && handleId !== undefined) {\n resourceRecords.set(handleId, {\n resourceId: handleId,\n kind,\n origin: 'frame',\n createEventIndex: eventIndex,\n destroyEventIndex: null,\n descriptor: eventDescriptor(event),\n consumers: [],\n lifecycle: { state: 'unavailable', byteEstimate: null },\n });\n }\n }\n\n const lifecycle = buildResourceLifecycle(events);\n for (const record of lifecycle.resources) {\n const resource = resourceRecords.get(record.handleId);\n if (resource === undefined) continue;\n resourceRecords.set(record.handleId, {\n ...resource,\n destroyEventIndex: record.destroyedEventIndex ?? null,\n lifecycle: { state: record.state, byteEstimate: record.byteEstimate },\n });\n }\n for (const [eventIndex, event] of events.entries()) {\n const workIndex = workByEvent.get(eventIndex) ?? null;\n for (const resourceId of EVENT_SEMANTICS[event.kind].read(event)) {\n const resource = resourceRecords.get(resourceId);\n if (resource !== undefined)\n resource.consumers = [...resource.consumers, { eventIndex, workIndex, access: 'read' }];\n }\n for (const resourceId of EVENT_SEMANTICS[event.kind].written(event)) {\n const resource = resourceRecords.get(resourceId);\n if (resource !== undefined)\n resource.consumers = [...resource.consumers, { eventIndex, workIndex, access: 'write' }];\n }\n }\n\n const works: WorkEntry[] = [];\n const currentPipeline = new Map<string, string>();\n const currentVertexBuffers = new Map<\n string,\n Map<number, { bufferHandleId: string; offset: number; size: number | null }>\n >();\n const currentIndexBuffers = new Map<string, WorkEntry['indexBuffer']>();\n const currentBindGroups = new Map<string, Map<number, string>>();\n const workByEventEntry = new Map(index.works.map((work) => [work.eventIndex, work]));\n for (const [eventIndex, event] of events.entries()) {\n if (event === undefined) continue;\n const passHandleId = 'passHandleId' in event ? event.passHandleId : '';\n if (event.kind === 'setPipeline' || event.kind === 'setComputePipeline')\n currentPipeline.set(passHandleId, event.pipelineHandleId);\n if (event.kind === 'setVertexBuffer') {\n const buffers = currentVertexBuffers.get(passHandleId) ?? new Map();\n buffers.set(event.slot, {\n bufferHandleId: event.bufferHandleId,\n offset: event.offset ?? 0,\n size: event.size ?? null,\n });\n currentVertexBuffers.set(passHandleId, buffers);\n }\n if (event.kind === 'setIndexBuffer')\n currentIndexBuffers.set(passHandleId, {\n bufferHandleId: event.bufferHandleId,\n format: event.format,\n offset: event.offset ?? 0,\n size: event.size ?? null,\n });\n if (event.kind === 'setBindGroup') {\n const groups = currentBindGroups.get(passHandleId) ?? new Map();\n groups.set(event.index, event.bindGroupHandleId);\n currentBindGroups.set(passHandleId, groups);\n }\n if (!isWorkEvent(event.kind)) continue;\n const work = workByEventEntry.get(eventIndex);\n if (work === undefined) continue;\n const pipelineId = currentPipeline.get(passHandleId);\n const groups = currentBindGroups.get(passHandleId) ?? new Map();\n const bindings: WorkBinding[] = [];\n for (const [groupIndex, bindGroupId] of groups) {\n const bindGroup = bindGroups.get(bindGroupId);\n for (const [entryIndex, resourceId] of bindGroup?.resourceHandleIds.entries() ?? []) {\n const entry = bindGroup?.entries[entryIndex];\n bindings.push({\n groupIndex,\n binding: entry?.binding ?? entryIndex,\n bindGroupId,\n resourceId: resourceId ?? null,\n resourceKind: entry?.resourceKind ?? null,\n bufferOffset: entry?.bufferOffset ?? null,\n bufferSize: entry?.bufferSize ?? null,\n });\n }\n }\n const attachment = passAttachmentByIndex.get(work.passIndex);\n works.push({\n ...work,\n commandIndex: commands.findIndex((command) => command.eventIndex === work.eventIndex),\n drawCall: eventDescriptor(event),\n pipeline: workPipeline(pipelineId, pipelineEvents, shaderEvents),\n bindings,\n vertexBuffers: [...(currentVertexBuffers.get(passHandleId)?.entries() ?? [])].map(\n ([slot, buffer]) => ({ slot, ...buffer }),\n ),\n indexBuffer: currentIndexBuffers.get(passHandleId) ?? null,\n attachments:\n attachment === undefined\n ? null\n : {\n colorViewHandleIds: attachment.colorAttachmentViewHandleIds,\n depthStencilViewHandleId: attachment.depthStencilViewHandleId,\n },\n });\n }\n\n const passes = index.passes.map((pass) => ({\n ...pass,\n endEventIndex: pass.endEventIndex ?? null,\n commandIndices: passCommandIndices[pass.passIndex] ?? [],\n colorAttachmentViewHandleIds:\n passAttachmentByIndex.get(pass.passIndex)?.colorAttachmentViewHandleIds ?? [],\n depthStencilViewHandleId:\n passAttachmentByIndex.get(pass.passIndex)?.depthStencilViewHandleId ?? null,\n }));\n return {\n commands,\n passes,\n resources: [...resourceRecords.values()],\n resourceLifecycle: lifecycle,\n works,\n };\n}\n\n/** A byte estimate that distinguishes known descriptor size from unavailable GPU facts. */\nexport type ResourceByteEstimate =\n | {\n readonly status: 'known';\n readonly bytes: number;\n readonly basis: 'buffer-descriptor' | 'texture-tight-layout';\n }\n | {\n readonly status: 'unavailable';\n readonly reason:\n | 'non-memory-resource'\n | 'unsupported-texture-dimension'\n | 'unsupported-texture-format'\n | 'invalid-texture-size';\n };\n\nexport type ResourceKind =\n | 'buffer'\n | 'texture'\n | 'texture-view'\n | 'sampler'\n | 'bind-group-layout'\n | 'bind-group'\n | 'pipeline-layout'\n | 'render-pipeline'\n | 'compute-pipeline'\n | 'shader-module';\n\nexport type ResourceOrigin = 'engine' | 'swapchain';\n\nexport interface ResourceLifecycleEntry {\n readonly handleId: HandleId;\n readonly kind: ResourceKind;\n readonly origin: ResourceOrigin;\n readonly state: 'live' | 'destroyed';\n readonly createdEventIndex: number;\n readonly destroyedEventIndex?: number;\n readonly byteEstimate: ResourceByteEstimate;\n}\n\nexport interface ResourceLifecycleSummary {\n /** This is the resource closure represented by the tape, not the whole device heap. */\n readonly scope: 'captured-tape-resource-closure';\n readonly counts: {\n readonly created: number;\n readonly destroyed: number;\n readonly live: number;\n readonly destroyEvents: number;\n readonly unknownDestroyEvents: number;\n };\n readonly bytes: {\n readonly knownCreated: number;\n readonly knownDestroyed: number;\n readonly knownLive: number;\n readonly unavailableCreated: number;\n readonly unavailableDestroyed: number;\n readonly unavailableLive: number;\n };\n readonly originBreakdown: Readonly<\n Record<\n ResourceOrigin,\n {\n readonly created: number;\n readonly destroyed: number;\n readonly live: number;\n readonly knownCreated: number;\n readonly knownDestroyed: number;\n readonly knownLive: number;\n readonly unavailableCreated: number;\n readonly unavailableDestroyed: number;\n readonly unavailableLive: number;\n }\n >\n >;\n readonly availability: {\n readonly destroy: 'observed-buffer-texture';\n readonly retire: 'unavailable';\n readonly driverAllocation: 'unavailable';\n };\n readonly resources: readonly ResourceLifecycleEntry[];\n}\n\nfunction asPositiveInteger(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;\n}\n\nfunction normalizeTextureSize(\n size: unknown,\n):\n | { readonly width: number; readonly height: number; readonly depthOrArrayLayers: number }\n | undefined {\n if (typeof size === 'number') {\n const width = asPositiveInteger(size);\n return width === undefined ? undefined : { width, height: 1, depthOrArrayLayers: 1 };\n }\n if (Array.isArray(size)) {\n const width = asPositiveInteger(size[0]);\n const height = asPositiveInteger(size[1] ?? 1);\n const depthOrArrayLayers = asPositiveInteger(size[2] ?? 1);\n return width === undefined || height === undefined || depthOrArrayLayers === undefined\n ? undefined\n : { width, height, depthOrArrayLayers };\n }\n if (size !== null && typeof size === 'object') {\n const raw = size as {\n readonly width?: unknown;\n readonly height?: unknown;\n readonly depthOrArrayLayers?: unknown;\n };\n const width = asPositiveInteger(raw.width);\n const height = asPositiveInteger(raw.height ?? 1);\n const depthOrArrayLayers = asPositiveInteger(raw.depthOrArrayLayers ?? 1);\n return width === undefined || height === undefined || depthOrArrayLayers === undefined\n ? undefined\n : { width, height, depthOrArrayLayers };\n }\n return undefined;\n}\n\nfunction estimateBytes(event: RhiCallEvent): ResourceByteEstimate {\n if (event.kind === 'createBuffer') {\n return { status: 'known', bytes: event.desc.size, basis: 'buffer-descriptor' };\n }\n if (event.kind !== 'createTexture') {\n return { status: 'unavailable', reason: 'non-memory-resource' };\n }\n\n const dimension = event.desc.dimension ?? '2d';\n if (dimension === '3d') {\n return { status: 'unavailable', reason: 'unsupported-texture-dimension' };\n }\n const size = normalizeTextureSize(event.desc.size);\n if (size === undefined) return { status: 'unavailable', reason: 'invalid-texture-size' };\n const layers = dimension === '1d' ? 1 : size.depthOrArrayLayers;\n const layout = computeTextureLayout(\n event.desc.format,\n size.width,\n size.height,\n layers,\n event.desc.mipLevelCount ?? 1,\n );\n if (layout === undefined) return { status: 'unavailable', reason: 'unsupported-texture-format' };\n return {\n status: 'known',\n bytes: layout.totalBytes * (event.desc.sampleCount ?? 1),\n basis: 'texture-tight-layout',\n };\n}\n\nfunction resourceIdentity(\n event: RhiCallEvent,\n): { readonly kind: ResourceKind; readonly handleId: HandleId } | undefined {\n switch (event.kind) {\n case 'createBuffer':\n return { kind: 'buffer', handleId: event.handleId };\n case 'createTexture':\n return { kind: 'texture', handleId: event.handleId };\n case 'createTextureView':\n return { kind: 'texture-view', handleId: event.resultHandleId };\n case 'createSampler':\n return { kind: 'sampler', handleId: event.handleId };\n case 'createBindGroupLayout':\n return { kind: 'bind-group-layout', handleId: event.handleId };\n case 'createBindGroup':\n return { kind: 'bind-group', handleId: event.handleId };\n case 'createPipelineLayout':\n return { kind: 'pipeline-layout', handleId: event.handleId };\n case 'createRenderPipeline':\n return { kind: 'render-pipeline', handleId: event.handleId };\n case 'createComputePipeline':\n return { kind: 'compute-pipeline', handleId: event.handleId };\n case 'createShaderModule':\n return { kind: 'shader-module', handleId: event.handleId };\n default:\n return undefined;\n }\n}\n\nfunction addBytes(\n bytes: { known: number; unavailable: number },\n estimate: ResourceByteEstimate,\n): void {\n if (estimate.status === 'known') bytes.known += estimate.bytes;\n else bytes.unavailable++;\n}\n\n/** Build a pure lifecycle ledger from the ordered tape events. */\nexport function buildResourceLifecycle(events: readonly RhiCallEvent[]): ResourceLifecycleSummary {\n const records = new Map<\n HandleId,\n {\n readonly kind: ResourceKind;\n readonly origin: ResourceOrigin;\n readonly createdEventIndex: number;\n readonly byteEstimate: ResourceByteEstimate;\n destroyedEventIndex?: number;\n }\n >();\n const origins = new Map<HandleId, ResourceOrigin>();\n let destroyEvents = 0;\n let unknownDestroyEvents = 0;\n\n for (let eventIndex = 0; eventIndex < events.length; eventIndex++) {\n const event = events[eventIndex];\n if (event === undefined) continue;\n const identity = resourceIdentity(event);\n if (identity !== undefined) {\n const origin: ResourceOrigin =\n event.kind === 'createTexture' && event.origin === 'swapchain'\n ? 'swapchain'\n : event.kind === 'createTextureView'\n ? (origins.get(event.sourceHandleId) ?? 'engine')\n : 'engine';\n origins.set(identity.handleId, origin);\n records.set(identity.handleId, {\n kind: identity.kind,\n origin,\n createdEventIndex: eventIndex,\n byteEstimate: estimateBytes(event),\n });\n continue;\n }\n if (event.kind !== 'destroyBuffer' && event.kind !== 'destroyTexture') continue;\n destroyEvents++;\n const record = records.get(event.handleId);\n const expectedKind = event.kind === 'destroyBuffer' ? 'buffer' : 'texture';\n if (\n record === undefined ||\n record.kind !== expectedKind ||\n record.destroyedEventIndex !== undefined\n ) {\n unknownDestroyEvents++;\n continue;\n }\n record.destroyedEventIndex = eventIndex;\n }\n\n const resources: ResourceLifecycleEntry[] = [];\n const createdBytes = { known: 0, unavailable: 0 };\n const destroyedBytes = { known: 0, unavailable: 0 };\n const liveBytes = { known: 0, unavailable: 0 };\n const originBreakdown: Record<\n ResourceOrigin,\n {\n created: number;\n destroyed: number;\n live: number;\n knownCreated: number;\n knownDestroyed: number;\n knownLive: number;\n unavailableCreated: number;\n unavailableDestroyed: number;\n unavailableLive: number;\n }\n > = {\n engine: {\n created: 0,\n destroyed: 0,\n live: 0,\n knownCreated: 0,\n knownDestroyed: 0,\n knownLive: 0,\n unavailableCreated: 0,\n unavailableDestroyed: 0,\n unavailableLive: 0,\n },\n swapchain: {\n created: 0,\n destroyed: 0,\n live: 0,\n knownCreated: 0,\n knownDestroyed: 0,\n knownLive: 0,\n unavailableCreated: 0,\n unavailableDestroyed: 0,\n unavailableLive: 0,\n },\n };\n let destroyed = 0;\n\n for (const [handleId, record] of records) {\n const state = record.destroyedEventIndex === undefined ? 'live' : 'destroyed';\n if (state === 'destroyed') destroyed++;\n addBytes(createdBytes, record.byteEstimate);\n addBytes(state === 'live' ? liveBytes : destroyedBytes, record.byteEstimate);\n const byOrigin = originBreakdown[record.origin];\n byOrigin.created++;\n if (state === 'destroyed') byOrigin.destroyed++;\n else byOrigin.live++;\n if (record.byteEstimate.status === 'known') {\n byOrigin.knownCreated += record.byteEstimate.bytes;\n if (state === 'destroyed') byOrigin.knownDestroyed += record.byteEstimate.bytes;\n else byOrigin.knownLive += record.byteEstimate.bytes;\n } else {\n byOrigin.unavailableCreated++;\n if (state === 'destroyed') byOrigin.unavailableDestroyed++;\n else byOrigin.unavailableLive++;\n }\n resources.push({\n handleId,\n kind: record.kind,\n origin: record.origin,\n state,\n createdEventIndex: record.createdEventIndex,\n ...(record.destroyedEventIndex === undefined\n ? {}\n : { destroyedEventIndex: record.destroyedEventIndex }),\n byteEstimate: record.byteEstimate,\n });\n }\n\n return {\n scope: 'captured-tape-resource-closure',\n counts: {\n created: resources.length,\n destroyed,\n live: resources.length - destroyed,\n destroyEvents,\n unknownDestroyEvents,\n },\n bytes: {\n knownCreated: createdBytes.known,\n knownDestroyed: destroyedBytes.known,\n knownLive: liveBytes.known,\n unavailableCreated: createdBytes.unavailable,\n unavailableDestroyed: destroyedBytes.unavailable,\n unavailableLive: liveBytes.unavailable,\n },\n originBreakdown,\n availability: {\n destroy: 'observed-buffer-texture',\n retire: 'unavailable',\n driverAllocation: 'unavailable',\n },\n resources,\n };\n}\n","import { err, ok, type Result } from '@forgeax/engine-types';\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { bytesToHex } from '@noble/hashes/utils.js';\nimport pako from 'pako';\nimport { createRhiDebugError } from '../errors';\nimport {\n type RhiCallEvent,\n TAPE_FORMAT_VERSION,\n TAPE_MAGIC,\n type Tape,\n type TapeBlobCompression,\n type TapeEncodeOptions,\n} from './types';\nimport { validateTape } from './validation';\n\nconst MAGIC_BYTES = new TextEncoder().encode(TAPE_MAGIC);\nconst HEADER_BYTES = MAGIC_BYTES.byteLength + 12;\n\ninterface WireBlob {\n readonly hash: string;\n readonly offset: number;\n readonly length: number;\n readonly compression: TapeBlobCompression;\n readonly digest: string;\n}\n\ninterface WireTape {\n readonly header: Tape['header'];\n readonly bootstrap: Tape['bootstrap'];\n readonly events: readonly RhiCallEvent[];\n readonly blobs: readonly WireBlob[];\n}\n\nexport function encodeTape(\n tape: Tape,\n options: TapeEncodeOptions = {},\n): Result<Uint8Array, ReturnType<typeof createRhiDebugError<'tape-invalid'>>> {\n const validation = validateTape(tape);\n if (!validation.ok) return validation;\n const compression = options.compression ?? tape.blobs[0]?.compression ?? 'none';\n const payloads: Uint8Array[] = [];\n const blobs: WireBlob[] = [];\n let offset = 0;\n for (const blob of tape.blobs) {\n const raw = new Uint8Array(blob.bytes);\n const payload = compression === 'gzip' ? pako.gzip(raw) : raw;\n payloads.push(payload);\n blobs.push({\n hash: blob.hash,\n offset,\n length: payload.byteLength,\n compression,\n digest: digestBytes(payload),\n });\n offset += payload.byteLength;\n }\n const wire: WireTape = {\n header: { ...tape.header, blobCount: blobs.length },\n bootstrap: tape.bootstrap,\n events: tape.events,\n blobs,\n };\n const json = canonicalJson(wire);\n const jsonBytes = new TextEncoder().encode(json);\n const output = new Uint8Array(HEADER_BYTES + jsonBytes.byteLength + offset);\n output.set(MAGIC_BYTES, 0);\n const view = new DataView(output.buffer);\n view.setUint32(MAGIC_BYTES.byteLength, TAPE_FORMAT_VERSION, true);\n view.setUint32(MAGIC_BYTES.byteLength + 4, jsonBytes.byteLength, true);\n view.setUint32(MAGIC_BYTES.byteLength + 8, offset, true);\n output.set(jsonBytes, HEADER_BYTES);\n let cursor = HEADER_BYTES + jsonBytes.byteLength;\n for (const payload of payloads) {\n output.set(payload, cursor);\n cursor += payload.byteLength;\n }\n return ok(output);\n}\n\nexport function decodeTape(\n bytes: Uint8Array,\n): Result<\n Tape,\n | ReturnType<typeof createRhiDebugError<'tape-invalid'>>\n | ReturnType<typeof createRhiDebugError<'tape-version-unsupported'>>\n> {\n const legacy = decodeLegacyVersion(bytes);\n if (legacy !== undefined)\n return err(\n createRhiDebugError('tape-version-unsupported', { foundVersion: legacy, expectedVersion: 7 }),\n );\n if (bytes.byteLength < HEADER_BYTES)\n return err(\n createRhiDebugError('tape-invalid', { stage: 'decode', cause: 'container is truncated' }),\n );\n for (let i = 0; i < MAGIC_BYTES.byteLength; i++) {\n if (bytes[i] !== MAGIC_BYTES[i])\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'decode',\n cause: 'magic does not match RHITAPE',\n }),\n );\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const version = view.getUint32(MAGIC_BYTES.byteLength, true);\n if (version !== TAPE_FORMAT_VERSION)\n return err(\n createRhiDebugError('tape-version-unsupported', {\n foundVersion: version,\n expectedVersion: 7,\n }),\n );\n const jsonLength = view.getUint32(MAGIC_BYTES.byteLength + 4, true);\n const payloadLength = view.getUint32(MAGIC_BYTES.byteLength + 8, true);\n const payloadStart = HEADER_BYTES + jsonLength;\n if (payloadStart > bytes.byteLength || payloadStart + payloadLength !== bytes.byteLength) {\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'decode',\n cause: 'container length is out of bounds',\n }),\n );\n }\n let wire: WireTape;\n try {\n wire = JSON.parse(\n new TextDecoder().decode(bytes.subarray(HEADER_BYTES, payloadStart)),\n ) as WireTape;\n } catch {\n return err(\n createRhiDebugError('tape-invalid', { stage: 'decode', cause: 'canonical JSON is invalid' }),\n );\n }\n if (\n wire.header?.formatVersion !== TAPE_FORMAT_VERSION ||\n !Array.isArray(wire.events) ||\n !Array.isArray(wire.blobs)\n ) {\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: 'required v7 fields are missing',\n }),\n );\n }\n const payload = bytes.subarray(payloadStart);\n const decodedBlobs = [];\n for (const blob of wire.blobs) {\n if (\n !Number.isInteger(blob.offset) ||\n !Number.isInteger(blob.length) ||\n blob.offset < 0 ||\n blob.length < 0 ||\n blob.offset + blob.length > payload.byteLength\n ) {\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: 'blob table entry is out of bounds',\n }),\n );\n }\n const stored = payload.slice(blob.offset, blob.offset + blob.length);\n if (digestBytes(stored) !== blob.digest)\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `blob digest mismatch for ${blob.hash}`,\n }),\n );\n let raw: Uint8Array;\n try {\n raw = blob.compression === 'gzip' ? new Uint8Array(pako.ungzip(stored)) : stored;\n } catch {\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'decode',\n cause: `blob decompression failed for ${blob.hash}`,\n }),\n );\n }\n decodedBlobs.push({ hash: blob.hash, bytes: raw, compression: blob.compression });\n }\n const tape: Tape = {\n header: { ...wire.header, formatVersion: TAPE_FORMAT_VERSION, blobCount: decodedBlobs.length },\n bootstrap: wire.bootstrap ?? [],\n events: wire.events,\n blobs: decodedBlobs,\n };\n const validation = validateTape(tape);\n if (!validation.ok) return validation;\n return ok(tape);\n}\n\nfunction decodeLegacyVersion(bytes: Uint8Array): number | undefined {\n if (bytes.length === 0 || bytes[0] !== 123) return undefined;\n try {\n const parsed = JSON.parse(new TextDecoder().decode(bytes)) as { formatVersion?: unknown };\n return typeof parsed.formatVersion === 'number' && parsed.formatVersion !== 7\n ? parsed.formatVersion\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction canonicalJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonicalJson).join(',')}]`;\n const object = value as Record<string, unknown>;\n return `{${Object.keys(object)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${canonicalJson(object[key])}`)\n .join(',')}}`;\n}\n\nfunction digestBytes(bytes: Uint8Array): string {\n return `sha256:${bytesToHex(sha256(bytes))}`;\n}\n","import type { Result } from '@forgeax/engine-types';\nimport type { RhiDebugError } from '../errors';\nimport type { RhiCallEvent as LegacyRhiCallEvent } from '../types';\n\nexport const TAPE_FORMAT_VERSION = 7 as const;\nexport const TAPE_MAGIC = 'RHITAPE' as const;\n\nexport type RhiCallEvent = LegacyRhiCallEvent;\nexport type EventKind = RhiCallEvent['kind'];\nexport type TapeBlobCompression = 'none' | 'gzip';\nexport type ResourceKind =\n | 'buffer'\n | 'texture'\n | 'texture-view'\n | 'sampler'\n | 'shader-module'\n | 'pipeline'\n | 'binding'\n | 'encoder';\n\nexport interface RhiCapsRecorded {\n readonly [key: string]: boolean | number | string | null;\n}\n\nexport interface InitialDataSlice {\n readonly hash: string;\n readonly byteOffset: number;\n readonly byteLength: number;\n}\n\nexport interface BootstrapResource {\n readonly handleId: string;\n readonly kind: ResourceKind;\n readonly create: Record<string, unknown>;\n readonly initialData: readonly InitialDataSlice[];\n}\n\nexport interface TapeBlob {\n readonly hash: string;\n readonly bytes: Uint8Array;\n readonly compression: TapeBlobCompression;\n}\n\nexport interface Tape {\n readonly header: {\n readonly formatVersion: typeof TAPE_FORMAT_VERSION;\n readonly rhiCaps: RhiCapsRecorded;\n readonly eventCount: number;\n readonly blobCount: number;\n };\n readonly bootstrap: readonly BootstrapResource[];\n readonly events: readonly RhiCallEvent[];\n readonly blobs: readonly TapeBlob[];\n}\n\nexport interface TapeEncodeOptions {\n readonly compression?: TapeBlobCompression;\n}\n\nexport type RhiDebugResult<T> = Result<T, RhiDebugError>;\n","import { err, ok, type Result } from '@forgeax/engine-types';\nimport { createRhiDebugError } from '../errors';\nimport { eventKinds } from './event-semantics';\nimport { type ResourceKind, type RhiCallEvent, TAPE_FORMAT_VERSION, type Tape } from './types';\n\ntype TapeValidation = ReturnType<typeof createRhiDebugError<'tape-invalid'>>;\n\nexport function validateTape(tape: Tape): Result<Tape, TapeValidation> {\n if (tape.header.formatVersion !== TAPE_FORMAT_VERSION)\n return err(\n createRhiDebugError('tape-invalid', { stage: 'validate', cause: 'format version is not 7' }),\n );\n if (tape.header.eventCount !== tape.events.length || tape.header.blobCount !== tape.blobs.length)\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: 'header counts do not match payload counts',\n }),\n );\n const declared = new Set<string>();\n for (const resource of tape.bootstrap) {\n if (declared.has(resource.handleId))\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `duplicate bootstrap handle ${resource.handleId}`,\n }),\n );\n if (!isResourceKind(resource.kind))\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `unknown resource kind ${resource.kind}`,\n }),\n );\n declared.add(resource.handleId);\n }\n const hashes = new Set<string>();\n for (const blob of tape.blobs) {\n if (hashes.has(blob.hash))\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `duplicate blob hash ${blob.hash}`,\n }),\n );\n hashes.add(blob.hash);\n }\n for (let eventIndex = 0; eventIndex < tape.events.length; eventIndex++) {\n const event = tape.events[eventIndex];\n if (!event || !eventKinds.includes(event.kind))\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `unknown event kind at ${eventIndex}`,\n }),\n );\n const semantics = eventResources(event);\n for (const created of semantics.created) {\n if (declared.has(created))\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `duplicate handle ${created}`,\n }),\n );\n declared.add(created);\n }\n for (const read of semantics.reads) {\n if (!declared.has(read))\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `create-before-use violated for ${read} at ${eventIndex}`,\n }),\n );\n }\n for (const destroyed of semantics.destroyed) {\n if (!declared.has(destroyed))\n return err(\n createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `destroy-before-use violated for ${destroyed} at ${eventIndex}`,\n }),\n );\n declared.delete(destroyed);\n }\n }\n return ok(tape);\n}\n\nfunction isResourceKind(value: string): value is ResourceKind {\n return [\n 'buffer',\n 'texture',\n 'texture-view',\n 'sampler',\n 'shader-module',\n 'pipeline',\n 'binding',\n 'encoder',\n ].includes(value);\n}\n\ninterface EventResources {\n readonly created: readonly string[];\n readonly reads: readonly string[];\n readonly destroyed: readonly string[];\n}\n\nfunction eventResources(event: RhiCallEvent): EventResources {\n switch (event.kind) {\n case 'createBuffer':\n case 'createTexture':\n case 'createSampler':\n case 'createBindGroupLayout':\n case 'createBindGroup':\n case 'createPipelineLayout':\n case 'createRenderPipeline':\n case 'createComputePipeline':\n case 'createShaderModule':\n return {\n created: [event.handleId],\n reads: handleRefs(event, [\n 'layoutHandleId',\n 'vertexShaderModuleHandleId',\n 'fragmentShaderModuleHandleId',\n 'computeShaderModuleHandleId',\n ]),\n destroyed: [],\n };\n case 'createTextureView':\n return { created: [event.resultHandleId], reads: [event.sourceHandleId], destroyed: [] };\n case 'createCommandEncoder':\n return { created: [event.cmdHandleId], reads: [], destroyed: [] };\n case 'destroyBuffer':\n case 'destroyTexture':\n return { created: [], reads: [event.handleId], destroyed: [event.handleId] };\n case 'writeBuffer':\n case 'writeTexture':\n return { created: [], reads: handleRefs(event, ['handleId', 'destination']), destroyed: [] };\n case 'copyBufferToBuffer':\n case 'copyBufferToTexture':\n case 'copyTextureToBuffer':\n case 'copyTextureToTexture':\n case 'clearBuffer':\n return {\n created: [],\n reads: handleRefs(event, [\n 'source',\n 'destination',\n 'sourceHandleId',\n 'destinationHandleId',\n 'bufferHandleId',\n 'textureHandleId',\n ]),\n destroyed: [],\n };\n default:\n return { created: [], reads: [], destroyed: [] };\n }\n}\n\nfunction handleRefs(event: object, keys: readonly string[]): string[] {\n const refs: string[] = [];\n for (const key of keys) {\n const value = (event as Record<string, unknown>)[key];\n if (typeof value === 'string') refs.push(value);\n if (Array.isArray(value))\n refs.push(...value.filter((item): item is string => typeof item === 'string'));\n }\n return refs;\n}\n","// @forgeax/engine-rhi-debug/src/readback — shared GPU texture→host readback utilities.\n//\n// Extracted from inspector.ts (round 1 fix-up 34be40d6, I-7) for reuse by\n// replayer.readbackRt() (m5b-1) and e2e.dawn.test.ts (m5b-3).\n//\n// Related: plan-strategy §5.3.1; m5b-1 / m5b-3.\n\n/// <reference types=\"@webgpu/types\" />\n\nimport type {\n Buffer,\n MappedBuffer,\n RhiCommandEncoder,\n RhiDevice,\n RhiQueue,\n} from '@forgeax/engine-rhi';\nimport type { Result } from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from './errors';\nimport type { RhiCallEvent } from './types';\n\n// GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ = 8 | 1 = 9.\nconst COPY_DST_MAP_READ = 9;\nconst TEXTURE_READBACK_USAGE = COPY_DST_MAP_READ;\n\n// ============================================================================\n// resolveTextureDescriptor — tape handle -> source texture descriptor (SSOT)\n// ============================================================================\n\n/** Resolved descriptor for a texture (or texture-view) handle from the tape. */\nexport interface ResolvedTextureDescriptor {\n /** The source GPUTexture handleId (copyTextureToBuffer needs a texture, not a view). */\n readonly handleId: string;\n readonly width: number;\n readonly height: number;\n readonly format: string;\n /** The view's dimension ('2d' | 'cube' | '2d-array' | '3d' | ...); '2d' when no view event. */\n readonly dimension: string;\n /** The source texture's depthOrArrayLayers (slice count); 1 for a plain 2D texture. */\n readonly arrayLayers: number;\n}\n\n/**\n * Walk the tape events to resolve a view-or-texture handleId to its source\n * GPUTexture descriptor (handleId, real dimensions, format, view dimension).\n *\n * The single source of truth for \"tape handle -> texture descriptor\": both the\n * color-attachment RT path (resolveAttachmentSize / readbackDrawRt) and the\n * viewer's depth + bound-texture preview paths resolve handles this way —\n * createTextureView.resultHandleId -> sourceHandleId -> createTexture, falling\n * back to the id itself when it is a direct texture handle (no view event).\n *\n * Size is read from the raw createTexture event. Returns null when no\n * createTexture event declares the resolved handle.\n */\nexport function resolveTextureDescriptor(\n events: readonly RhiCallEvent[],\n viewOrTextureHandleId: string,\n): ResolvedTextureDescriptor | null {\n // Step 1: resolve texture view -> source texture handleId + capture view dimension.\n let sourceTextureHandleId: string | undefined;\n let viewDimension: string | undefined;\n for (const ev of events) {\n if (ev.kind === 'createTextureView' && ev.resultHandleId === viewOrTextureHandleId) {\n sourceTextureHandleId = ev.sourceHandleId;\n viewDimension = ev.desc.dimension;\n break;\n }\n }\n // Some handles are texture handles directly (no view event).\n const targetHandleId = sourceTextureHandleId ?? viewOrTextureHandleId;\n\n // Step 2: find the createTexture event for the resolved texture handleId.\n for (const ev of events) {\n if (ev.kind === 'createTexture' && ev.handleId === targetHandleId) {\n const sz = ev.desc.size;\n let width: number;\n let height: number;\n let arrayLayers: number;\n // GPUExtent3DStrict: { width, height?, depthOrArrayLayers? } or [w, h?, d?]\n if (Array.isArray(sz)) {\n width = typeof sz[0] === 'number' ? sz[0] : 512;\n height = typeof sz[1] === 'number' ? sz[1] : width;\n arrayLayers = typeof sz[2] === 'number' ? sz[2] : 1;\n } else {\n const obj = sz as { width: number; height?: number; depthOrArrayLayers?: number };\n width = typeof obj.width === 'number' ? obj.width : 512;\n height = typeof obj.height === 'number' ? obj.height : width;\n arrayLayers = typeof obj.depthOrArrayLayers === 'number' ? obj.depthOrArrayLayers : 1;\n }\n return {\n handleId: targetHandleId,\n width,\n height,\n format: ev.desc.format,\n // View dimension wins; else the texture's own dimension; else '2d'.\n dimension: viewDimension ?? ev.desc.dimension ?? '2d',\n arrayLayers,\n };\n }\n }\n\n return null;\n}\n\n// ============================================================================\n// resolveAttachmentSize — walk tape events to find texture dimensions\n// ============================================================================\n\n/**\n * Walk the tape events to find the real texture dimensions for a given\n * color attachment view/target handleId. Avoids hard-coding 512×512.\n *\n * Thin wrapper over {@link resolveTextureDescriptor}; returns\n * { width: 512, height: 512 } as a conservative fallback when no createTexture\n * event is found (should not happen for a real frame).\n */\nexport function resolveAttachmentSize(\n events: readonly RhiCallEvent[],\n attachmentViewHandleId: string,\n): { readonly width: number; readonly height: number } {\n const desc = resolveTextureDescriptor(events, attachmentViewHandleId);\n if (desc === null) return { width: 512, height: 512 };\n return { width: desc.width, height: desc.height };\n}\n\n// ============================================================================\n// readbackTexturePixels — copyTextureToBuffer + mapAsync + getMappedRange\n// ============================================================================\n\n/**\n * Read back raw RGBA8 pixels from a GPU texture into a host-side Uint8Array.\n *\n * Steps:\n * 1. Create a staging buffer (COPY_DST | MAP_READ) sized to aligned rows.\n * 2. Create a command encoder + copyTextureToBuffer.\n * 3. Finish + submit + await onSubmittedWorkDone.\n * 4. mapAsync(READ) + getMappedRange() → new Uint8Array(slice).\n * 5. Unmap + destroy staging buffer.\n *\n * The returned Uint8Array has length = texWidth * texHeight * 4 (tight;\n * alignment padding is stripped). The buffer alignment is WebGPU 256-byte\n * row requirement.\n *\n * @param device - The RHI device that owns the texture.\n * @param texture - The texture to read back (opaque branded handle at the boundary).\n * @param texWidth - Texture width in pixels.\n * @param texHeight - Texture height in pixels.\n */\nexport async function readbackTexturePixels(\n device: RhiDevice,\n texture: unknown,\n texWidth: number,\n texHeight: number,\n opts?: {\n /** Bytes in one uncompressed texel; retained for depth/color callers. */\n bytesPerTexel?: number;\n /** Compressed-format footprint; defaults to bytesPerTexel with a 1x1 block. */\n bytesPerBlock?: number;\n blockWidth?: number;\n blockHeight?: number;\n mipLevel?: number;\n baseArrayLayer?: number;\n aspect?: 'all' | 'depth-only' | 'stencil-only';\n },\n): Promise<Uint8Array> {\n const bytesPerBlock = opts?.bytesPerBlock ?? opts?.bytesPerTexel ?? 4;\n const blockWidth = opts?.blockWidth ?? 1;\n const blockHeight = opts?.blockHeight ?? 1;\n const blockCountX = Math.ceil(texWidth / blockWidth);\n const blockCountY = Math.ceil(texHeight / blockHeight);\n const copyWidth = blockCountX * blockWidth;\n const copyHeight = blockCountY * blockHeight;\n const mipLevel = opts?.mipLevel ?? 0;\n const baseArrayLayer = opts?.baseArrayLayer ?? 0;\n const aspect = opts?.aspect;\n const rowBytes = blockCountX * bytesPerBlock;\n const alignedRowBytes = Math.ceil(rowBytes / 256) * 256; // WebGPU alignment\n const bufferSize = alignedRowBytes * blockCountY;\n\n const readbackBufferResult = device.createBuffer({\n size: bufferSize,\n usage: COPY_DST_MAP_READ,\n });\n if (!readbackBufferResult.ok) {\n throw new Error(`createBuffer for readback failed: ${readbackBufferResult.error.code}`);\n }\n const readbackBuffer = readbackBufferResult.value;\n\n const encoderResult = device.createCommandEncoder({});\n if (!encoderResult.ok) {\n device.destroyBuffer(readbackBuffer);\n throw new Error(`createCommandEncoder for readback failed: ${encoderResult.error.code}`);\n }\n const encoder = encoderResult.value;\n\n try {\n encoder.copyTextureToBuffer(\n {\n texture,\n mipLevel,\n origin: { x: 0, y: 0, z: baseArrayLayer },\n // aspect selects depth vs stencil plane on combined depth-stencil\n // textures. stencil-only IS copyable on depth24plus-stencil8 (the\n // depth plane is not). Omitted -> backend default ('all').\n ...(aspect !== undefined ? { aspect } : {}),\n } as unknown as never,\n {\n buffer: readbackBuffer,\n offset: 0,\n bytesPerRow: alignedRowBytes,\n rowsPerImage: blockCountY,\n } as unknown as never,\n { width: copyWidth, height: copyHeight, depthOrArrayLayers: 1 },\n );\n } catch {\n device.destroyBuffer(readbackBuffer);\n throw new Error('copyTextureToBuffer failed');\n }\n\n const finishResult = encoder.finish();\n if (!finishResult.ok) {\n device.destroyBuffer(readbackBuffer);\n throw new Error(`encoder.finish failed: ${finishResult.error.code}`);\n }\n\n const queue: RhiQueue = device.queue;\n queue.submit([finishResult.value as unknown as never] as unknown as readonly never[]);\n await queue.onSubmittedWorkDone();\n\n // RHI Buffer.mapAsync / MappedBuffer.getMappedRange return Result wrappers, not\n // the raw spec void / ArrayBuffer. The previous `as unknown as { ... }` casts\n // hid that: mapAsync was called with mode=2 (which is GPUMapMode.WRITE, not\n // READ=0x1) and getMappedRange's Result object was fed straight into\n // `new Uint8Array(...)`, yielding a zero-length array — every RT readback came\n // back all-zero (transparent black), which the e2e delta check missed because\n // baseline and replay were equally empty (empty-vs-empty trap).\n const buffer = readbackBuffer as unknown as Buffer;\n // GPUMapMode.READ = 0x1\n const mapResult = await buffer.mapAsync(0x1);\n if (!mapResult.ok) {\n device.destroyBuffer(readbackBuffer);\n throw new Error(`mapAsync(READ) failed: ${mapResult.error.code}`);\n }\n const mapped: MappedBuffer = mapResult.value;\n\n const rangeResult = mapped.getMappedRange();\n if (!rangeResult.ok) {\n mapped.unmap();\n device.destroyBuffer(readbackBuffer);\n throw new Error(`getMappedRange failed: ${rangeResult.error.code}`);\n }\n const fullPixels = new Uint8Array(rangeResult.value);\n\n // Extract tight pixels (strip alignment padding)\n const tightPixels = new Uint8Array(blockCountX * blockCountY * bytesPerBlock);\n for (let y = 0; y < blockCountY; y++) {\n const srcOffset = y * alignedRowBytes;\n const dstOffset = y * rowBytes;\n for (let x = 0; x < rowBytes; x++) {\n tightPixels[dstOffset + x] = fullPixels[srcOffset + x] ?? 0;\n }\n }\n\n // Cleanup\n mapped.unmap();\n device.destroyBuffer(readbackBuffer);\n\n return tightPixels;\n}\n\n// ============================================================================\n// readbackBufferBytes — copyBufferToBuffer + mapAsync + getMappedRange (D-7)\n// ============================================================================\n\n/**\n * Read back the raw bytes of a GPU buffer into a host-side ArrayBuffer.\n *\n * Sibling of readbackTexturePixels under the single \"GPU byte readback\"\n * responsibility unit (plan-strategy D-7) — snapshotResource calls this to\n * capture a buffer's initial GPU bytes at frame-header time.\n *\n * Steps:\n * 1. Create a staging buffer (COPY_DST | MAP_READ) sized to `size`.\n * 2. Create a command encoder + copyBufferToBuffer(src, 0, staging, 0, size).\n * 3. Finish + submit + await onSubmittedWorkDone.\n * 4. mapAsync(READ=0x1) + getMappedRange() -> sliced ArrayBuffer copy.\n * 5. Unmap + destroy staging buffer.\n *\n * Returns Ok(ArrayBuffer) (a detached copy independent of the mapped range)\n * or Err(readback-failed) with `.detail.phase` narrowing\n * the failure point (copy / map). The buffer is passed opaque (`unknown`)\n * because RHI handles are branded; the caller resolved it from the descriptor\n * registry. The caller (snapshotResource) holds the handleId and maps this\n * readback error to the capture-snapshot-failed boundary.\n *\n * Reuses the M0-fixed mapAsync(0x1) + Result-unwrap pattern from\n * readbackTexturePixels (never the all-zero mode=2 bug).\n *\n * @param device - The RHI device that owns the buffer.\n * @param buffer - The source buffer (opaque branded handle) to read back.\n * @param size - Number of bytes to read back (the buffer's recorded size).\n */\nexport async function readbackBufferBytes(\n device: RhiDevice,\n buffer: unknown,\n size: number,\n): Promise<Result<ArrayBuffer, RhiDebugError>> {\n const fail = (phase: 'copy' | 'map', cause: string): Result<ArrayBuffer, RhiDebugError> =>\n err(createRhiDebugError('readback-failed', { stage: 'readback', phase, cause }));\n\n const readbackBufferResult = device.createBuffer({ size, usage: COPY_DST_MAP_READ });\n if (!readbackBufferResult.ok) {\n return fail('copy', `staging buffer creation failed: ${readbackBufferResult.error.code}`);\n }\n const readbackBuffer = readbackBufferResult.value;\n\n const encoderResult = device.createCommandEncoder({});\n if (!encoderResult.ok) {\n device.destroyBuffer(readbackBuffer);\n return fail('copy', `command encoder creation failed: ${encoderResult.error.code}`);\n }\n const encoder = encoderResult.value;\n\n try {\n encoder.copyBufferToBuffer(buffer as Buffer, 0, readbackBuffer, 0, size);\n } catch (e) {\n device.destroyBuffer(readbackBuffer);\n return fail('copy', `copyBufferToBuffer failed: ${String(e)}`);\n }\n\n const finishResult = encoder.finish();\n if (!finishResult.ok) {\n device.destroyBuffer(readbackBuffer);\n return fail('copy', `encoder.finish failed: ${finishResult.error.code}`);\n }\n\n const queue: RhiQueue = device.queue;\n queue.submit([finishResult.value as unknown as never] as unknown as readonly never[]);\n await queue.onSubmittedWorkDone();\n\n const stagingBuffer = readbackBuffer as unknown as Buffer;\n // GPUMapMode.READ = 0x1\n const mapResult = await stagingBuffer.mapAsync(0x1);\n if (!mapResult.ok) {\n device.destroyBuffer(readbackBuffer);\n return fail('map', `mapAsync(READ) failed: ${mapResult.error.code}`);\n }\n const mapped: MappedBuffer = mapResult.value;\n\n const rangeResult = mapped.getMappedRange();\n if (!rangeResult.ok) {\n mapped.unmap();\n device.destroyBuffer(readbackBuffer);\n return fail('map', `getMappedRange failed: ${rangeResult.error.code}`);\n }\n\n // Copy the mapped bytes into a standalone ArrayBuffer before unmap — the\n // mapped range is invalidated on unmap.\n const bytes = new Uint8Array(rangeResult.value).slice();\n\n mapped.unmap();\n device.destroyBuffer(readbackBuffer);\n\n return ok(bytes.buffer as ArrayBuffer);\n}\n\n/** A load-time buffer that can be read back as part of one GPU submission. */\nexport interface BufferReadbackBatchRequest {\n readonly handleId: string;\n readonly buffer: unknown;\n readonly size: number;\n}\n\nexport interface BufferReadbackBatchCallbacks {\n readonly onResourceStart?: (handleId: string) => void;\n readonly onResourceComplete?: (handleId: string) => void;\n /** Return true when the owning snapshot generation has been invalidated. */\n readonly isCancelled?: () => boolean;\n}\n\nasync function raceCancellation<T>(\n work: Promise<T>,\n isCancelled: (() => boolean) | undefined,\n): Promise<{ readonly cancelled: true } | { readonly cancelled: false; readonly value: T }> {\n if (isCancelled === undefined) return { cancelled: false, value: await work };\n if (isCancelled()) return { cancelled: true };\n\n let timer: ReturnType<typeof setInterval> | undefined;\n const cancelled = new Promise<{ readonly cancelled: true }>((resolve) => {\n timer = setInterval(() => {\n if (isCancelled()) resolve({ cancelled: true });\n }, 1);\n });\n try {\n return await Promise.race([\n work.then((value) => ({ cancelled: false as const, value })),\n cancelled,\n ]);\n } finally {\n if (timer !== undefined) clearInterval(timer);\n }\n}\n\n/**\n * Read back multiple buffers with one command submission and one queue drain.\n *\n * Prism City exposed the cost of the old one-buffer helper: every resource\n * submitted and awaited independently, so thousands of small buffers spent\n * most of capture time in synchronization rather than byte transfer. The\n * batch keeps each staging buffer isolated but submits all copies together;\n * mapping remains per-resource so a timeout can still identify the current\n * handle and the caller can preserve the original initialData event order.\n */\nexport async function readbackBufferBytesBatch(\n device: RhiDevice,\n requests: readonly BufferReadbackBatchRequest[],\n callbacks: BufferReadbackBatchCallbacks = {},\n): Promise<Result<ReadonlyMap<string, ArrayBuffer>, RhiDebugError>> {\n if (requests.length === 0) return ok(new Map());\n const firstRequest = requests[0];\n if (firstRequest === undefined) return ok(new Map());\n\n const fail = (handleId: string, phase: 'copy' | 'map', cause: string) =>\n err(\n createRhiDebugError('readback-failed', {\n stage: 'readback',\n phase,\n cause: `${handleId}: ${cause}`,\n }),\n );\n const staging: Array<{ readonly request: BufferReadbackBatchRequest; readonly buffer: Buffer }> =\n [];\n const mapped = new Map<Buffer, MappedBuffer>();\n const cleaned = new Set<Buffer>();\n const cleanup = () => {\n for (const mappedBuffer of mapped.values()) mappedBuffer.unmap();\n for (const item of staging) {\n if (!cleaned.has(item.buffer)) {\n device.destroyBuffer(item.buffer);\n cleaned.add(item.buffer);\n }\n }\n };\n\n let encoder: RhiCommandEncoder;\n try {\n const encoderResult = device.createCommandEncoder({});\n if (!encoderResult.ok)\n return fail(\n firstRequest.handleId,\n 'copy',\n `command encoder creation failed: ${encoderResult.error.code}`,\n );\n encoder = encoderResult.value;\n for (const request of requests) {\n const stagingResult = device.createBuffer({ size: request.size, usage: COPY_DST_MAP_READ });\n if (!stagingResult.ok) {\n cleanup();\n return fail(\n request.handleId,\n 'copy',\n `staging buffer creation failed: ${stagingResult.error.code}`,\n );\n }\n const stagingBuffer = stagingResult.value;\n staging.push({ request, buffer: stagingBuffer });\n try {\n encoder.copyBufferToBuffer(request.buffer as Buffer, 0, stagingBuffer, 0, request.size);\n } catch (error) {\n cleanup();\n return fail(request.handleId, 'copy', `copyBufferToBuffer failed: ${String(error)}`);\n }\n }\n const finishResult = encoder.finish();\n if (!finishResult.ok) {\n cleanup();\n return fail(\n firstRequest.handleId,\n 'copy',\n `encoder.finish failed: ${finishResult.error.code}`,\n );\n }\n device.queue.submit([finishResult.value as unknown as never] as unknown as readonly never[]);\n await device.queue.onSubmittedWorkDone();\n\n // Start every mapAsync together. The GPU work has already been submitted\n // and drained; awaiting each map before starting the next one recreates a\n // per-resource synchronization wall even after batching the copies.\n const mapResultsPromise = Promise.all(\n staging.map(async (item) => {\n callbacks.onResourceStart?.(item.request.handleId);\n try {\n const result = await item.buffer.mapAsync(0x1);\n if (result.ok) {\n if (callbacks.isCancelled?.()) result.value.unmap();\n else mapped.set(item.buffer, result.value);\n }\n return { item, result };\n } catch (error) {\n return { item, error };\n }\n }),\n );\n const mapResults = await raceCancellation(mapResultsPromise, callbacks.isCancelled);\n if (mapResults.cancelled) {\n cleanup();\n return fail(\n firstRequest.handleId,\n 'map',\n 'buffer batch readback cancelled after the snapshot generation was invalidated',\n );\n }\n const result = new Map<string, ArrayBuffer>();\n for (const mappedResult of mapResults.value) {\n if ('error' in mappedResult) {\n cleanup();\n return fail(\n mappedResult.item.request.handleId,\n 'map',\n `mapAsync(READ) failed: ${String(mappedResult.error)}`,\n );\n }\n if (!mappedResult.result.ok) {\n cleanup();\n return fail(\n mappedResult.item.request.handleId,\n 'map',\n `mapAsync(READ) failed: ${mappedResult.result.error.code}`,\n );\n }\n const mappedBuffer = mappedResult.result.value;\n const item = mappedResult.item;\n const rangeResult = mappedBuffer.getMappedRange();\n if (!rangeResult.ok) {\n cleanup();\n return fail(\n item.request.handleId,\n 'map',\n `getMappedRange failed: ${rangeResult.error.code}`,\n );\n }\n result.set(\n item.request.handleId,\n new Uint8Array(rangeResult.value).slice().buffer as ArrayBuffer,\n );\n mappedBuffer.unmap();\n mapped.delete(item.buffer);\n device.destroyBuffer(item.buffer);\n cleaned.add(item.buffer);\n callbacks.onResourceComplete?.(item.request.handleId);\n }\n return ok(result);\n } catch (error) {\n cleanup();\n return fail(firstRequest.handleId, 'map', `buffer batch readback failed: ${String(error)}`);\n }\n}\n\n/** One (layer, mip) copy contributing to a complete texture snapshot blob. */\nexport interface TextureReadbackBatchSlice {\n readonly layer: number;\n readonly mip: number;\n readonly width: number;\n readonly height: number;\n readonly byteOffset: number;\n readonly byteLength: number;\n}\n\n/** A complete texture whose subresources are copied in one bounded batch. */\nexport interface TextureReadbackBatchRequest {\n readonly handleId: string;\n readonly texture: unknown;\n readonly bytesPerBlock: number;\n readonly blockWidth: number;\n readonly blockHeight: number;\n readonly totalBytes: number;\n readonly slices: readonly TextureReadbackBatchSlice[];\n}\n\nexport interface TextureReadbackBatchCallbacks {\n readonly onResourceStart?: (handleId: string) => void;\n readonly onResourceComplete?: (handleId: string) => void;\n /** Return true when the owning snapshot generation has been invalidated. */\n readonly isCancelled?: () => boolean;\n}\n\n/**\n * Read complete texture snapshots with one submission and drain per bounded\n * resource batch. Each subresource retains its own staging buffer, so mip and\n * array-layer bytes are copied without padding or ordering loss.\n */\nexport async function readbackTexturePixelsBatch(\n device: RhiDevice,\n requests: readonly TextureReadbackBatchRequest[],\n callbacks: TextureReadbackBatchCallbacks = {},\n): Promise<Result<ReadonlyMap<string, ArrayBuffer>, RhiDebugError>> {\n if (requests.length === 0) return ok(new Map());\n const firstRequest = requests[0];\n if (firstRequest === undefined) return ok(new Map());\n\n const fail = (handleId: string, phase: 'copy' | 'map', cause: string) =>\n err(\n createRhiDebugError('readback-failed', {\n stage: 'readback',\n phase,\n cause: `${handleId}: ${cause}`,\n }),\n );\n const staging: Array<{\n readonly request: TextureReadbackBatchRequest;\n readonly slice: TextureReadbackBatchSlice;\n readonly buffer: Buffer;\n readonly bytesPerBlock: number;\n readonly blockWidth: number;\n readonly blockHeight: number;\n }> = [];\n const mapped = new Map<Buffer, MappedBuffer>();\n const cleaned = new Set<Buffer>();\n const cleanup = () => {\n for (const mappedBuffer of mapped.values()) mappedBuffer.unmap();\n for (const item of staging) {\n if (!cleaned.has(item.buffer)) {\n device.destroyBuffer(item.buffer);\n cleaned.add(item.buffer);\n }\n }\n };\n\n let encoder: RhiCommandEncoder;\n try {\n const encoderResult = device.createCommandEncoder({});\n if (!encoderResult.ok)\n return fail(\n firstRequest.handleId,\n 'copy',\n `command encoder creation failed: ${encoderResult.error.code}`,\n );\n encoder = encoderResult.value;\n for (const request of requests) {\n for (const slice of request.slices) {\n const blockCountX = Math.ceil(slice.width / request.blockWidth);\n const blockCountY = Math.ceil(slice.height / request.blockHeight);\n const rowBytes = blockCountX * request.bytesPerBlock;\n const alignedRowBytes = Math.ceil(rowBytes / 256) * 256;\n const stagingResult = device.createBuffer({\n size: alignedRowBytes * blockCountY,\n usage: TEXTURE_READBACK_USAGE,\n });\n if (!stagingResult.ok) {\n cleanup();\n return fail(\n request.handleId,\n 'copy',\n `staging buffer creation failed: ${stagingResult.error.code}`,\n );\n }\n const stagingBuffer = stagingResult.value;\n staging.push({\n request,\n slice,\n buffer: stagingBuffer,\n bytesPerBlock: request.bytesPerBlock,\n blockWidth: request.blockWidth,\n blockHeight: request.blockHeight,\n });\n try {\n encoder.copyTextureToBuffer(\n {\n texture: request.texture,\n mipLevel: slice.mip,\n origin: { x: 0, y: 0, z: slice.layer },\n } as unknown as never,\n {\n buffer: stagingBuffer,\n offset: 0,\n bytesPerRow: alignedRowBytes,\n rowsPerImage: blockCountY,\n } as unknown as never,\n {\n width: blockCountX * request.blockWidth,\n height: blockCountY * request.blockHeight,\n depthOrArrayLayers: 1,\n },\n );\n } catch (error) {\n cleanup();\n return fail(request.handleId, 'copy', `copyTextureToBuffer failed: ${String(error)}`);\n }\n }\n }\n const finishResult = encoder.finish();\n if (!finishResult.ok) {\n cleanup();\n return fail(\n firstRequest.handleId,\n 'copy',\n `encoder.finish failed: ${finishResult.error.code}`,\n );\n }\n device.queue.submit([finishResult.value as unknown as never] as unknown as readonly never[]);\n const drain = raceCancellation(device.queue.onSubmittedWorkDone(), callbacks.isCancelled);\n const drainResult = await drain;\n if (drainResult.cancelled) {\n cleanup();\n return fail(\n firstRequest.handleId,\n 'map',\n 'texture batch readback cancelled after the snapshot generation was invalidated',\n );\n }\n\n for (const request of requests) callbacks.onResourceStart?.(request.handleId);\n const mapResultsPromise = Promise.all(\n staging.map(async (item) => {\n try {\n const result = await item.buffer.mapAsync(0x1);\n if (result.ok) {\n if (callbacks.isCancelled?.()) result.value.unmap();\n else mapped.set(item.buffer, result.value);\n }\n return { item, result };\n } catch (error) {\n return { item, error };\n }\n }),\n );\n const mapResults = await raceCancellation(mapResultsPromise, callbacks.isCancelled);\n if (mapResults.cancelled) {\n cleanup();\n return fail(\n firstRequest.handleId,\n 'map',\n 'texture batch readback cancelled after the snapshot generation was invalidated',\n );\n }\n\n const bytesByHandle = new Map<string, Uint8Array>();\n for (const request of requests)\n bytesByHandle.set(request.handleId, new Uint8Array(request.totalBytes));\n for (const mappedResult of mapResults.value) {\n if ('error' in mappedResult) {\n cleanup();\n return fail(\n mappedResult.item.request.handleId,\n 'map',\n `mapAsync(READ) failed: ${String(mappedResult.error)}`,\n );\n }\n if (!mappedResult.result.ok) {\n cleanup();\n return fail(\n mappedResult.item.request.handleId,\n 'map',\n `mapAsync(READ) failed: ${mappedResult.result.error.code}`,\n );\n }\n const item = mappedResult.item;\n const mappedBuffer = mappedResult.result.value;\n const rangeResult = mappedBuffer.getMappedRange();\n if (!rangeResult.ok) {\n cleanup();\n return fail(\n item.request.handleId,\n 'map',\n `getMappedRange failed: ${rangeResult.error.code}`,\n );\n }\n const fullBytes = new Uint8Array(rangeResult.value);\n const blockCountX = Math.ceil(item.slice.width / item.blockWidth);\n const blockCountY = Math.ceil(item.slice.height / item.blockHeight);\n const rowBytes = blockCountX * item.bytesPerBlock;\n const alignedRowBytes = Math.ceil(rowBytes / 256) * 256;\n const output = bytesByHandle.get(item.request.handleId);\n if (output === undefined) {\n cleanup();\n return fail(item.request.handleId, 'map', 'texture batch returned an unknown handle');\n }\n for (let y = 0; y < blockCountY; y++) {\n const srcOffset = y * alignedRowBytes;\n const dstOffset = item.slice.byteOffset + y * rowBytes;\n for (let x = 0; x < rowBytes; x++) output[dstOffset + x] = fullBytes[srcOffset + x] ?? 0;\n }\n mappedBuffer.unmap();\n mapped.delete(item.buffer);\n device.destroyBuffer(item.buffer);\n cleaned.add(item.buffer);\n }\n const result = new Map<string, ArrayBuffer>();\n for (const request of requests) {\n const bytes = bytesByHandle.get(request.handleId);\n if (bytes === undefined) {\n cleanup();\n return fail(request.handleId, 'map', 'texture batch returned no bytes for a live texture');\n }\n result.set(request.handleId, bytes.buffer as ArrayBuffer);\n callbacks.onResourceComplete?.(request.handleId);\n }\n return ok(result);\n } catch (error) {\n cleanup();\n return fail(firstRequest.handleId, 'map', `texture batch readback failed: ${String(error)}`);\n }\n}\n","import { err, ok, type Result } from '@forgeax/engine-types';\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { bytesToHex } from '@noble/hashes/utils.js';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport { encodeTape } from '../protocol/codec';\nimport type { BootstrapResource, Tape as V7Tape } from '../protocol/types';\nimport type { DebugRhiInstance } from '../recorder';\nimport type { HandleId, Tape as LegacyTape, RhiCallEvent } from '../types';\n\nexport interface EncodedTape {\n readonly bytes: Uint8Array;\n readonly digest: string;\n readonly tape: V7Tape;\n}\n\nexport function assembleTape(recorder: DebugRhiInstance): Result<EncodedTape, RhiDebugError> {\n const legacy = recorder.getTape();\n if (legacy === undefined) {\n return err(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: 'the recorder finalized without a frame event',\n }),\n );\n }\n if ('code' in legacy) {\n return err(legacy);\n }\n const tape = toV7Tape(legacy, new Set(recorder.bootstrapEvents()));\n const encoded = encodeTape(tape);\n if (!encoded.ok) return err(encoded.error);\n return ok({\n bytes: encoded.value,\n digest: `sha256:${bytesToHex(sha256(encoded.value))}`,\n tape,\n });\n}\n\nfunction toV7Tape(legacy: LegacyTape, bootstrapEvents: ReadonlySet<RhiCallEvent>): V7Tape {\n const firstFrame = legacy.events.findIndex((event) => event.kind === 'frameMark');\n const boundary = firstFrame < 0 ? legacy.events.length : firstFrame;\n const bootstrap: BootstrapResource[] = [];\n const bootstrapIds = new Set<HandleId>();\n const initialData = new Map<HandleId, string[]>();\n for (const event of legacy.events.slice(0, boundary)) {\n if (event.kind === 'initialData') {\n const hashes = initialData.get(event.handleId) ?? [];\n hashes.push(event.dataHash);\n initialData.set(event.handleId, hashes);\n continue;\n }\n if (!bootstrapEvents.has(event)) continue;\n const handleId = createdHandleId(event);\n const kind = resourceKind(event);\n if (handleId === undefined || kind === undefined || bootstrapIds.has(handleId)) continue;\n bootstrapIds.add(handleId);\n bootstrap.push({\n handleId,\n kind,\n create: toJsonRecord(event),\n initialData: [],\n });\n }\n const allBlobs = Array.from(legacy.blobPool, ([hash, data]) => ({\n hash,\n bytes: new Uint8Array(data),\n compression: 'none' as const,\n }));\n const referenced = collectReferencedHandleIds(legacy.events, bootstrapEvents);\n const closure = collectBootstrapClosure(referenced, bootstrap);\n const keptBootstrap = bootstrap\n .filter((resource) => closure.has(resource.handleId))\n .map((resource) => {\n const hashes = initialData.get(resource.handleId) ?? [];\n const slices = hashes.flatMap((hash) => {\n const blob = legacy.blobPool.get(hash);\n return blob === undefined ? [] : [{ hash, byteOffset: 0, byteLength: blob.byteLength }];\n });\n return { ...resource, initialData: slices };\n });\n const events = legacy.events\n .filter((event) => event.kind !== 'initialData' && !bootstrapEvents.has(event))\n .map(toJsonSafe);\n const keptHashes = new Set(\n keptBootstrap.flatMap((resource) => resource.initialData.map((slice) => slice.hash)),\n );\n for (const event of events) {\n if ('dataHash' in event && typeof event.dataHash === 'string') keptHashes.add(event.dataHash);\n }\n const blobs = allBlobs.filter((blob) => keptHashes.has(blob.hash));\n return {\n header: {\n formatVersion: 7,\n rhiCaps: { ...legacy.rhiCapsRecorded },\n eventCount: events.length,\n blobCount: blobs.length,\n },\n bootstrap: keptBootstrap,\n events,\n blobs,\n };\n}\n\nfunction collectReferencedHandleIds(\n events: readonly RhiCallEvent[],\n bootstrapEvents: ReadonlySet<RhiCallEvent>,\n): Set<HandleId> {\n const ids = new Set<HandleId>();\n for (const event of events) {\n if (event.kind === 'initialData' || bootstrapEvents.has(event)) continue;\n collectHandleStrings(event, ids);\n }\n return ids;\n}\n\nfunction collectHandleStrings(value: unknown, ids: Set<HandleId>): void {\n if (typeof value === 'string' && /^[a-zA-Z][a-zA-Z-]*:\\S+$/.test(value)) {\n ids.add(value);\n return;\n }\n if (Array.isArray(value)) {\n for (const entry of value) collectHandleStrings(entry, ids);\n return;\n }\n if (value !== null && typeof value === 'object') {\n for (const entry of Object.values(value)) collectHandleStrings(entry, ids);\n }\n}\n\nfunction collectBootstrapClosure(\n referenced: ReadonlySet<HandleId>,\n resources: readonly BootstrapResource[],\n): Set<HandleId> {\n const byId = new Map(resources.map((resource) => [resource.handleId, resource]));\n const closure = new Set<HandleId>();\n const pending = [...referenced];\n while (pending.length > 0) {\n const handleId = pending.pop();\n if (handleId === undefined || closure.has(handleId)) continue;\n const resource = byId.get(handleId);\n if (resource === undefined) continue;\n closure.add(handleId);\n const dependencies = new Set<HandleId>();\n collectHandleStrings(resource.create, dependencies);\n pending.push(...dependencies);\n }\n return closure;\n}\n\nfunction toJsonSafe(event: RhiCallEvent): RhiCallEvent {\n return JSON.parse(JSON.stringify(event)) as RhiCallEvent;\n}\n\nfunction toJsonRecord(event: RhiCallEvent): Record<string, unknown> {\n return JSON.parse(JSON.stringify(event));\n}\n\nfunction createdHandleId(event: RhiCallEvent): HandleId | undefined {\n if (event.kind === 'createTextureView') return event.resultHandleId;\n if (event.kind === 'createCommandEncoder') return event.cmdHandleId;\n if (event.kind === 'beginRenderPass' || event.kind === 'beginComputePass') {\n return event.passHandleId;\n }\n if (event.kind.startsWith('create') && 'handleId' in event) return event.handleId;\n return undefined;\n}\n\nfunction resourceKind(event: RhiCallEvent): BootstrapResource['kind'] | undefined {\n switch (event.kind) {\n case 'createBuffer':\n return 'buffer';\n case 'createTexture':\n return 'texture';\n case 'createTextureView':\n return 'texture-view';\n case 'createSampler':\n return 'sampler';\n case 'createShaderModule':\n return 'shader-module';\n case 'createRenderPipeline':\n case 'createComputePipeline':\n return 'pipeline';\n case 'createBindGroup':\n case 'createBindGroupLayout':\n case 'createPipelineLayout':\n return 'binding';\n case 'createCommandEncoder':\n return 'encoder';\n default:\n return undefined;\n }\n}\n","// @forgeax/engine-rhi-debug/src/recorder/closure -- transitive handle closure owner.\n\nimport type { HandleId, RhiCallEvent } from '../types';\n\nexport function _collectFrameReferencedHandleIds(events: readonly RhiCallEvent[]): Set<HandleId> {\n const refs = new Set<HandleId>();\n for (const e of events) {\n switch (e.kind) {\n case 'writeBuffer':\n case 'clearBuffer':\n // initialData seeds a pre-arm resource's bytes; its handleId must be\n // prefix-pulled so the resource's create* event lands in the bootstrap\n // closure (otherwise the tape references a handle with no create event ->\n // tape-invalid on deserialize).\n case 'initialData': {\n const we = e as { handleId: HandleId };\n refs.add(we.handleId);\n break;\n }\n case 'setVertexBuffer': {\n const we = e as { passHandleId: HandleId; bufferHandleId: HandleId };\n refs.add(we.passHandleId);\n refs.add(we.bufferHandleId);\n break;\n }\n case 'setIndexBuffer': {\n const we = e as { passHandleId: HandleId; bufferHandleId: HandleId };\n refs.add(we.passHandleId);\n refs.add(we.bufferHandleId);\n break;\n }\n case 'setPipeline': {\n const we = e as { passHandleId: HandleId; pipelineHandleId: HandleId };\n refs.add(we.passHandleId);\n refs.add(we.pipelineHandleId);\n break;\n }\n case 'setComputePipeline': {\n const we = e as { passHandleId: HandleId; pipelineHandleId: HandleId };\n refs.add(we.passHandleId);\n refs.add(we.pipelineHandleId);\n break;\n }\n case 'setBindGroup': {\n const we = e as { passHandleId: HandleId; bindGroupHandleId: HandleId };\n refs.add(we.passHandleId);\n refs.add(we.bindGroupHandleId);\n break;\n }\n case 'draw': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'drawIndexed': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'setViewport': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'setScissorRect': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'setBlendConstant': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'setStencilReference': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'drawIndirect': {\n const we = e as { passHandleId: HandleId; indirectBufferHandleId: HandleId };\n refs.add(we.passHandleId);\n refs.add(we.indirectBufferHandleId);\n break;\n }\n case 'drawIndexedIndirect': {\n const we = e as { passHandleId: HandleId; indirectBufferHandleId: HandleId };\n refs.add(we.passHandleId);\n refs.add(we.indirectBufferHandleId);\n break;\n }\n case 'passPushDebugGroup': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'passPopDebugGroup': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'passInsertDebugMarker': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'endRenderPass': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'dispatchWorkgroups': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'dispatchWorkgroupsIndirect': {\n const we = e as { passHandleId: HandleId; indirectBufferHandleId: HandleId };\n refs.add(we.passHandleId);\n refs.add(we.indirectBufferHandleId);\n break;\n }\n case 'endComputePass': {\n const we = e as { passHandleId: HandleId };\n refs.add(we.passHandleId);\n break;\n }\n case 'submit': {\n const we = e as { cmdHandleIds: readonly HandleId[] };\n for (const id of we.cmdHandleIds) refs.add(id);\n break;\n }\n case 'beginRenderPass': {\n const we = e as {\n cmdHandleId: HandleId;\n colorAttachmentViewHandleIds: readonly (HandleId | undefined)[];\n depthStencilViewHandleId?: HandleId;\n };\n refs.add(we.cmdHandleId);\n for (const vhId of we.colorAttachmentViewHandleIds) {\n if (vhId !== undefined) refs.add(vhId);\n }\n if (we.depthStencilViewHandleId !== undefined) refs.add(we.depthStencilViewHandleId);\n break;\n }\n case 'beginComputePass': {\n const we = e as { cmdHandleId: HandleId };\n refs.add(we.cmdHandleId);\n break;\n }\n case 'finish': {\n const we = e as { cmdHandleId: HandleId };\n refs.add(we.cmdHandleId);\n break;\n }\n case 'pushDebugGroup':\n case 'popDebugGroup':\n case 'insertDebugMarker': {\n const we = e as { cmdHandleId: HandleId };\n refs.add(we.cmdHandleId);\n break;\n }\n case 'writeTexture': {\n const we = e as { destination: { textureHandleId: HandleId } };\n refs.add(we.destination.textureHandleId);\n break;\n }\n case 'copyExternalImageToTexture': {\n const we = e as { destination: { textureHandleId: HandleId } };\n refs.add(we.destination.textureHandleId);\n break;\n }\n case 'copyBufferToBuffer': {\n const we = e as { sourceHandleId: HandleId; destinationHandleId: HandleId };\n refs.add(we.sourceHandleId);\n refs.add(we.destinationHandleId);\n break;\n }\n case 'copyBufferToTexture': {\n const we = e as {\n source: { bufferHandleId: HandleId };\n destination: { textureHandleId: HandleId };\n };\n refs.add(we.source.bufferHandleId);\n refs.add(we.destination.textureHandleId);\n break;\n }\n case 'copyTextureToBuffer': {\n const we = e as {\n source: { textureHandleId: HandleId };\n destination: { bufferHandleId: HandleId };\n };\n refs.add(we.source.textureHandleId);\n refs.add(we.destination.bufferHandleId);\n break;\n }\n case 'copyTextureToTexture': {\n const we = e as {\n source: { textureHandleId: HandleId };\n destination: { textureHandleId: HandleId };\n };\n refs.add(we.source.textureHandleId);\n refs.add(we.destination.textureHandleId);\n break;\n }\n case 'createBindGroup':\n case 'createPipelineLayout':\n case 'createRenderPipeline':\n case 'createComputePipeline':\n case 'createTextureView': {\n // An in-frame-created resource may reference a PRE-ARM resource via its\n // backward edges (e.g. a composite/FXAA bind group built mid-frame that\n // samples a scratch TextureView created at setup; or an in-frame\n // createTextureView of a pre-arm texture). Those pre-arm handles are\n // reachable ONLY through this create* event's backward refs — no usage\n // event names them directly — so without collecting them here they never\n // become prefix seeds and the tape deserializes as non-self-contained\n // (tape-invalid). Collect the edges; getTape's prefixSeedIds\n // filter then drops entries that are themselves in-frame declared, leaving\n // only the genuinely pre-arm dependencies to seed the bootstrap closure.\n for (const ref of _getCreateEventReferencedHandleIds(e)) refs.add(ref);\n break;\n }\n case 'destroyBuffer':\n case 'destroyTexture':\n refs.add(e.handleId);\n break;\n case 'frameMark':\n case 'createBuffer':\n case 'createTexture':\n case 'createSampler':\n case 'createBindGroupLayout':\n case 'createShaderModule':\n case 'createCommandEncoder':\n // Leaf declaration events — no backward references to collect.\n break;\n default: {\n // Exhaustiveness guard: if a new RhiCallEvent member is added to the\n // union without a corresponding handle-collection case, tsc fails here.\n // This prevents silent omission of handle references (tape-invalid).\n const _exhaustive: never = e;\n void _exhaustive;\n break;\n }\n }\n }\n return refs;\n}\n\n/**\n * @internal\n * Return handleIds referenced by a create* event for transitive closure traversal.\n *\n * The edge set follows D-3 (plan-strategy 2):\n * - createBindGroup → layoutHandleId + resourceHandleIds\n * - createPipelineLayout → bglHandleIds\n * - createRenderPipeline → layoutHandleId (if != 'layout:auto') + vertex/fragmentShaderModuleHandleId (R-1)\n * - createComputePipeline → layoutHandleId (if != 'layout:auto') + computeShaderModuleHandleId (R-1)\n * - createTextureView → sourceHandleId\n * Leaf resources (buffer / texture / sampler / BGL / shaderModule) return empty.\n */\nexport function _getCreateEventReferencedHandleIds(event: RhiCallEvent): HandleId[] {\n switch (event.kind) {\n case 'createBindGroup': {\n const e = event as { layoutHandleId: HandleId; resourceHandleIds: readonly HandleId[] };\n return [e.layoutHandleId, ...e.resourceHandleIds];\n }\n case 'createPipelineLayout': {\n const e = event as { bglHandleIds: readonly HandleId[] };\n return [...e.bglHandleIds];\n }\n case 'createRenderPipeline': {\n const e = event as {\n layoutHandleId: HandleId;\n vertexShaderModuleHandleId?: HandleId;\n fragmentShaderModuleHandleId?: HandleId;\n };\n const refs: HandleId[] = [];\n if (e.layoutHandleId !== 'layout:auto') refs.push(e.layoutHandleId);\n if (e.vertexShaderModuleHandleId !== undefined) refs.push(e.vertexShaderModuleHandleId);\n if (e.fragmentShaderModuleHandleId !== undefined) refs.push(e.fragmentShaderModuleHandleId);\n return refs;\n }\n case 'createComputePipeline': {\n const e = event as { layoutHandleId: HandleId; computeShaderModuleHandleId?: HandleId };\n const refs: HandleId[] = [];\n if (e.layoutHandleId !== 'layout:auto') refs.push(e.layoutHandleId);\n if (e.computeShaderModuleHandleId !== undefined) refs.push(e.computeShaderModuleHandleId);\n return refs;\n }\n case 'createTextureView': {\n const e = event as { sourceHandleId: HandleId };\n return [e.sourceHandleId];\n }\n case 'createBuffer':\n case 'createTexture':\n case 'createSampler':\n case 'createBindGroupLayout':\n case 'createShaderModule':\n case 'createCommandEncoder':\n return [];\n default:\n return [];\n }\n}\n\n/**\n * @internal\n * Compute the transitive closure of handleIds from bootstrapCreates.\n *\n * Starting from the given seed set, recursively walks all referenced handleIds\n * via _getCreateEventReferencedHandleIds. Returns the set of all handleIds\n * whose create events must be included in the tape prefix for self-containment.\n *\n * If a referenced handleId is not found in bootstrapCreates, returns\n * `null` for that id — the caller should produce a structured tape error.\n */\nexport function _computeClosure(\n seedHandleIds: Set<HandleId>,\n bootstrapCreates: Map<HandleId, RhiCallEvent>,\n inFrameHandleIds: Set<HandleId>,\n): { closure: Set<HandleId>; missing: HandleId | null } {\n const closure = new Set(seedHandleIds);\n const queue = [...seedHandleIds];\n\n while (queue.length > 0) {\n const current: HandleId | undefined = queue.shift();\n if (current === undefined) break;\n const createEvent = bootstrapCreates.get(current);\n if (createEvent === undefined) {\n // The handle is not in bootstrapCreates. If it is declared in\n // s.events (e.g. swapchain textures from getCurrentTexture), treat it\n // as a leaf — no further expansion needed.\n if (inFrameHandleIds.has(current)) continue;\n return { closure, missing: current };\n }\n const edges = _getCreateEventReferencedHandleIds(createEvent);\n for (const target of edges) {\n if (!closure.has(target)) {\n closure.add(target);\n queue.push(target);\n }\n }\n }\n return { closure, missing: null };\n}\n\n/**\n * @internal\n * Topologically sort the closure set so that dependencies appear before dependents.\n *\n * Builds a dep-graph: if event A references handleId of event B, then B must\n * appear before A. Uses Kahn's algorithm.\n */\nexport function _topoSortClosure(\n closure: Set<HandleId>,\n bootstrapCreates: Map<HandleId, RhiCallEvent>,\n): RhiCallEvent[] {\n const inDegree = new Map<HandleId, number>();\n const dependents = new Map<HandleId, HandleId[]>();\n\n for (const hId of closure) {\n inDegree.set(hId, 0);\n dependents.set(hId, []);\n }\n\n for (const hId of closure) {\n const event = bootstrapCreates.get(hId);\n if (event === undefined) continue;\n const edges = _getCreateEventReferencedHandleIds(event);\n for (const target of edges) {\n if (closure.has(target)) {\n // hId depends on target\n const current = dependents.get(target);\n if (current !== undefined) current.push(hId);\n inDegree.set(hId, (inDegree.get(hId) ?? 0) + 1);\n }\n }\n }\n\n const queue: HandleId[] = [];\n for (const [hId, deg] of inDegree) {\n if (deg === 0) queue.push(hId);\n }\n\n const sorted: RhiCallEvent[] = [];\n while (queue.length > 0) {\n const current: HandleId | undefined = queue.shift();\n if (current === undefined) break;\n const event = bootstrapCreates.get(current);\n if (event !== undefined) sorted.push(event);\n\n const deps = dependents.get(current);\n if (deps !== undefined) {\n for (const dep of deps) {\n const newDeg = (inDegree.get(dep) ?? 1) - 1;\n inDegree.set(dep, newDeg);\n if (newDeg === 0) queue.push(dep);\n }\n }\n }\n\n return sorted;\n}\n\n// ============================================================================\n// DebugRhiInstance — public interface\n// ============================================================================\n","// @forgeax/engine-rhi-debug/src/recorder/core -- recorder state and event ownership.\n\n/// <reference types=\"@webgpu/types\" />\n\nimport type {\n Result,\n RhiDevice,\n RhiInstance,\n ShaderModule,\n TextureView,\n} from '@forgeax/engine-rhi';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport { textureBlockLayout } from '../texel-layout';\nimport type { HandleId, RhiCallEvent, RhiCapsRecorded, Tape } from '../types';\nimport { _getCreateEventReferencedHandleIds } from './closure';\n\nconst SNAPSHOT_TIMEOUT_MS = 30_000;\n\n// Result factories `makeOk` / `makeErr` re-import the canonical\n// `ok` / `err` from `@forgeax/engine-types` (architecture-principles #1\n// SSOT — same shape, same factory, no inline duplicate). Aliased on\n// import to avoid a free-form rename diff in this file's existing\n// `makeOk(...)` / `makeErr(...)` call sites; semantics identical.\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nexport const PER_EVENT_OVERHEAD = 192 as const;\n\n// COPY_SRC promotion bit values (D-5). GPUBufferUsage and GPUTextureUsage have\n// DIFFERENT bit layouts — COPY_SRC is 0x04 for buffers but 0x01 for textures:\n// GPUBufferUsage: MAP_READ=0x01 MAP_WRITE=0x02 COPY_SRC=0x04 COPY_DST=0x08 ...\n// GPUTextureUsage: COPY_SRC=0x01 COPY_DST=0x02 TEXTURE_BINDING=0x04 ...\n// A buffer carrying MAP_READ / MAP_WRITE cannot also carry COPY_SRC (WebGPU\n// validation: a mappable buffer's only other allowed usage is the matching\n// COPY_DST / COPY_SRC), so promotion is skipped for mappable buffers — those\n// are staging buffers, never frame-header snapshot targets.\nconst BUFFER_USAGE_COPY_SRC = 0x04;\nconst BUFFER_USAGE_MAP_READ = 0x01;\nconst BUFFER_USAGE_MAP_WRITE = 0x02;\nconst TEXTURE_USAGE_COPY_SRC = 0x01;\nconst TEXTURE_USAGE_COPY_DST = 0x02;\nconst TEXTURE_USAGE_BINDING = 0x04;\n/** Bound staging allocation, command submission, and map concurrency per batch. */\nexport const SNAPSHOT_RESOURCE_BATCH_SIZE = 32;\n\n/**\n * True for each depth / stencil texture format. Their content is render-pass\n * output (shadow maps, z-buffers), never an uploaded byte payload, and\n * queue.writeTexture rejects them (no CopyDst), so the frame-header snapshot\n * loop skips them rather than emitting an un-seedable initialData event.\n */\nfunction isDepthOrStencilFormat(format: GPUTextureFormat | undefined): boolean {\n return format !== undefined && (format.startsWith('depth') || format.startsWith('stencil'));\n}\n\n/**\n * True for a texture the frame-header snapshot can read back AND re-seed\n * faithfully: each color format with a known texel-block footprint, at each\n * array-layer count and each mip count. The readback + seed path\n * (readbackTexturePixels + computeTextureLayout + replayInitialData) walks\n * every (layer, mip) subresource with block-aware bytesPerRow, so ordinary\n * texels and BC/ETC/ASTC compressed assets share one round-trip contract.\n *\n * Still skipped (no faithful path today, Fail Fast rather than corrupt seed):\n * - depth/stencil formats: queue.writeTexture rejects them (no CopyDst seed).\n * - multisample (sampleCount > 1): writeTexture rejects an MSAA target. MSAA\n * attachments are transient (resolved into a single-sample texture that IS\n * snapshottable), so skipping loses no seed.\n */\nfunction isSnapshottableColorTexture(\n format: GPUTextureFormat | undefined,\n _size: number | GPUExtent3DStrict | undefined,\n sampleCount?: number,\n): boolean {\n if (isDepthOrStencilFormat(format)) return false;\n // Multisample textures reject queue.writeTexture; skip (resolved target seeds).\n if (sampleCount !== undefined && sampleCount > 1) return false;\n // Round-trippable iff its texel-block footprint is known.\n return textureBlockLayout(format) !== undefined;\n}\n\n/** Add COPY_SRC to a buffer usage unless it is a mappable (MAP_READ/WRITE) buffer. */\nfunction promoteBufferUsage(usage: number): number {\n if ((usage & (BUFFER_USAGE_MAP_READ | BUFFER_USAGE_MAP_WRITE)) !== 0) return usage;\n return usage | BUFFER_USAGE_COPY_SRC;\n}\n\n/**\n * True for a mappable (MAP_READ / MAP_WRITE) buffer. These are staging buffers\n * (e.g. shadow-probe-staging): promoteBufferUsage deliberately does NOT add\n * COPY_SRC to them (MAP_READ|COPY_SRC is an invalid WebGPU usage combo), so they\n * cannot be a copyBufferToBuffer source. The frame-header snapshot loop must skip\n * them — driving readbackBufferBytes on one throws \"usage doesn't include\n * CopySrc\". Their bytes are transient readback scratch, never seed payload, so\n * losing them is correct (mirrors promoteBufferUsage's own exclusion).\n */\nfunction isMappableBuffer(usage: number): boolean {\n return (usage & (BUFFER_USAGE_MAP_READ | BUFFER_USAGE_MAP_WRITE)) !== 0;\n}\n\nexport { TAPE_FORMAT_VERSION } from '../protocol/types';\n\n// ============================================================================\n// State machine\n// ============================================================================\n\nenum RecorderState {\n Idle = 'idle',\n Armed = 'armed',\n Snapshotting = 'snapshotting',\n Recording = 'recording',\n Finalizing = 'finalizing',\n Error = 'error',\n}\n\n// ============================================================================\n// Hash utility for blob dedup\n// ============================================================================\n\n/** @internal */\nlet _nextHandleId = 0;\n\nfunction allocHandleId(kind: string): HandleId {\n return `${kind}:${++_nextHandleId}`;\n}\n\nfunction fastHash(data: ArrayBuffer): string {\n const view = new Uint8Array(data);\n let hash = 5381;\n for (let i = 0; i < view.length; i++) {\n hash = ((hash << 5) + hash + (view[i] ?? 0)) | 0;\n }\n return (hash >>> 0).toString(16);\n}\n\nfunction storeBlob(state: RecorderInternal, data: ArrayBuffer): string {\n const hash = fastHash(data);\n if (!state.blobPool.has(hash)) {\n state.blobPool.set(hash, data.slice(0) as ArrayBuffer);\n }\n return hash;\n}\n\n/**\n * Narrow a readbackBufferBytes failure to the snapshot stage.\n * readbackBufferBytes already tags `.detail.phase` with 'copy' | 'map'; carry\n * it through so the re-wrapped error preserves the failure point. Falls back to\n * 'copy' when the inner error lacks a snapshot detail.\n */\nfunction snapshotStageOf(error: RhiDebugError): 'copy' | 'map' | 'store' {\n const d = error.detail;\n if ('phase' in d && d.phase !== undefined) return d.phase;\n return 'copy';\n}\n\n// ============================================================================\n// Internal recorder state\n// ============================================================================\n\ntype SnapshotProgress = {\n readonly startedAt: number;\n readonly stage: 'queue-drain' | 'resource-readback';\n readonly totalResources: number;\n readonly completedResources: number;\n readonly skippedResources: number;\n readonly currentHandleId: string | null;\n readonly currentKind: 'buffer' | 'texture' | null;\n readonly currentSizeBytes: number | null;\n};\n\ninterface RecorderInternal {\n state: RecorderState;\n requestedFrames: number;\n recordedFrames: number;\n events: RhiCallEvent[];\n blobPool: Map<string, ArrayBuffer>;\n handleMap: WeakMap<object, HandleId>;\n textureViewHandleMap: WeakMap<TextureView, HandleId>;\n /**\n * @internal\n * Bootstrap create-event table. Populated by registerHandle when called\n * with a create event payload — records every create* (buffer, texture,\n * pipeline, bindGroup, shaderModule, …) from the moment wrap() is called,\n * independent of the recorder state machine (Idle / Armed / Recording).\n * Preserved across arm() cycles (SSOT for closure computation in getTape).\n */\n bootstrapCreates: Map<HandleId, RhiCallEvent>;\n /** Handles whose initialData event was emitted by the current capture. */\n snapshotSeededHandles: Set<HandleId>;\n /** Generation token invalidating async snapshot work after timeout/error. */\n snapshotGeneration: number;\n /** Last observable progress of the current/most recent resource snapshot. */\n snapshotProgress: SnapshotProgress | undefined;\n /**\n * @internal\n * Descriptor registry of currently-live resources. Written by createBuffer /\n * createTexture (after registerHandle) and cleared by destroyBuffer /\n * destroyTexture. Distinct from handleMap (WeakMap, handle object -> handleId\n * identity, one-way): descriptorTable carries the descriptor *content* (kind /\n * size / format / usage) AND the resource object keyed by handleId, so\n * snapshotResource can both determine a resource's shape and reach the object\n * for readback at frame-header time without re-scanning the event stream or\n * reverse-walking the WeakMap (which cannot be iterated). destroy* removes the\n * entry so the live-resource set never grows unbounded (AC-09). One registry,\n * one delete on destroy — shape and object share the same lifecycle (SSOT).\n */\n descriptorTable: Map<\n HandleId,\n {\n kind: 'buffer' | 'texture';\n size?: number | GPUExtent3DStrict;\n format?: GPUTextureFormat;\n sampleCount?: number;\n mipLevelCount?: number;\n usage: number;\n resource: object;\n }\n >;\n /** @internal */\n _skipRecord: boolean;\n frameIdx: number;\n bootstrap: boolean;\n recordedCaps: RhiCapsRecorded | undefined;\n onFrameEndUnsubscribe?: (() => void) | undefined;\n /** true when the current recording is valid. */\n valid: boolean;\n /**\n * @internal\n * Most recent live RhiDevice produced by `requestAdapter().requestDevice()`\n * via the recorder proxy chain. Captured so the adapter (I-2 fix) can\n * reach the same device for replay without forcing the host to expose\n * a separate channel.\n */\n capturedDevice: RhiDevice | undefined;\n}\n\nfunction snapshotTimeoutDetail(\n progress: SnapshotProgress | undefined,\n timeoutMs: number,\n): import('../errors').CaptureTimeoutDetail {\n const current = progress ?? {\n startedAt: Date.now(),\n stage: 'queue-drain' as const,\n totalResources: 0,\n completedResources: 0,\n skippedResources: 0,\n currentHandleId: null,\n currentKind: null,\n currentSizeBytes: null,\n };\n return {\n stage: 'snapshot',\n cause: 'GPU readback did not complete before the bounded snapshot timeout',\n timeoutMs,\n progress: {\n snapshotStage: current.stage,\n totalResources: current.totalResources,\n completedResources: current.completedResources,\n skippedResources: current.skippedResources,\n currentHandleId: current.currentHandleId,\n currentKind: current.currentKind,\n currentSizeBytes: current.currentSizeBytes,\n elapsedMs: Math.max(0, Date.now() - current.startedAt),\n },\n };\n}\n\n/**\n * @internal\n * True while the recorder is in a state that appends normal RHI events to the\n * tape: Armed / Recording. Snapshotting is deliberately excluded: the async\n * frame-header seed phase must not fold live viewport frames into the capture.\n * This is the SSOT recording predicate —\n * `pushEvent` gates on it, and the proxy fast-path (writeBuffer / writeTexture /\n * createCommandEncoder) short-circuits when it is false so an idle recorder\n * (FORGEAX_ENGINE_RHI_DEBUG=1 but no capture in flight) pays no per-call\n * event-object allocation, no storeBlob hash+copy, and no proxy-encoder wrapping.\n *\n * Deliberately ignores `_skipRecord`: that flag suppresses recorder-internal\n * RHI calls (such as snapshot readback staging) during either capture phase.\n * `shouldRecord` folds it in for the normal pushEvent gate.\n */\nfunction isRecordingActive(s: RecorderInternal): boolean {\n return s.state === RecorderState.Armed || s.state === RecorderState.Recording;\n}\n\n/**\n * A frame-header snapshot is not a normal render-recording phase, but it can\n * already have copied a live resource and still need that resource's create\n * event when it appends `initialData`. Keep bootstrap ownership through that\n * async window: per-frame feature resources may be released while readback is\n * awaiting GPU completion.\n */\nfunction retainsCaptureBootstrap(s: RecorderInternal): boolean {\n return isRecordingActive(s) || s.state === RecorderState.Snapshotting;\n}\n\n/**\n * @internal\n * The exact pushEvent gate as a predicate: record iff not suppressed AND in an\n * active recording state. Proxy methods that do pre-pushEvent work (storeBlob,\n * event-object construction) check this first to skip that work when it would\n * be discarded — same-condition-as-pushEvent guarantees no behavioural drift\n * (a call that would record still does all its work).\n */\nfunction shouldRecord(s: RecorderInternal): boolean {\n return !s._skipRecord && isRecordingActive(s);\n}\n\nfunction pushEvent(s: RecorderInternal, event: RhiCallEvent): void {\n if (!shouldRecord(s)) return;\n s.events.push(event);\n}\n\n/**\n * Append a frame-header seed without reopening the normal RHI event gate.\n * Snapshotting is not a render-recording state, but its async readback still\n * needs to emit initialData events for the resources that seed replay.\n */\nfunction pushSnapshotEvent(s: RecorderInternal, event: RhiCallEvent): void {\n if (s._skipRecord || (!isRecordingActive(s) && s.state !== RecorderState.Snapshotting)) {\n return;\n }\n s.events.push(event);\n}\n\nfunction registerHandle(\n s: RecorderInternal,\n handle: object,\n kind: string,\n createEvent?: RhiCallEvent,\n): HandleId {\n const hId = allocHandleId(kind);\n s.handleMap.set(handle, hId);\n if (createEvent !== undefined) {\n if ('handleId' in createEvent) Object.assign(createEvent, { handleId: hId });\n s.bootstrapCreates.set(hId, createEvent);\n }\n return hId;\n}\n\nfunction ensureTextureCreateEvent(\n s: RecorderInternal,\n texture: object,\n textureId: HandleId,\n viewFormat?: GPUTextureFormat,\n): RhiDebugError | undefined {\n const existing = s.bootstrapCreates.get(textureId);\n if (existing !== undefined) {\n if (\n viewFormat !== undefined &&\n existing.kind === 'createTexture' &&\n existing.origin === 'swapchain'\n ) {\n addSwapchainViewFormat(existing, viewFormat);\n }\n return undefined;\n }\n\n const raw = texture as Record<string, unknown>;\n const width = raw.width as number | undefined;\n const height = raw.height as number | undefined;\n const depthOrArrayLayers = (raw.depthOrArrayLayers as number | undefined) ?? 1;\n const format = raw.format as string | undefined;\n const rawUsage = raw.usage as number | undefined;\n\n if (\n width === undefined ||\n height === undefined ||\n format === undefined ||\n rawUsage === undefined\n ) {\n return createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `swapchain texture '${textureId}' has unreadable dimensions (width=${width}, height=${height}, format=${format}, usage=${rawUsage})`,\n handleId: textureId,\n eventIndex: -1,\n });\n }\n\n const event: RhiCallEvent = {\n kind: 'createTexture',\n handleId: textureId,\n origin: 'swapchain',\n desc: {\n size: { width, height, depthOrArrayLayers },\n format: format as GPUTextureFormat,\n usage: (rawUsage | TEXTURE_USAGE_COPY_SRC | TEXTURE_USAGE_COPY_DST) as GPUTextureUsageFlags,\n ...(viewFormat === undefined ? {} : { viewFormats: [viewFormat] }),\n },\n };\n s.bootstrapCreates.set(textureId, event);\n pushEvent(s, event);\n return undefined;\n}\n\nfunction addSwapchainViewFormat(\n texture: Extract<RhiCallEvent, { kind: 'createTexture' }>,\n viewFormat: GPUTextureFormat,\n): void {\n if (texture.desc.format === viewFormat || texture.origin !== 'swapchain') return;\n const viewFormats = new Set(texture.desc.viewFormats ?? []);\n viewFormats.add(viewFormat);\n (texture as { desc: typeof texture.desc }).desc = {\n ...texture.desc,\n viewFormats: [...viewFormats],\n };\n}\n\nfunction reconcileSwapchainViewFormats(s: RecorderInternal): void {\n const events = [...s.events, ...s.bootstrapCreates.values()];\n for (const event of events) {\n if (event.kind !== 'createTextureView' || event.desc.format === undefined) continue;\n const source = s.bootstrapCreates.get(event.sourceHandleId);\n if (source?.kind === 'createTexture' && source.origin === 'swapchain') {\n addSwapchainViewFormat(source, event.desc.format);\n }\n }\n}\n\nfunction hasBootstrapDependency(s: RecorderInternal, handleId: HandleId): boolean {\n for (const event of s.bootstrapCreates.values()) {\n if (_getCreateEventReferencedHandleIds(event).includes(handleId)) return true;\n }\n return false;\n}\n\nfunction getHandleId(s: RecorderInternal, handle: object, kind: string): HandleId {\n const id = s.handleMap.get(handle);\n if (id !== undefined) return id;\n const newId = registerHandle(s, handle, kind);\n if (kind === 'texture') ensureTextureCreateEvent(s, handle, newId);\n return newId;\n}\n\n// ============================================================================\n// Transitive closure — bootstrapCreates → self-contained tape prefix\n// ============================================================================\n\n/**\n * @internal\n * Collect all handleIds referenced by frame events in `s.events`.\n *\n * Scans events for ALL fields that reference resources — mirrors\n * the reference categories checked by findDanglingHandleId in\n * tape-format.ts to achieve producer/consumer convergence (D-2).\n *\n * Includes: buffer/texture/pipeline/bindGroup/sampler/textureView/\n * shaderModule handles (persistent), plus passHandleId and cmdHandleId\n * from pass/encoder events (per-frame transient). Transient handles\n * that are declared in-frame are excluded later by the inFrameHandleIds\n * filter in getTape().\n */\n\nexport interface DebugRhiInstance extends RhiInstance {\n arm(frames: number): Result<void, RhiDebugError>;\n onFrameEnd(): void;\n getTape(): Tape | RhiDebugError | undefined;\n getState(): string;\n getEvents(): readonly RhiCallEvent[];\n getBlobPool(): ReadonlyMap<string, ArrayBuffer>;\n /** Transition to error state (e.g. on device.lost). Tape data preserved but valid=false. */\n transitionToError(): void;\n /** Clear error state to idle, allowing re-arm. */\n disposeError(): void;\n /**\n * Snapshot a resource's GPU bytes into the tape as an initialData event.\n *\n * Reads the resource descriptor from the internal registry, copies the\n * resource's bytes via copyToBuffer/mapAsync, stores the bytes into the\n * blobPool (djb2 hash-dedup), and pushes an RhiCallEventInitialData into\n * the event stream. Returns Result with {handleId, dataHash} on success,\n * or capture-snapshot-failed on a readback/storeBlob failure.\n *\n * Async: the GPU readback chain (copyToBuffer -> submit ->\n * onSubmittedWorkDone -> mapAsync) is inherently asynchronous.\n */\n snapshotResource(\n handleId: HandleId,\n ): Promise<Result<{ handleId: HandleId; dataHash: string }, RhiDebugError>>;\n /**\n * Frame-header snapshot loop: awaits all submitted GPU work, then snapshots\n * every live resource in the descriptor registry (full-table dump, no\n * trimming). Advances the recorder Armed -> Snapshotting -> Recording on\n * success. Returns the first snapshot failure as a Result so the caller can\n * fail fast rather than record a partial seed set.\n */\n snapshotAllLiveResources(timeoutMs?: number): Promise<Result<void, RhiDebugError>>;\n /**\n * @internal\n * Append an event from a standalone wrapper (e.g. `wrapCreateShaderModule`)\n * through the same `_skipRecord` + state-machine guard that the proxy\n * methods use. This exists so external wrappers cannot bypass recursion\n * protection (I-12, round 1 implement-review). Not part of the AI-user\n * contract — `wrap*` helpers in this package are the only callers.\n */\n pushExternalEvent(event: RhiCallEvent): void;\n /**\n * @internal\n * Register a shader module object in the recorder's handleMap so\n * downstream pipeline events can look up its handleId via getHandleId.\n */\n registerShaderModule(handle: ShaderModule, handleId: HandleId): void;\n /**\n * @internal\n * Route a create event through registerHandle (alloc id + write bootstrapCreates)\n * and pushEvent in a single call. For standalone wrappers that cannot access\n * the internal registerHandle/pushEvent functions directly.\n * Returns the allocated HandleId so the caller can use it for downstream\n * registration (e.g. shaderModule → handleMap).\n */\n pushExternalCreateEvent(handle: object, kind: string, event: RhiCallEvent): HandleId;\n /**\n * @internal\n * Drop all device-bound recorder state after the host observes a real\n * device loss. A tape recorded against the lost device cannot seed a fresh\n * device, so the next capture must start from the rebuilt resource graph.\n */\n resetForDeviceLoss(): void;\n /** @internal Return whether the current capture is valid. */\n valid(): boolean;\n /**\n * @internal\n * Return the number of entries in bootstrapCreates. Test-only accessor\n * so unit tests can verify bootstrapCreates write/retain semantics\n * without going through getTape() closure computation (M2).\n */\n bootstrapCreatesSize(): number;\n /** @internal Return the create-event identities owned by the bootstrap registry. */\n bootstrapEvents(): readonly RhiCallEvent[];\n /**\n * @internal\n * Read-only view of the descriptor registry keyed by handleId. Test-only\n * accessor so unit tests can verify create* register / destroy* remove\n * semantics (AC-09) without reaching into the closed-over recorder state.\n */\n descriptorTable(): ReadonlyMap<\n HandleId,\n {\n kind: 'buffer' | 'texture';\n size?: number | GPUExtent3DStrict;\n format?: GPUTextureFormat;\n usage: number;\n resource: object;\n }\n >;\n}\n\n// ============================================================================\n// Type for standalone createShaderModule function (from rhi-webgpu)\n// ============================================================================\n\nexport type CreateShaderModuleFn = (\n device: RhiDevice,\n desc: { code: string; label?: string | undefined },\n) => Promise<Result<ShaderModule, import('@forgeax/engine-rhi').RhiError>>;\n\nexport type { RecorderInternal, SnapshotProgress };\nexport {\n addSwapchainViewFormat,\n allocHandleId,\n ensureTextureCreateEvent,\n fastHash,\n getHandleId,\n hasBootstrapDependency,\n isDepthOrStencilFormat,\n isMappableBuffer,\n isRecordingActive,\n isSnapshottableColorTexture,\n promoteBufferUsage,\n pushEvent,\n pushSnapshotEvent,\n RecorderState,\n reconcileSwapchainViewFormats,\n registerHandle,\n retainsCaptureBootstrap,\n SNAPSHOT_TIMEOUT_MS,\n shouldRecord,\n snapshotStageOf,\n snapshotTimeoutDetail,\n storeBlob,\n TEXTURE_USAGE_BINDING,\n TEXTURE_USAGE_COPY_DST,\n TEXTURE_USAGE_COPY_SRC,\n};\n","// @forgeax/engine-rhi-debug/src/recorder/shader -- standalone shader factory proxy.\n\nimport type { Result, RhiDevice, ShaderModule } from '@forgeax/engine-rhi';\nimport type { HandleId } from '../types';\nimport type { CreateShaderModuleFn, DebugRhiInstance } from './core';\n\nexport function wrapCreateShaderModule(\n originalFn: CreateShaderModuleFn,\n debugInst: DebugRhiInstance,\n): CreateShaderModuleFn {\n return async function wrappedCreateShaderModule(\n device: RhiDevice,\n desc: { code: string; label?: string | undefined },\n ): Promise<Result<ShaderModule, import('@forgeax/engine-rhi').RhiError>> {\n // The renderer threads the proxied RhiDevice (from proxyDevice()) here, but\n // engine-rhi-webgpu's createShaderModule reverse-looks-up the GPUDevice via\n // a WeakMap keyed on the RhiDevice that makeRhiDevice registered. The proxy\n // is a different JS object, so WeakMap.get(proxy) is undefined and the real\n // fn returns shader-compile-failed (\"unregistered RhiDevice\"). Unwrap the\n // proxy to the registered device via the _realDevice escape hatch that\n // proxyDevice exposes for exactly this purpose.\n const realDevice = (device as RhiDevice & { _realDevice?: RhiDevice })._realDevice ?? device;\n const result = await originalFn(realDevice, desc);\n if (!result.ok) return result;\n\n // I-12 (round 1 implement-review) fix: route the createShaderModule\n // event through the same `pushExternalEvent` helper that wraps the\n // internal `pushEvent` (and therefore the `_skipRecord` + state-machine\n // guard). The previous `(events as RhiCallEvent[]).push(...)` cast\n // bypassed those guards — recorder-internal RHI calls during shader\n // construction would have self-polluted the tape.\n const hId = debugInst.pushExternalCreateEvent(result.value, 'shaderModule', {\n kind: 'createShaderModule',\n handleId: '' as HandleId,\n wgslCode: desc.code,\n });\n // Register the shader module handle in the recorder's handleMap so\n // downstream pipeline events (createRenderPipeline / createComputePipeline)\n // can resolve the handleId via getHandleId. Required for cross-device\n // replay: the tape's pipeline desc carries live GPU module objects which\n // are device-bound, so the replayer must swap them with re-created shader\n // modules from the handleMap using the handleId.\n debugInst.registerShaderModule(result.value, hId);\n\n return result;\n };\n}\n","// @forgeax/engine-rhi-debug/src/recorder/pass -- render/compute pass proxy owners.\n\nimport type {\n ComputePipeline,\n RenderPipeline,\n RhiComputePassEncoder,\n RhiRenderPassEncoder,\n} from '@forgeax/engine-rhi';\nimport type { HandleId } from '../types';\nimport type { RecorderInternal } from './core';\nimport { getHandleId, pushEvent } from './core';\n\nexport function createRenderPassProxy(\n s: RecorderInternal,\n realPass: RhiRenderPassEncoder,\n passHId: HandleId,\n): RhiRenderPassEncoder {\n return {\n setPipeline(pipeline: RenderPipeline) {\n const pid = getHandleId(s, pipeline as object, 'renderPipeline');\n pushEvent(s, { kind: 'setPipeline', passHandleId: passHId, pipelineHandleId: pid });\n realPass.setPipeline(pipeline);\n },\n setVertexBuffer(slot, buffer, offset, size) {\n const bid = getHandleId(s, buffer as object, 'buffer');\n pushEvent(s, {\n kind: 'setVertexBuffer',\n passHandleId: passHId,\n slot,\n bufferHandleId: bid,\n offset,\n size,\n });\n realPass.setVertexBuffer(slot, buffer, offset, size);\n },\n setIndexBuffer(buffer, format, offset, size) {\n const bid = getHandleId(s, buffer as object, 'buffer');\n pushEvent(s, {\n kind: 'setIndexBuffer',\n passHandleId: passHId,\n bufferHandleId: bid,\n format,\n offset,\n size,\n });\n realPass.setIndexBuffer(buffer, format, offset, size);\n },\n setBindGroup(index, bindGroup, ...rest: unknown[]) {\n const bgid = getHandleId(s, bindGroup as object, 'bindGroup');\n let dynOffsets: readonly number[] | undefined;\n if (rest[0] instanceof Uint32Array) {\n dynOffsets = Array.from(rest[0] as Uint32Array);\n (realPass.setBindGroup as (...args: unknown[]) => void)(index, bindGroup, ...rest);\n } else {\n const offsets = rest[0] as readonly number[] | undefined;\n dynOffsets = offsets === undefined ? undefined : Array.from(offsets);\n realPass.setBindGroup(index, bindGroup, offsets);\n }\n pushEvent(s, {\n kind: 'setBindGroup',\n passHandleId: passHId,\n index,\n bindGroupHandleId: bgid,\n dynamicOffsets: dynOffsets,\n });\n },\n draw(vertexCount, instanceCount, firstVertex, firstInstance) {\n pushEvent(s, {\n kind: 'draw',\n passHandleId: passHId,\n vertexCount,\n instanceCount: instanceCount ?? 1,\n firstVertex: firstVertex ?? 0,\n firstInstance: firstInstance ?? 0,\n });\n realPass.draw(vertexCount, instanceCount, firstVertex, firstInstance);\n },\n drawIndexed(indexCount, instanceCount, firstIndex, baseVertex, firstInstance) {\n pushEvent(s, {\n kind: 'drawIndexed',\n passHandleId: passHId,\n indexCount,\n instanceCount: instanceCount ?? 1,\n firstIndex: firstIndex ?? 0,\n baseVertex: baseVertex ?? 0,\n firstInstance: firstInstance ?? 0,\n });\n realPass.drawIndexed(indexCount, instanceCount, firstIndex, baseVertex, firstInstance);\n },\n\n // Pass-through methods (not in v1 event set, but must not break the proxy)\n setViewport(x, y, w, h, minDepth, maxDepth) {\n pushEvent(s, {\n kind: 'setViewport',\n passHandleId: passHId,\n x,\n y,\n w,\n h,\n minDepth: minDepth ?? 0,\n maxDepth: maxDepth ?? 1,\n });\n realPass.setViewport(x, y, w, h, minDepth, maxDepth);\n },\n setScissorRect(x, y, w, h) {\n pushEvent(s, {\n kind: 'setScissorRect',\n passHandleId: passHId,\n x,\n y,\n w,\n h,\n });\n realPass.setScissorRect(x, y, w, h);\n },\n setBlendConstant(color) {\n pushEvent(s, {\n kind: 'setBlendConstant',\n passHandleId: passHId,\n color,\n });\n realPass.setBlendConstant(color);\n },\n setStencilReference(reference) {\n // Recorded (not a no-op pass-through): stencil pipelines compare against\n // this dynamic reference, so without it replay defaults ref=0 and a\n // not-equal/equal stencil test (e.g. the 4.2 stencil-testing outline\n // pass) silently breaks -- the outline vanishes on replay.\n pushEvent(s, {\n kind: 'setStencilReference',\n passHandleId: passHId,\n reference,\n });\n realPass.setStencilReference(reference);\n },\n drawIndirect(indirectBuffer, indirectOffset) {\n const ibId = getHandleId(s, indirectBuffer as object, 'buffer');\n pushEvent(s, {\n kind: 'drawIndirect',\n passHandleId: passHId,\n indirectBufferHandleId: ibId,\n indirectOffset,\n });\n realPass.drawIndirect(indirectBuffer, indirectOffset);\n },\n drawIndexedIndirect(indirectBuffer, indirectOffset) {\n const ibId = getHandleId(s, indirectBuffer as object, 'buffer');\n pushEvent(s, {\n kind: 'drawIndexedIndirect',\n passHandleId: passHId,\n indirectBufferHandleId: ibId,\n indirectOffset,\n });\n realPass.drawIndexedIndirect(indirectBuffer, indirectOffset);\n },\n pushDebugGroup(groupLabel) {\n pushEvent(s, {\n kind: 'passPushDebugGroup',\n passHandleId: passHId,\n groupLabel,\n });\n realPass.pushDebugGroup(groupLabel);\n },\n popDebugGroup() {\n pushEvent(s, { kind: 'passPopDebugGroup', passHandleId: passHId });\n realPass.popDebugGroup();\n },\n insertDebugMarker(markerLabel) {\n pushEvent(s, {\n kind: 'passInsertDebugMarker',\n passHandleId: passHId,\n markerLabel,\n });\n realPass.insertDebugMarker(markerLabel);\n },\n executeBundles(bundles) {\n return realPass.executeBundles(bundles);\n },\n beginOcclusionQuery(queryIndex) {\n return realPass.beginOcclusionQuery(queryIndex);\n },\n endOcclusionQuery() {\n return realPass.endOcclusionQuery();\n },\n end() {\n pushEvent(s, { kind: 'endRenderPass', passHandleId: passHId });\n realPass.end();\n },\n };\n}\n\nexport function createComputePassProxy(\n s: RecorderInternal,\n realPass: RhiComputePassEncoder,\n passHId: HandleId,\n): RhiComputePassEncoder {\n return {\n setPipeline(pipeline: ComputePipeline) {\n const pid = getHandleId(s, pipeline as object, 'computePipeline');\n pushEvent(s, { kind: 'setComputePipeline', passHandleId: passHId, pipelineHandleId: pid });\n realPass.setPipeline(pipeline);\n },\n setBindGroup(index, bindGroup, dynamicOffsets) {\n const bgid = getHandleId(s, bindGroup as object, 'bindGroup');\n const recordedDynamicOffsets =\n dynamicOffsets === undefined ? undefined : Array.from(dynamicOffsets);\n pushEvent(s, {\n kind: 'setBindGroup',\n passHandleId: passHId,\n index,\n bindGroupHandleId: bgid,\n dynamicOffsets: recordedDynamicOffsets,\n });\n realPass.setBindGroup(index, bindGroup, dynamicOffsets);\n },\n dispatchWorkgroups(x, y, z) {\n pushEvent(s, {\n kind: 'dispatchWorkgroups',\n passHandleId: passHId,\n x,\n y: y ?? 1,\n z: z ?? 1,\n });\n realPass.dispatchWorkgroups(x, y, z);\n },\n dispatchWorkgroupsIndirect(indirectBuffer, indirectOffset) {\n const bufferHandleId = getHandleId(s, indirectBuffer as object, 'buffer');\n pushEvent(s, {\n kind: 'dispatchWorkgroupsIndirect',\n passHandleId: passHId,\n indirectBufferHandleId: bufferHandleId,\n indirectOffset,\n });\n realPass.dispatchWorkgroupsIndirect(indirectBuffer, indirectOffset);\n },\n end() {\n pushEvent(s, { kind: 'endComputePass', passHandleId: passHId });\n realPass.end();\n },\n };\n}\n","// @forgeax/engine-rhi-debug/src/recorder/encoder -- command encoder proxy owner.\n\nimport type {\n Buffer,\n ComputePassDescriptor,\n RenderPassDescriptor,\n RhiCommandEncoder,\n} from '@forgeax/engine-rhi';\nimport type { HandleId } from '../types';\nimport type { RecorderInternal } from './core';\nimport { allocHandleId, getHandleId, pushEvent } from './core';\nimport { createComputePassProxy, createRenderPassProxy } from './pass';\n\nexport function createCommandEncoderProxy(\n s: RecorderInternal,\n realEnc: RhiCommandEncoder,\n cmdHId: HandleId,\n): RhiCommandEncoder {\n return {\n beginRenderPass(desc: RenderPassDescriptor) {\n const passHId = allocHandleId('renderPass');\n // I-2 fix-up (round 1, dawn smoke): walk colorAttachments +\n // depthStencilAttachment to extract the textureView handleIds\n // recorded under createTextureView. Without this the replayer\n // would dereference the original GPUTextureView brand directly,\n // which fails on a fresh device (cross-device GPU object reuse).\n const colorAttachmentViewHandleIds: (HandleId | undefined)[] = [];\n const colorAttachmentResolveTargetHandleIds: (HandleId | undefined)[] = [];\n for (const att of desc.colorAttachments) {\n if (att === null || att === undefined) {\n colorAttachmentViewHandleIds.push(undefined);\n colorAttachmentResolveTargetHandleIds.push(undefined);\n } else {\n const view = att.view;\n const id =\n view !== undefined && view !== null ? s.handleMap.get(view as object) : undefined;\n colorAttachmentViewHandleIds.push(id);\n const resolveTarget = att.resolveTarget;\n const resolveTargetId =\n resolveTarget !== undefined && resolveTarget !== null\n ? s.handleMap.get(resolveTarget as object)\n : undefined;\n colorAttachmentResolveTargetHandleIds.push(resolveTargetId);\n }\n }\n let depthStencilViewHandleId: HandleId | undefined;\n if (desc.depthStencilAttachment !== undefined) {\n const dsView = desc.depthStencilAttachment.view;\n if (dsView !== undefined && dsView !== null) {\n depthStencilViewHandleId = s.handleMap.get(dsView as object);\n }\n }\n pushEvent(s, {\n kind: 'beginRenderPass',\n cmdHandleId: cmdHId,\n passHandleId: passHId,\n desc: {\n colorAttachments: Array.from(desc.colorAttachments).map((attachment) =>\n attachment === null || attachment === undefined ? attachment : { ...attachment },\n ),\n ...(desc.depthStencilAttachment === undefined\n ? {}\n : { depthStencilAttachment: { ...desc.depthStencilAttachment } }),\n ...(desc.occlusionQuerySet === undefined\n ? {}\n : { occlusionQuerySet: desc.occlusionQuerySet }),\n ...(desc.timestampWrites === undefined ? {} : { timestampWrites: desc.timestampWrites }),\n ...(desc.maxDrawCount === undefined ? {} : { maxDrawCount: desc.maxDrawCount }),\n },\n colorAttachmentViewHandleIds,\n colorAttachmentResolveTargetHandleIds,\n depthStencilViewHandleId,\n });\n const realPass = realEnc.beginRenderPass(desc);\n return createRenderPassProxy(s, realPass, passHId);\n },\n beginComputePass(desc?: ComputePassDescriptor | undefined) {\n const passHId = allocHandleId('computePass');\n pushEvent(s, {\n kind: 'beginComputePass',\n cmdHandleId: cmdHId,\n passHandleId: passHId,\n desc: desc as Partial<GPUComputePassDescriptor> | undefined,\n });\n const realPass = realEnc.beginComputePass(desc);\n return createComputePassProxy(s, realPass, passHId);\n },\n // Passthrough copy/clear methods (event recording added where types permit)\n copyBufferToBuffer(...args: unknown[]) {\n // Overloaded: 3-arg or 5-arg\n if (typeof args[1] === 'number') {\n // 5-arg form: (source, sourceOffset, destination, destinationOffset, size)\n const sourceId = getHandleId(s, args[0] as object, 'buffer');\n const destinationId = getHandleId(s, args[2] as object, 'buffer');\n pushEvent(s, {\n kind: 'copyBufferToBuffer',\n cmdHandleId: cmdHId,\n sourceHandleId: sourceId,\n sourceOffset: args[1] as number,\n destinationHandleId: destinationId,\n destinationOffset: args[3] as number,\n size: args[4] as number,\n });\n (realEnc.copyBufferToBuffer as (...args: unknown[]) => void)(...args);\n } else {\n // 3-arg form: (source, destination, size?)\n const sourceId = getHandleId(s, args[0] as object, 'buffer');\n const destinationId = getHandleId(s, args[1] as object, 'buffer');\n const size = args[2] as number | undefined;\n pushEvent(s, {\n kind: 'copyBufferToBuffer',\n cmdHandleId: cmdHId,\n sourceHandleId: sourceId,\n sourceOffset: 0,\n destinationHandleId: destinationId,\n destinationOffset: 0,\n size: (size ?? 0) as number,\n });\n realEnc.copyBufferToBuffer(args[0] as Buffer, args[1] as Buffer, size);\n }\n },\n copyBufferToTexture(source, destination, copySize) {\n const bufId = getHandleId(s, (source as { buffer: object }).buffer as object, 'buffer');\n const texId = getHandleId(\n s,\n (destination as { texture: object }).texture as object,\n 'texture',\n );\n const dstPayload: Record<string, unknown> = { textureHandleId: texId };\n if (destination.mipLevel !== undefined) dstPayload.mipLevel = destination.mipLevel;\n if (destination.origin !== undefined) dstPayload.origin = destination.origin;\n if (destination.aspect !== undefined) dstPayload.aspect = destination.aspect;\n pushEvent(s, {\n kind: 'copyBufferToTexture',\n cmdHandleId: cmdHId,\n source: {\n bufferHandleId: bufId,\n offset: source.offset ?? 0,\n bytesPerRow: source.bytesPerRow ?? 0,\n rowsPerImage: source.rowsPerImage ?? 0,\n },\n destination: dstPayload as Omit<GPUTexelCopyTextureInfo, 'texture'> & {\n readonly textureHandleId: HandleId;\n },\n copySize,\n });\n realEnc.copyBufferToTexture(source, destination, copySize);\n },\n copyTextureToBuffer(source, destination, copySize) {\n const texId = getHandleId(s, (source as { texture: object }).texture as object, 'texture');\n const bufId = getHandleId(s, (destination as { buffer: object }).buffer as object, 'buffer');\n const srcPayload: Record<string, unknown> = { textureHandleId: texId };\n if (source.mipLevel !== undefined) srcPayload.mipLevel = source.mipLevel;\n if (source.origin !== undefined) srcPayload.origin = source.origin;\n if (source.aspect !== undefined) srcPayload.aspect = source.aspect;\n pushEvent(s, {\n kind: 'copyTextureToBuffer',\n cmdHandleId: cmdHId,\n source: srcPayload as Omit<GPUTexelCopyTextureInfo, 'texture'> & {\n readonly textureHandleId: HandleId;\n },\n destination: {\n bufferHandleId: bufId,\n offset: destination.offset ?? 0,\n bytesPerRow: destination.bytesPerRow ?? 0,\n rowsPerImage: destination.rowsPerImage ?? 0,\n },\n copySize,\n });\n realEnc.copyTextureToBuffer(source, destination, copySize);\n },\n copyTextureToTexture(source, destination, copySize) {\n const srcTexId = getHandleId(s, (source as { texture: object }).texture as object, 'texture');\n const dstTexId = getHandleId(\n s,\n (destination as { texture: object }).texture as object,\n 'texture',\n );\n const srcPayload: Record<string, unknown> = { textureHandleId: srcTexId };\n if (source.mipLevel !== undefined) srcPayload.mipLevel = source.mipLevel;\n if (source.origin !== undefined) srcPayload.origin = source.origin;\n if (source.aspect !== undefined) srcPayload.aspect = source.aspect;\n const dstPayload: Record<string, unknown> = { textureHandleId: dstTexId };\n if (destination.mipLevel !== undefined) dstPayload.mipLevel = destination.mipLevel;\n if (destination.origin !== undefined) dstPayload.origin = destination.origin;\n if (destination.aspect !== undefined) dstPayload.aspect = destination.aspect;\n pushEvent(s, {\n kind: 'copyTextureToTexture',\n cmdHandleId: cmdHId,\n source: srcPayload as Omit<GPUTexelCopyTextureInfo, 'texture'> & {\n readonly textureHandleId: HandleId;\n },\n destination: dstPayload as Omit<GPUTexelCopyTextureInfo, 'texture'> & {\n readonly textureHandleId: HandleId;\n },\n copySize,\n });\n realEnc.copyTextureToTexture(source, destination, copySize);\n },\n clearBuffer(buffer, offset, size) {\n const bufId = getHandleId(s, buffer as object, 'buffer');\n pushEvent(s, {\n kind: 'clearBuffer',\n cmdHandleId: cmdHId,\n handleId: bufId,\n offset,\n size,\n });\n realEnc.clearBuffer(buffer, offset, size);\n },\n resolveQuerySet(querySet, firstQuery, queryCount, destination, destinationOffset) {\n return realEnc.resolveQuerySet(\n querySet,\n firstQuery,\n queryCount,\n destination,\n destinationOffset,\n );\n },\n writeTimestamp(querySet, queryIndex) {\n realEnc.writeTimestamp(querySet, queryIndex);\n },\n pushDebugGroup(groupLabel) {\n pushEvent(s, { kind: 'pushDebugGroup', cmdHandleId: cmdHId, groupLabel });\n realEnc.pushDebugGroup(groupLabel);\n },\n popDebugGroup() {\n pushEvent(s, { kind: 'popDebugGroup', cmdHandleId: cmdHId });\n realEnc.popDebugGroup();\n },\n insertDebugMarker(markerLabel) {\n pushEvent(s, { kind: 'insertDebugMarker', cmdHandleId: cmdHId, markerLabel });\n realEnc.insertDebugMarker(markerLabel);\n },\n finish() {\n pushEvent(s, { kind: 'finish', cmdHandleId: cmdHId });\n const res = realEnc.finish();\n // I-2 fix-up (round 1, dawn smoke handle-graph integrity):\n // alias the resulting CommandBuffer object to the encoder's\n // cmdHandleId so subsequent queue.submit() handle lookups resolve\n // to the SAME id that the createCommandEncoder/finish event pair\n // declared. Without this, submit would register a fresh handleId\n // for the CommandBuffer object and the tape's handle graph\n // integrity check would reject the tape on deserialize.\n if (res.ok) {\n s.handleMap.set(res.value as object, cmdHId);\n }\n return res;\n },\n };\n}\n","// @forgeax/engine-rhi-debug/src/recorder/queue -- queue proxy owner.\n\nimport type { Buffer, CommandBuffer, RhiQueue } from '@forgeax/engine-rhi';\nimport type { RhiCallEventWriteTexture } from '../types';\nimport type { RecorderInternal } from './core';\nimport { getHandleId, pushEvent, shouldRecord, storeBlob } from './core';\n\nexport function createQueueProxy(s: RecorderInternal, realQueue: RhiQueue): RhiQueue {\n return {\n writeBuffer(\n buffer: Buffer,\n bufferOffset: number,\n data: ArrayBufferView | ArrayBuffer,\n dataOffset?: number,\n size?: number,\n ) {\n // Idle fast-path: when not recording, skip getHandleId + slice + the\n // storeBlob hash-and-double-copy entirely (they would only feed a\n // pushEvent that the state gate drops, and blobPool is reset on arm()).\n // Same-condition-as-pushEvent, so a recording call still records.\n if (!shouldRecord(s)) {\n return realQueue.writeBuffer(buffer, bufferOffset, data, dataOffset, size);\n }\n const hId = getHandleId(s, buffer as object, 'buffer');\n const raw = ArrayBuffer.isView(data)\n ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n : new Uint8Array(data as ArrayBuffer);\n const sz = size ?? raw.byteLength - (dataOffset ?? 0);\n const slice = raw.slice(dataOffset ?? 0, (dataOffset ?? 0) + sz);\n const dataHash = storeBlob(s, slice.buffer as ArrayBuffer);\n\n pushEvent(s, {\n kind: 'writeBuffer',\n handleId: hId,\n bufferOffset,\n dataHash,\n size: sz,\n });\n return realQueue.writeBuffer(buffer, bufferOffset, data, dataOffset, size);\n },\n\n writeTexture(destination, data, dataLayout, copySize) {\n // Idle fast-path (see writeBuffer): skip storeBlob hash+copy when the\n // recorded event would be dropped anyway.\n if (!shouldRecord(s)) {\n return realQueue.writeTexture(destination, data, dataLayout, copySize);\n }\n const hId = getHandleId(s, destination.texture as object, 'texture');\n const raw = ArrayBuffer.isView(data)\n ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n : new Uint8Array(data as ArrayBuffer);\n const dataHash = storeBlob(s, raw.buffer as ArrayBuffer);\n\n pushEvent(s, {\n kind: 'writeTexture',\n destination: {\n textureHandleId: hId,\n mipLevel: destination.mipLevel,\n origin: destination.origin,\n aspect: destination.aspect,\n },\n dataHash,\n dataLayout: {\n offset: dataLayout.offset,\n bytesPerRow: dataLayout.bytesPerRow,\n rowsPerImage: dataLayout.rowsPerImage,\n },\n size: copySize,\n } as RhiCallEventWriteTexture);\n return realQueue.writeTexture(destination, data, dataLayout, copySize);\n },\n\n copyExternalImageToTexture(source, destination, copySize) {\n if (!shouldRecord(s)) {\n return realQueue.copyExternalImageToTexture(source, destination, copySize);\n }\n const hId = getHandleId(s, destination.texture as object, 'texture');\n pushEvent(s, {\n kind: 'copyExternalImageToTexture',\n source: { origin: source.origin, flipY: source.flipY },\n destination: {\n textureHandleId: hId,\n mipLevel: destination.mipLevel,\n origin: destination.origin,\n aspect: destination.aspect,\n colorSpace: destination.colorSpace,\n premultipliedAlpha: destination.premultipliedAlpha,\n },\n copySize,\n });\n return realQueue.copyExternalImageToTexture(source, destination, copySize);\n },\n\n submit(commandBuffers: readonly CommandBuffer[]) {\n if (!shouldRecord(s)) {\n return realQueue.submit(commandBuffers);\n }\n const cmdHandleIds = commandBuffers.map((cb) =>\n getHandleId(s, cb as object, 'commandBuffer'),\n );\n pushEvent(s, { kind: 'submit', cmdHandleIds });\n return realQueue.submit(commandBuffers);\n },\n\n onSubmittedWorkDone() {\n return realQueue.onSubmittedWorkDone();\n },\n };\n}\n","// @forgeax/engine-rhi-debug/src/recorder/device -- device proxy owner.\n\n/// <reference types=\"@webgpu/types\" />\n\nimport type {\n BindGroupDescriptor,\n BindGroupLayoutDescriptor,\n Buffer,\n BufferDescriptor,\n CommandEncoderDescriptor,\n ComputePipelineDescriptor,\n PipelineLayoutDescriptor,\n QuerySet,\n QuerySetDescriptor,\n RenderPipelineDescriptor,\n RhiCommandEncoder,\n RhiDevice,\n SamplerDescriptor,\n Texture,\n TextureDescriptor,\n TextureViewDescriptor,\n} from '@forgeax/engine-rhi';\nimport { RhiError } from '@forgeax/engine-rhi';\nimport { err as makeErr, ok as makeOk, type Result } from '@forgeax/engine-types';\nimport type { HandleId, RhiBindResourceKind, RhiCallEvent } from '../types';\nimport type { RecorderInternal } from './core';\nimport {\n allocHandleId,\n ensureTextureCreateEvent,\n getHandleId,\n hasBootstrapDependency,\n isDepthOrStencilFormat,\n promoteBufferUsage,\n pushEvent,\n registerHandle,\n retainsCaptureBootstrap,\n shouldRecord,\n TEXTURE_USAGE_BINDING,\n TEXTURE_USAGE_COPY_DST,\n TEXTURE_USAGE_COPY_SRC,\n} from './core';\nimport { createCommandEncoderProxy } from './encoder';\nimport { createQueueProxy } from './queue';\n\nexport function createDeviceProxy(s: RecorderInternal, realDevice: RhiDevice): RhiDevice {\n const proxiedQueue = createQueueProxy(s, realDevice.queue);\n\n // Expose the real RhiDevice for standalone createShaderModule calls.\n // engine-rhi-webgpu's createShaderModule uses RAW_DEVICE_MAP (WeakMap)\n // to reverse-lookup the GPUDevice. The proxy is a different JS object\n // from the RhiDevice that makeRhiDevice registered, so WeakMap.get(proxy)\n // returns undefined and createShaderModule returns shader-compile-failed.\n // The _realDevice property lets callers pass the real RhiDevice directly.\n type RhiDeviceWithReal = RhiDevice & { _realDevice: RhiDevice };\n\n const d: RhiDeviceWithReal = {\n _realDevice: realDevice,\n\n get caps() {\n return realDevice.caps;\n },\n get features() {\n return realDevice.features;\n },\n get limits() {\n return realDevice.limits;\n },\n get queue() {\n return proxiedQueue;\n },\n get lost() {\n return realDevice.lost;\n },\n\n createBuffer(desc: BufferDescriptor) {\n // COPY_SRC promotion (D-5): every recorded resource must be readable\n // back via copyBufferToBuffer so snapshotResource can capture its GPU\n // bytes at frame-header time. Promote the live resource's usage too,\n // not just the recorded event — a buffer created without COPY_SRC is\n // an invalid copy source on the real device. Mappable buffers are\n // skipped (MAP_READ|COPY_SRC is invalid) — they are staging buffers,\n // never snapshot targets.\n const promotedUsage = promoteBufferUsage(desc.usage ?? 0);\n const res = realDevice.createBuffer({ ...desc, usage: promotedUsage });\n if (!res.ok) return res;\n const event: RhiCallEvent = {\n kind: 'createBuffer',\n handleId: '' as HandleId,\n desc: {\n size: desc.size ?? 0,\n usage: promotedUsage,\n mappedAtCreation: desc.mappedAtCreation,\n },\n };\n const bufResource = res.value as object;\n const bufHandleId = registerHandle(s, bufResource, 'buffer', event);\n s.descriptorTable.set(bufHandleId, {\n kind: 'buffer',\n size: desc.size ?? 0,\n usage: promotedUsage,\n resource: bufResource,\n });\n pushEvent(s, event);\n return res;\n },\n\n createTexture(desc: TextureDescriptor) {\n // Snapshot promotion (D-5): a texture needs COPY_SRC for GPU readback\n // and COPY_DST for queue.writeTexture bootstrap seeding. Promote the\n // live resource's usage as well as the recorded event's so replay can\n // restore the captured color bytes on a fresh device.\n const promotedUsage =\n (desc.usage ?? 0) |\n TEXTURE_USAGE_COPY_SRC |\n TEXTURE_USAGE_COPY_DST |\n (isDepthOrStencilFormat(desc.format) ? TEXTURE_USAGE_BINDING : 0);\n const res = realDevice.createTexture({ ...desc, usage: promotedUsage });\n if (!res.ok) return res;\n const event: RhiCallEvent = {\n kind: 'createTexture',\n handleId: '' as HandleId,\n desc: {\n size: desc.size ?? { width: 1, height: 1 },\n mipLevelCount: desc.mipLevelCount,\n sampleCount: desc.sampleCount,\n dimension: desc.dimension,\n format: desc.format ?? ('bgra8unorm' as GPUTextureFormat),\n usage: promotedUsage,\n viewFormats: desc.viewFormats,\n textureBindingViewDimension: desc.textureBindingViewDimension,\n },\n };\n const texResource = res.value as object;\n const texHandleId = registerHandle(s, texResource, 'texture', event);\n s.descriptorTable.set(texHandleId, {\n kind: 'texture',\n size: desc.size ?? { width: 1, height: 1 },\n format: desc.format ?? ('bgra8unorm' as GPUTextureFormat),\n ...(desc.sampleCount !== undefined ? { sampleCount: desc.sampleCount } : {}),\n ...(desc.mipLevelCount !== undefined ? { mipLevelCount: desc.mipLevelCount } : {}),\n usage: promotedUsage,\n resource: texResource,\n });\n pushEvent(s, event);\n return res;\n },\n\n createTextureView(texture: Texture, desc: TextureViewDescriptor) {\n const res = realDevice.createTextureView(texture, desc);\n if (!res.ok) return res;\n const srcId = getHandleId(s, texture as object, 'texture');\n const textureError = ensureTextureCreateEvent(s, texture as object, srcId, desc.format);\n if (textureError !== undefined) {\n return makeErr(\n new RhiError({\n code: 'webgpu-runtime-error',\n expected: 'texture-view creation to remain representable in the capture graph',\n hint: textureError.hint,\n detail: {\n error: {\n code: textureError.code,\n message: textureError.hint,\n name: 'RhiDebugError',\n },\n },\n }),\n );\n }\n const viewId = registerHandle(s, res.value as object, 'textureView');\n s.textureViewHandleMap.set(res.value, viewId);\n\n const event: RhiCallEvent = {\n kind: 'createTextureView',\n sourceHandleId: srcId,\n resultHandleId: viewId,\n desc: {\n format: desc.format,\n dimension: desc.dimension,\n usage: desc.usage,\n aspect: desc.aspect,\n baseMipLevel: desc.baseMipLevel,\n mipLevelCount: desc.mipLevelCount,\n baseArrayLayer: desc.baseArrayLayer,\n arrayLayerCount: desc.arrayLayerCount,\n },\n };\n s.bootstrapCreates.set(viewId, event);\n pushEvent(s, event);\n return res;\n },\n\n createSampler(desc?: SamplerDescriptor | undefined) {\n const res = realDevice.createSampler(desc);\n if (!res.ok) return res;\n const event: RhiCallEvent = {\n kind: 'createSampler',\n handleId: '' as HandleId,\n desc: desc as Partial<GPUSamplerDescriptor> | undefined,\n };\n registerHandle(s, res.value as object, 'sampler', event);\n pushEvent(s, event);\n return res;\n },\n\n createBindGroupLayout(desc: BindGroupLayoutDescriptor) {\n const res = realDevice.createBindGroupLayout(desc);\n if (!res.ok) return res;\n const event: RhiCallEvent = {\n kind: 'createBindGroupLayout',\n handleId: '' as HandleId,\n desc: { label: desc.label, entries: desc.entries ?? [] },\n };\n registerHandle(s, res.value as object, 'bindGroupLayout', event);\n pushEvent(s, event);\n return res;\n },\n\n createBindGroup(desc: BindGroupDescriptor) {\n const res = realDevice.createBindGroup(desc);\n if (!res.ok) return res;\n const layoutId = getHandleId(s, desc.layout as object, 'bindGroupLayout');\n const entries = Array.from(desc.entries);\n const resourceKinds: RhiBindResourceKind[] = entries.map((e) => e.resource.kind);\n const resourceHandleIds: HandleId[] = entries.map((e) => {\n const r = e.resource;\n switch (r.kind) {\n case 'sampler':\n return getHandleId(s, r.value as object, 'sampler');\n case 'buffer':\n return getHandleId(s, r.value.buffer as object, 'buffer');\n case 'textureView':\n return getHandleId(s, r.value as object, 'textureView');\n case 'externalTexture':\n return 'externalTexture:unknown';\n }\n return 'externalTexture:unknown' as HandleId;\n });\n const event: RhiCallEvent = {\n kind: 'createBindGroup',\n handleId: '' as HandleId,\n layoutHandleId: layoutId,\n entries: entries.map((e, idx) => {\n const entry: {\n binding: number;\n resourceKind: RhiBindResourceKind;\n bufferOffset?: number;\n bufferSize?: number;\n } = {\n binding: e.binding,\n resourceKind: resourceKinds[idx] as RhiBindResourceKind,\n };\n // Capture the bound sub-range for buffer entries so a\n // dynamic-offset slice (e.g. a 256 B view of a 256 KiB pool)\n // replays as that slice, not the whole buffer.\n if (e.resource.kind === 'buffer') {\n const { offset, size } = e.resource.value;\n if (offset !== undefined) entry.bufferOffset = offset;\n if (size !== undefined) entry.bufferSize = size;\n }\n return entry;\n }),\n resourceHandleIds,\n };\n registerHandle(s, res.value as object, 'bindGroup', event);\n pushEvent(s, event);\n return res;\n },\n\n createPipelineLayout(desc: PipelineLayoutDescriptor) {\n const res = realDevice.createPipelineLayout(desc);\n if (!res.ok) return res;\n const bglIds = Array.from(desc.bindGroupLayouts).map((bgl) =>\n getHandleId(s, bgl as object, 'bindGroupLayout'),\n );\n const event: RhiCallEvent = {\n kind: 'createPipelineLayout',\n handleId: '' as HandleId,\n bglHandleIds: bglIds,\n };\n registerHandle(s, res.value as object, 'pipelineLayout', event);\n pushEvent(s, event);\n return res;\n },\n\n createRenderPipeline(desc: RenderPipelineDescriptor) {\n const res = realDevice.createRenderPipeline(desc);\n if (!res.ok) return res;\n let layoutId: HandleId;\n if (typeof desc.layout === 'string') {\n layoutId = 'layout:auto';\n } else {\n layoutId = getHandleId(s, desc.layout as object, 'pipelineLayout');\n }\n let vertexShaderModuleHandleId: HandleId | undefined;\n if (desc.vertex !== undefined) {\n vertexShaderModuleHandleId = getHandleId(s, desc.vertex.module as object, 'shaderModule');\n }\n let fragmentShaderModuleHandleId: HandleId | undefined;\n if (desc.fragment !== undefined) {\n fragmentShaderModuleHandleId = getHandleId(\n s,\n desc.fragment.module as object,\n 'shaderModule',\n );\n }\n const { module: _vertexModule, constants: vertexConstants, ...vertexFields } = desc.vertex;\n const recordedVertex =\n vertexConstants === undefined\n ? vertexFields\n : { ...vertexFields, constants: vertexConstants };\n const recordedFragment =\n desc.fragment === undefined\n ? undefined\n : (() => {\n const {\n module: _fragmentModule,\n constants: fragmentConstants,\n ...fragmentFields\n } = desc.fragment;\n return fragmentConstants === undefined\n ? fragmentFields\n : { ...fragmentFields, constants: fragmentConstants };\n })();\n const event: RhiCallEvent = {\n kind: 'createRenderPipeline',\n handleId: '' as HandleId,\n desc: {\n vertex: recordedVertex,\n primitive: desc.primitive,\n depthStencil: desc.depthStencil,\n multisample: desc.multisample,\n ...(recordedFragment === undefined ? {} : { fragment: recordedFragment }),\n },\n layoutHandleId: layoutId,\n vertexShaderModuleHandleId,\n fragmentShaderModuleHandleId,\n };\n registerHandle(s, res.value as object, 'renderPipeline', event);\n pushEvent(s, event);\n return res;\n },\n\n createComputePipeline(desc: ComputePipelineDescriptor) {\n const res = realDevice.createComputePipeline(desc);\n if (!res.ok) return res;\n let layoutId: HandleId;\n if (typeof desc.layout === 'string') {\n layoutId = 'layout:auto';\n } else {\n layoutId = getHandleId(s, desc.layout as object, 'pipelineLayout');\n }\n const computeShaderModuleHandleId = getHandleId(\n s,\n desc.compute.module as object,\n 'shaderModule',\n );\n const event: RhiCallEvent = {\n kind: 'createComputePipeline',\n handleId: '' as HandleId,\n desc: { compute: JSON.parse(JSON.stringify(desc.compute)) },\n layoutHandleId: layoutId,\n computeShaderModuleHandleId,\n };\n registerHandle(s, res.value as object, 'computePipeline', event);\n pushEvent(s, event);\n return res;\n },\n\n createQuerySet(desc: QuerySetDescriptor) {\n return realDevice.createQuerySet(desc);\n },\n\n destroyBuffer(buf: Buffer) {\n const hId = s.handleMap.get(buf as object);\n const res = realDevice.destroyBuffer(buf);\n if (!res.ok) return res;\n if (hId !== undefined) {\n s.descriptorTable.delete(hId);\n // Bound bootstrapCreates growth: an idle-destroyed resource can never\n // be referenced by a future frame's events, so drop its create event.\n // Only when NOT recording — mid-capture, an earlier frame event may\n // still reference this handle, and the tape prefix needs its create\n // event to stay self-contained (tape-invalid otherwise).\n //\n // Known bounded residual: a resource destroyed DURING a capture keeps\n // its bootstrapCreates entry forever — the entry is only ever revisited\n // by another destroy* of the SAME handle, which can't recur after the\n // resource is gone. This leaks one create event per resource that is\n // both created and destroyed inside a recording window (a narrow set;\n // most resources are long-lived). Fixing it needs a defer-delete list\n // swept at the next arm() — deliberately not added: the extra state\n // costs more than the leak it plugs (see PR discussion).\n //\n // Separate, wider residual: bootstrapCreates entries for\n // textureView / bindGroup / pipeline / sampler are NEVER pruned,\n // because RhiDevice exposes destroy only for buffer / texture -- a\n // faithful mirror of WebGPU, whose spec puts .destroy() solely on\n // GPUBuffer / GPUTexture (the objects holding large, eagerly-freeable\n // backing memory); views / bind groups / pipelines / samplers are\n // lightweight reference objects left to GC. So there is no destroy\n // signal to hook for them. An app that rebuilds these per frame grows\n // bootstrapCreates under a long idle run. The GC-aligned fix is a\n // WeakRef + FinalizationRegistry over the create-event objects (same\n // spirit as handleMap's WeakMap, but keyed by handleId so it needs the\n // WeakRef wrapper) -- a finalization-semantics change, out of scope here.\n if (\n !retainsCaptureBootstrap(s) &&\n !s.snapshotSeededHandles.has(hId) &&\n !hasBootstrapDependency(s, hId)\n ) {\n s.bootstrapCreates.delete(hId);\n }\n pushEvent(s, { kind: 'destroyBuffer', handleId: hId });\n }\n return res;\n },\n\n destroyQuerySet(querySet: QuerySet) {\n return realDevice.destroyQuerySet(querySet);\n },\n\n destroyTexture(tex: Texture) {\n const hId = s.handleMap.get(tex as object);\n const res = realDevice.destroyTexture(tex);\n if (!res.ok) return res;\n if (hId !== undefined) {\n s.descriptorTable.delete(hId);\n // Same gate + same bounded residual as destroyBuffer above.\n if (\n !retainsCaptureBootstrap(s) &&\n !s.snapshotSeededHandles.has(hId) &&\n !hasBootstrapDependency(s, hId)\n ) {\n s.bootstrapCreates.delete(hId);\n }\n pushEvent(s, { kind: 'destroyTexture', handleId: hId });\n }\n return res;\n },\n\n createCommandEncoder(desc?: CommandEncoderDescriptor | undefined) {\n const res = realDevice.createCommandEncoder(desc);\n if (!res.ok) return res;\n // Idle fast-path: return the real (un-proxied) encoder when not\n // recording. One gate here elides the proxy wrapper AND every\n // beginRenderPass/draw/setBindGroup/copy* call that would otherwise\n // route through proxyCmdEncoder + proxyRenderPass only to be dropped\n // by the pushEvent gate. Safe because a frame body runs synchronously\n // in one rAF callback: createCommandEncoder -> passes -> queue.submit\n // all observe the same recorder state (arm() only fires between frames),\n // so an idle-created encoder's whole frame is consistently un-recorded,\n // matching the now-gated queue.submit which skips its handle lookup.\n if (!shouldRecord(s)) {\n return res;\n }\n const cmdId = allocHandleId('commandEncoder');\n pushEvent(s, {\n kind: 'createCommandEncoder',\n cmdHandleId: cmdId,\n desc: desc as Partial<GPUCommandEncoderDescriptor> | undefined,\n });\n const proxyEnc = createCommandEncoderProxy(s, res.value, cmdId);\n return makeOk(proxyEnc as RhiCommandEncoder) as Result<\n RhiCommandEncoder,\n import('@forgeax/engine-rhi').RhiError\n >;\n },\n };\n return d;\n}\n\n// --------------------------------------------------\n// wrap RhiInstance\n// --------------------------------------------------\n","// @forgeax/engine-rhi-debug/src/recorder/lifecycle -- capture state and snapshot lifecycle.\n\n/// <reference types=\"@webgpu/types\" />\n\nimport type { Result, RhiDevice } from '@forgeax/engine-rhi';\nimport { err as makeErr, ok as makeOk } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport {\n readbackBufferBytes,\n readbackBufferBytesBatch,\n readbackTexturePixels,\n readbackTexturePixelsBatch,\n} from '../readback';\nimport { computeTextureLayout, projectTextureExtent } from '../texel-layout';\nimport type { HandleId, RhiCallEvent, Tape } from '../types';\nimport {\n _collectFrameReferencedHandleIds,\n _computeClosure,\n _getCreateEventReferencedHandleIds,\n _topoSortClosure,\n} from './closure';\nimport {\n isDepthOrStencilFormat,\n isMappableBuffer,\n isSnapshottableColorTexture,\n pushSnapshotEvent,\n type RecorderInternal,\n RecorderState,\n reconcileSwapchainViewFormats,\n SNAPSHOT_RESOURCE_BATCH_SIZE,\n SNAPSHOT_TIMEOUT_MS,\n snapshotStageOf,\n snapshotTimeoutDetail,\n storeBlob,\n TAPE_FORMAT_VERSION,\n} from './core';\n\nexport function createRecorderLifecycle(s: RecorderInternal) {\n function arm(frames: number): Result<void, RhiDebugError> {\n if (\n s.state === RecorderState.Armed ||\n s.state === RecorderState.Snapshotting ||\n s.state === RecorderState.Recording ||\n s.state === RecorderState.Finalizing\n ) {\n return makeErr(\n createRhiDebugError('capture-busy', {\n stage: 'capture',\n cause: 'arm() called while the recorder is already capturing',\n }),\n );\n }\n if (s.state === RecorderState.Error) {\n return makeErr(\n createRhiDebugError('capture-unavailable', {\n stage: 'capture',\n cause: 'the recorder is in an error state; dispose the failed capture before re-arming',\n }),\n );\n }\n\n s.state = RecorderState.Armed;\n // A previous bounded snapshot may still be unwinding after its timeout.\n // Its generation fence prevents stale cleanup from touching this capture;\n // reset the suppression latch here so the new capture can record normally.\n s._skipRecord = false;\n s.snapshotGeneration += 1;\n s.requestedFrames = frames;\n s.recordedFrames = 0;\n s.events = [];\n s.blobPool = new Map();\n s.snapshotSeededHandles.clear();\n s.snapshotProgress = undefined;\n s.frameIdx = 0;\n s.bootstrap = true;\n s.valid = true;\n return makeOk(undefined);\n }\n\n function onFrameEnd(): void {\n if (s.state === RecorderState.Idle) {\n s.frameIdx++;\n s.bootstrap = false;\n return;\n }\n\n // Snapshotting = the async frame-header snapshot loop is mid-flight. Its\n // readbacks await between resources, so the host rAF loop CAN fire\n // onFrameEnd while the loop is still pushing initialData events. If we let\n // that tick advance the state machine (Recording -> frameMark -> Finalizing\n // -> Idle), the still-running snapshot loop's later pushEvent() calls hit\n // the Idle gate and are silently dropped -- the exact race that lost every\n // texture initialData (material default textures all-zero -> black cube).\n // Ignore the tick entirely: snapshotAllLiveResources() sets Recording when\n // it completes, and the NEXT onFrameEnd records the real frame.\n if (s.state === RecorderState.Snapshotting) {\n s.bootstrap = false;\n return;\n }\n\n // Armed at frame end -> recording. This is the fallback for hosts that\n // never call snapshotAllLiveResources() (the snapshot loop is opt-in at the\n // seam); they record straight from Armed with no frame-header snapshot.\n if (s.state === RecorderState.Armed) {\n s.state = RecorderState.Recording;\n s.bootstrap = false;\n }\n\n if (s.state === RecorderState.Recording) {\n // Emit frameMark at end of this frame\n s.events.push({ kind: 'frameMark', frameIdx: s.frameIdx });\n s.recordedFrames++;\n s.frameIdx++;\n\n if (s.recordedFrames >= s.requestedFrames) {\n s.state = RecorderState.Finalizing;\n if (s.onFrameEndUnsubscribe) {\n s.onFrameEndUnsubscribe();\n s.onFrameEndUnsubscribe = undefined;\n }\n s.state = RecorderState.Idle;\n }\n return;\n }\n\n // finalizing or error: no-op\n s.frameIdx++;\n }\n\n function getTape(): Tape | RhiDebugError | undefined {\n if (s.events.length === 0) return undefined;\n\n reconcileSwapchainViewFormats(s);\n\n // Pre-scan s.events for create* declarations: handleIds whose\n // create event is already carried by the frame events (transient\n // per-frame resources like swapchain textures, command encoders).\n // These handles do NOT need bootstrap prefixing -- they were born\n // during the recorded frame and their create event is in s.events.\n // Collect handleIds that are directly declared by create* events in s.events.\n // Only include the handleId field of the create event itself — NOT backward-refs\n // (layoutHandleId, resourceHandleIds, etc.) from _getCreateEventReferencedHandleIds.\n //\n // Backward-refs from in-frame create events often point to persistent resources\n // (buffers, textures, pipelines) that were created before arm(). Including them\n // in inFrameHandleIds would exclude those resources from bootstrap prefixing,\n // causing tapes to be non-self-contained (missing create* events for early handles).\n //\n // Swapchain textures that have no createTexture event are handled elsewhere:\n // createTextureView (line 1237) detects missing bootstrap entries and constructs\n // faithful createTexture events at capture time, so they are already in both\n // bootstrapCreates and s.events.\n const inFrameHandleIds = new Set<HandleId>();\n for (const e of s.events) {\n // create* events declare handleId (or resultHandleId for createTextureView).\n if (\n e.kind.startsWith('create') &&\n 'handleId' in e &&\n typeof (e as { handleId: unknown }).handleId === 'string'\n ) {\n inFrameHandleIds.add((e as { handleId: HandleId }).handleId);\n }\n // createTextureView declares the result via resultHandleId.\n if (\n e.kind === 'createTextureView' &&\n 'resultHandleId' in e &&\n typeof (e as { resultHandleId: unknown }).resultHandleId === 'string'\n ) {\n inFrameHandleIds.add((e as { resultHandleId: HandleId }).resultHandleId);\n }\n // createCommandEncoder declares the cmd via cmdHandleId.\n if (\n e.kind === 'createCommandEncoder' &&\n 'cmdHandleId' in e &&\n typeof (e as { cmdHandleId: unknown }).cmdHandleId === 'string'\n ) {\n inFrameHandleIds.add((e as { cmdHandleId: HandleId }).cmdHandleId);\n }\n // beginRenderPass / beginComputePass declare passHandleId.\n if (\n (e.kind === 'beginRenderPass' || e.kind === 'beginComputePass') &&\n 'passHandleId' in e &&\n typeof (e as { passHandleId: unknown }).passHandleId === 'string'\n ) {\n inFrameHandleIds.add((e as { passHandleId: HandleId }).passHandleId);\n }\n }\n\n // Collect frame-referenced handleIds from per-frame events.\n const allFrameHandleIds = _collectFrameReferencedHandleIds(s.events);\n\n // Exclude handles whose create event is already in s.events:\n // only compute bootstrap closure for handles that need prefixing.\n const prefixSeedIds = new Set<HandleId>();\n for (const hId of allFrameHandleIds) {\n if (!inFrameHandleIds.has(hId)) {\n prefixSeedIds.add(hId);\n }\n }\n\n // Transitive closure from bootstrapCreates\n const { closure, missing } = _computeClosure(\n prefixSeedIds,\n s.bootstrapCreates,\n inFrameHandleIds,\n );\n\n if (missing !== null) {\n // Missing create — return error (hint refined in w9)\n const referencingEventIndex = s.events.findIndex((event) => {\n try {\n return JSON.stringify(event).includes(missing);\n } catch {\n return false;\n }\n });\n const referencingEventKind =\n referencingEventIndex >= 0 ? s.events[referencingEventIndex]?.kind : undefined;\n const referencingCreate = [...s.bootstrapCreates.entries()].find(([, event]) =>\n _getCreateEventReferencedHandleIds(event).includes(missing),\n );\n return createRhiDebugError('tape-invalid', {\n stage: 'validate',\n cause: `handleId '${missing}' has no create event in bootstrap table; referenced by event ${referencingEventIndex} (${referencingEventKind ?? 'unknown'}) and bootstrap ${referencingCreate?.[0] ?? 'unknown'} (${referencingCreate?.[1].kind ?? 'unknown'})`,\n handleId: missing,\n eventIndex: referencingEventIndex,\n });\n }\n\n // Topological sort: dependencies (leaf resources) before dependents\n const prefixEvents: RhiCallEvent[] = _topoSortClosure(closure, s.bootstrapCreates);\n\n // dedup: only prefix create events not already in s.events.\n const dedupedPrefx = prefixEvents.filter((e) => {\n if ('handleId' in e && typeof (e as { handleId: unknown }).handleId === 'string') {\n return !inFrameHandleIds.has((e as { handleId: HandleId }).handleId);\n }\n return true;\n });\n\n return {\n formatVersion: TAPE_FORMAT_VERSION,\n rhiCapsRecorded: s.recordedCaps ?? {\n canvasFormat: 'bgra8unorm' as GPUTextureFormat,\n rgba16floatRenderable: false,\n float32Filterable: false,\n textureCompressionBc: false,\n textureCompressionEtc2: false,\n textureCompressionAstc: false,\n storageBuffer: false,\n timestampQuery: false,\n },\n events: [...dedupedPrefx, ...s.events],\n blobPool: s.blobPool,\n };\n }\n\n function getState(): string {\n return s.state;\n }\n function getEvents(): readonly RhiCallEvent[] {\n return s.events;\n }\n function getBlobPool(): ReadonlyMap<string, ArrayBuffer> {\n return s.blobPool;\n }\n\n function transitionToError(): void {\n if (\n s.state === RecorderState.Recording ||\n s.state === RecorderState.Armed ||\n s.state === RecorderState.Snapshotting\n ) {\n s.state = RecorderState.Error;\n s.snapshotGeneration += 1;\n s._skipRecord = false;\n s.valid = false;\n if (s.onFrameEndUnsubscribe) {\n s.onFrameEndUnsubscribe();\n s.onFrameEndUnsubscribe = undefined;\n }\n }\n }\n\n function disposeError(): void {\n if (s.state === RecorderState.Error) {\n s.state = RecorderState.Idle;\n s.snapshotGeneration += 1;\n s._skipRecord = false;\n s.events = [];\n s.blobPool = new Map();\n s.valid = true;\n s.snapshotProgress = undefined;\n }\n }\n\n /**\n * Snapshot a resource's GPU bytes into the tape as an initialData event.\n *\n * Reads the resource shape from the descriptor registry, copies the bytes\n * back from the GPU via readbackBufferBytes (buffer) / readbackTexturePixels\n * (texture), stores them in the blobPool (djb2 hash-dedup), and pushes an\n * `initialData` event into the stream. The snapshot's own copy/submit are\n * wrapped in `_skipRecord = true` so they never leak into the tape event\n * stream (D-8 isolation).\n *\n * Async because the GPU readback chain (copyToBuffer -> submit ->\n * onSubmittedWorkDone -> mapAsync) is inherently asynchronous; the M1 stub\n * locked a sync signature, but no caller existed yet — the frame-header loop\n * added here is the first consumer (Change stance: optimal > compatible).\n *\n * Returns Result with {handleId, dataHash} on success, or\n * capture-snapshot-failed (with structured snapshot detail) on a\n * failure, so AI users can switch-exhaustive narrow the code (D-3).\n */\n async function snapshotResource(\n handleId: HandleId,\n snapshotGeneration?: number,\n ): Promise<Result<{ handleId: HandleId; dataHash: string }, RhiDebugError>> {\n type SnapshotResult = Result<{ handleId: HandleId; dataHash: string }, RhiDebugError>;\n const fail = (\n stage: 'copy' | 'map' | 'store',\n _expected: string,\n hint: string,\n ): SnapshotResult =>\n makeErr(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: `${stage}: ${hint}`,\n handleId,\n }),\n );\n\n const entry = s.descriptorTable.get(handleId);\n if (entry === undefined) {\n return fail(\n 'copy',\n 'handleId present in descriptor registry',\n `no live resource registered for handleId '${handleId}'; it may have been destroyed or never created through the recorder proxy`,\n );\n }\n\n const device = s.capturedDevice;\n if (device === undefined) {\n return fail(\n 'copy',\n 'a captured RhiDevice to drive GPU readback',\n 'no device has been acquired through the recorder proxy yet; drive requestAdapter().requestDevice() before snapshotting',\n );\n }\n\n // Resolve the unwrapped real device — readback issues copy/submit/mapAsync\n // through it. The proxy device would re-record those calls were it not for\n // the _skipRecord guard below; using the real device sidesteps the proxy\n // entirely for the readback staging buffer.\n const realDevice = (device as RhiDevice & { _realDevice?: RhiDevice })._realDevice ?? device;\n const snapshotIsActive = () =>\n snapshotGeneration === undefined ||\n (s.state === RecorderState.Snapshotting && s.snapshotGeneration === snapshotGeneration);\n const cancelled = () =>\n makeErr(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause:\n 'snapshot was cancelled after a timeout or recorder error; discard this capture and retry',\n handleId,\n }),\n );\n\n let bytes: ArrayBuffer;\n const prevSkip = s._skipRecord;\n s._skipRecord = true;\n try {\n if (entry.kind === 'buffer') {\n const size = typeof entry.size === 'number' ? entry.size : 0;\n const res = await readbackBufferBytes(realDevice, entry.resource, size);\n if (!res.ok) return fail(snapshotStageOf(res.error), res.error.expected, res.error.hint);\n if (!snapshotIsActive()) return cancelled();\n bytes = res.value;\n } else {\n const { width, height, layerCount } = projectTextureExtent(entry.size);\n const layout = computeTextureLayout(\n entry.format,\n width,\n height,\n layerCount,\n entry.mipLevelCount ?? 1,\n );\n if (layout === undefined) {\n // Should not happen: the snapshot loop's isSnapshottableColorTexture\n // gate already excludes formats with no texel size. Fail fast rather\n // than emit a corrupt seed.\n return fail(\n 'copy',\n 'a snapshottable color format with a known texel size',\n `format '${entry.format}' has no byte layout; the snapshot gate should have skipped it`,\n );\n }\n try {\n // Read every (layer, mip) subresource and concatenate tight into one\n // blob in the canonical order computeTextureLayout defines; the seed\n // side walks the same layout to writeTexture each slice back.\n const blob = new Uint8Array(layout.totalBytes);\n for (const slice of layout.slices) {\n if (!snapshotIsActive()) return cancelled();\n const sub = await readbackTexturePixels(\n realDevice,\n entry.resource,\n slice.width,\n slice.height,\n {\n bytesPerBlock: layout.bytesPerBlock,\n blockWidth: layout.blockWidth,\n blockHeight: layout.blockHeight,\n mipLevel: slice.mip,\n baseArrayLayer: slice.layer,\n },\n );\n if (!snapshotIsActive()) return cancelled();\n blob.set(sub.subarray(0, slice.byteLength), slice.byteOffset);\n }\n bytes = blob.buffer.slice(\n blob.byteOffset,\n blob.byteOffset + blob.byteLength,\n ) as ArrayBuffer;\n } catch (e) {\n return fail(\n 'copy',\n 'texture GPU byte readback to succeed',\n `readbackTexturePixels failed: ${String(e)}`,\n );\n }\n }\n } finally {\n // A retry may begin before a timed-out readback promise settles. Do not\n // let the stale generation restore its old suppression bit over the new\n // capture's active snapshot; only the generation that acquired it may\n // release it.\n if (snapshotGeneration === undefined || s.snapshotGeneration === snapshotGeneration) {\n s._skipRecord = prevSkip;\n }\n }\n\n if (!snapshotIsActive()) return cancelled();\n\n // storeBlob: djb2 hash-dedup into the unified blobPool (D-1, no separate\n // init-data pool). Reuses the same tag space as writeBuffer/writeTexture.\n let dataHash: string;\n try {\n dataHash = storeBlob(s, bytes);\n } catch (e) {\n return fail(\n 'store',\n 'storeBlob to hash + insert the snapshot bytes',\n `storeBlob failed: ${String(e)}`,\n );\n }\n\n pushSnapshotEvent(s, { kind: 'initialData', handleId, dataHash });\n s.snapshotSeededHandles.add(handleId);\n return makeOk({ handleId, dataHash });\n }\n\n /**\n * Frame-header snapshot loop (D-5, C-3, C-4): with the recorder in the\n * Snapshotting middle state, await all submitted work, then snapshot every\n * live resource in the descriptor registry (full-table dump, no size\n * threshold / allowlist trimming — that for-loop is the single Phase 2\n * policy seam, OOS-4 / OOS-5). On full success the recorder advances to\n * Recording; a single snapshot failure aborts with its Result so the\n * caller fails fast (architecture §5) rather than recording a partial seed.\n */\n async function snapshotAllLiveResources(\n timeoutMs = SNAPSHOT_TIMEOUT_MS,\n ): Promise<Result<void, RhiDebugError>> {\n if (s.state !== RecorderState.Armed && s.state !== RecorderState.Snapshotting) {\n return makeErr(\n createRhiDebugError('capture-unavailable', {\n stage: 'capture',\n cause: `snapshotAllLiveResources called while recorder is in '${s.state}' state; arm() before the frame-header snapshot`,\n }),\n );\n }\n const snapshotGeneration = s.snapshotGeneration;\n s.state = RecorderState.Snapshotting;\n\n const timeoutError = () =>\n createRhiDebugError('capture-timeout', snapshotTimeoutDetail(s.snapshotProgress, timeoutMs));\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeoutResult = new Promise<Result<void, RhiDebugError>>((resolve) => {\n timer = setTimeout(() => {\n // The caller may have timed out first, disposed the failed capture,\n // and already started a new generation. A late timer from that stale\n // snapshot must not poison the retry that now owns the recorder.\n if (s.state === RecorderState.Snapshotting && s.snapshotGeneration === snapshotGeneration) {\n transitionToError();\n }\n resolve(makeErr(timeoutError()));\n }, timeoutMs);\n });\n\n try {\n const result = await Promise.race([\n runSnapshotAllLiveResources(snapshotGeneration),\n timeoutResult,\n ]);\n if (\n !result.ok &&\n s.state === RecorderState.Snapshotting &&\n s.snapshotGeneration === snapshotGeneration\n ) {\n transitionToError();\n }\n return result;\n } catch (error) {\n if (s.state === RecorderState.Snapshotting && s.snapshotGeneration === snapshotGeneration) {\n transitionToError();\n }\n throw error;\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n }\n }\n\n async function runSnapshotAllLiveResources(\n snapshotGeneration: number,\n ): Promise<Result<void, RhiDebugError>> {\n s.snapshotProgress = {\n startedAt: Date.now(),\n stage: 'queue-drain',\n totalResources: s.descriptorTable.size,\n completedResources: 0,\n skippedResources: 0,\n currentHandleId: null,\n currentKind: null,\n currentSizeBytes: null,\n };\n\n // C-3 conservative timing: drain queued work so snapshots read frame-outside\n // / historical content, never a half-written in-frame value (A-2).\n const device = s.capturedDevice;\n const realDevice =\n device === undefined\n ? undefined\n : ((device as RhiDevice & { _realDevice?: RhiDevice })._realDevice ?? device);\n if (realDevice !== undefined) {\n const prevSkip = s._skipRecord;\n s._skipRecord = true;\n try {\n await realDevice.queue.onSubmittedWorkDone();\n } finally {\n if (s.snapshotGeneration === snapshotGeneration) s._skipRecord = prevSkip;\n }\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = { ...s.snapshotProgress, stage: 'resource-readback' };\n }\n if (s.state !== RecorderState.Snapshotting || s.snapshotGeneration !== snapshotGeneration) {\n return makeErr(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: 'snapshot was cancelled while queued GPU work was draining',\n }),\n );\n }\n }\n\n const liveEntries = [...s.descriptorTable.entries()];\n const candidates = liveEntries.filter(([handleId, entry]) => {\n // Mappable buffers are staging scratch, not seedable authored resources.\n if (entry.kind === 'buffer' && isMappableBuffer(entry.usage)) {\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n skippedResources: s.snapshotProgress.skippedResources + 1,\n };\n }\n return false;\n }\n // Depth/stencil and multisample textures cannot be faithfully re-seeded.\n if (\n entry.kind === 'texture' &&\n (isDepthOrStencilFormat(entry.format) ||\n !isSnapshottableColorTexture(entry.format, entry.size, entry.sampleCount))\n ) {\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n skippedResources: s.snapshotProgress.skippedResources + 1,\n };\n }\n return false;\n }\n // Preserve the existing transient-texture policy: a texture destroyed\n // before its turn is skipped, while a resource already admitted to a\n // batch retains its seed even if it is released during that batch.\n if (entry.kind === 'texture' && !s.descriptorTable.has(handleId)) {\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n skippedResources: s.snapshotProgress.skippedResources + 1,\n };\n }\n return false;\n }\n return true;\n });\n\n const snapshotIsActive = () =>\n s.state === RecorderState.Snapshotting && s.snapshotGeneration === snapshotGeneration;\n const cancelledResult = () =>\n makeErr(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: 'snapshot was cancelled while live resources were being seeded',\n }),\n );\n\n // No captured device is an existing error path for snapshotResource. Keep\n // it serial and deterministic rather than manufacturing a batch surface.\n if (realDevice === undefined) {\n for (const [handleId, entry] of candidates) {\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n stage: 'resource-readback',\n currentHandleId: handleId,\n currentKind: entry.kind,\n currentSizeBytes:\n entry.kind === 'buffer' && typeof entry.size === 'number' ? entry.size : null,\n };\n }\n const result = await snapshotResource(handleId, snapshotGeneration);\n if (!result.ok) return result;\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n completedResources: s.snapshotProgress.completedResources + 1,\n currentHandleId: null,\n currentKind: null,\n currentSizeBytes: null,\n };\n }\n }\n } else {\n let offset = 0;\n while (offset < candidates.length) {\n const first = candidates[offset];\n if (first === undefined) break;\n const kind = first[1].kind;\n const batchEntries: typeof candidates = [];\n while (\n offset < candidates.length &&\n batchEntries.length < SNAPSHOT_RESOURCE_BATCH_SIZE &&\n candidates[offset]?.[1].kind === kind\n ) {\n const candidate = candidates[offset];\n if (candidate !== undefined) batchEntries.push(candidate);\n offset += 1;\n }\n\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n stage: 'resource-readback',\n currentHandleId: batchEntries[0]?.[0] ?? null,\n currentKind: kind,\n currentSizeBytes:\n kind === 'buffer' && typeof batchEntries[0]?.[1].size === 'number'\n ? batchEntries[0][1].size\n : null,\n };\n }\n\n if (kind === 'buffer') {\n const batch = await readbackBufferBytesBatch(\n realDevice,\n batchEntries.map(([handleId, entry]) => ({\n handleId,\n buffer: entry.resource,\n size: typeof entry.size === 'number' ? entry.size : 0,\n })),\n {\n onResourceStart: (handleId) => {\n const entry = s.descriptorTable.get(handleId);\n if (s.snapshotProgress !== undefined && entry !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n currentHandleId: handleId,\n currentKind: 'buffer',\n currentSizeBytes: typeof entry.size === 'number' ? entry.size : null,\n };\n }\n },\n onResourceComplete: () => {\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n completedResources: s.snapshotProgress.completedResources + 1,\n currentHandleId: null,\n currentKind: null,\n currentSizeBytes: null,\n };\n }\n },\n isCancelled: () => !snapshotIsActive(),\n },\n );\n if (!batch.ok) return batch;\n if (!snapshotIsActive()) return cancelledResult();\n for (const [handleId] of batchEntries) {\n const bytes = batch.value.get(handleId);\n if (bytes === undefined) {\n return makeErr(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: 'the batched GPU readback returned no bytes for a live buffer',\n handleId,\n resourceKind: 'buffer',\n }),\n );\n }\n const dataHash = storeBlob(s, bytes);\n pushSnapshotEvent(s, { kind: 'initialData', handleId, dataHash });\n s.snapshotSeededHandles.add(handleId);\n }\n } else {\n const requests = batchEntries.map(([handleId, entry]) => {\n const { width, height, layerCount } = projectTextureExtent(entry.size);\n const layout = computeTextureLayout(\n entry.format,\n width,\n height,\n layerCount,\n entry.mipLevelCount ?? 1,\n );\n if (layout === undefined) {\n throw new Error(`texture '${handleId}' has no snapshottable byte layout`);\n }\n return {\n handleId,\n texture: entry.resource,\n bytesPerBlock: layout.bytesPerBlock,\n blockWidth: layout.blockWidth,\n blockHeight: layout.blockHeight,\n totalBytes: layout.totalBytes,\n slices: layout.slices,\n };\n });\n const batch = await readbackTexturePixelsBatch(realDevice, requests, {\n onResourceStart: (handleId) => {\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n currentHandleId: handleId,\n currentKind: 'texture',\n currentSizeBytes: null,\n };\n }\n },\n isCancelled: () => !snapshotIsActive(),\n });\n if (!batch.ok) return batch;\n if (!snapshotIsActive()) return cancelledResult();\n for (const [handleId] of batchEntries) {\n // A transient texture can be released while its batch is waiting\n // on the GPU. The copy was intentionally isolated and cleaned up,\n // but the released handle must not become a seed for the next\n // frame. Buffers retain the historical batch behavior above.\n if (!s.descriptorTable.has(handleId)) {\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n skippedResources: s.snapshotProgress.skippedResources + 1,\n currentHandleId: null,\n currentKind: null,\n currentSizeBytes: null,\n };\n }\n continue;\n }\n const bytes = batch.value.get(handleId);\n if (bytes === undefined) {\n return makeErr(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: 'the batched GPU readback returned no bytes for a live texture',\n handleId,\n resourceKind: 'texture',\n }),\n );\n }\n const dataHash = storeBlob(s, bytes);\n pushSnapshotEvent(s, { kind: 'initialData', handleId, dataHash });\n s.snapshotSeededHandles.add(handleId);\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n completedResources: s.snapshotProgress.completedResources + 1,\n currentHandleId: null,\n currentKind: null,\n currentSizeBytes: null,\n };\n }\n }\n }\n if (!snapshotIsActive()) return cancelledResult();\n }\n }\n\n if (s.snapshotProgress !== undefined) {\n s.snapshotProgress = {\n ...s.snapshotProgress,\n currentHandleId: null,\n currentKind: null,\n currentSizeBytes: null,\n };\n }\n\n if (s.state !== RecorderState.Snapshotting || s.snapshotGeneration !== snapshotGeneration) {\n return makeErr(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: 'snapshot was cancelled before the full live-resource table was seeded',\n }),\n );\n }\n s.state = RecorderState.Recording;\n return makeOk(undefined);\n }\n\n // --------------------------------------------------\n // proxy construction\n // --------------------------------------------------\n\n return {\n arm,\n onFrameEnd,\n getTape,\n getState,\n getEvents,\n getBlobPool,\n transitionToError,\n disposeError,\n snapshotResource,\n snapshotAllLiveResources,\n };\n}\n","// @forgeax/engine-rhi-debug/src/recorder/wrap -- RHI instance assembly.\n\n/// <reference types=\"@webgpu/types\" />\n\nimport type {\n RequestAdapterOptions,\n RequestDeviceOptions,\n Result,\n RhiAdapter,\n RhiDevice,\n RhiInstance,\n ShaderModule,\n} from '@forgeax/engine-rhi';\nimport { ok as makeOk } from '@forgeax/engine-types';\nimport type { HandleId, RhiCallEvent } from '../types';\nimport {\n type DebugRhiInstance,\n pushEvent,\n type RecorderInternal,\n RecorderState,\n registerHandle,\n} from './core';\nimport { createDeviceProxy } from './device';\nimport { createRecorderLifecycle } from './lifecycle';\n\nexport function wrap(instance: RhiInstance): DebugRhiInstance {\n const s: RecorderInternal = {\n state: RecorderState.Idle,\n requestedFrames: 0,\n recordedFrames: 0,\n events: [],\n blobPool: new Map(),\n handleMap: new WeakMap(),\n textureViewHandleMap: new WeakMap(),\n bootstrapCreates: new Map(),\n snapshotSeededHandles: new Set(),\n snapshotGeneration: 0,\n snapshotProgress: undefined,\n descriptorTable: new Map(),\n _skipRecord: false,\n frameIdx: 0,\n bootstrap: true,\n recordedCaps: undefined,\n valid: true,\n capturedDevice: undefined,\n };\n\n const lifecycle = createRecorderLifecycle(s);\n const {\n arm,\n onFrameEnd,\n getTape,\n getState,\n getEvents,\n getBlobPool,\n transitionToError,\n disposeError,\n snapshotResource,\n snapshotAllLiveResources,\n } = lifecycle;\n\n const debugInst: DebugRhiInstance = {\n arm,\n onFrameEnd,\n getTape,\n getState,\n getEvents,\n getBlobPool,\n transitionToError,\n disposeError,\n snapshotResource,\n snapshotAllLiveResources,\n pushExternalEvent(event: RhiCallEvent): void {\n pushEvent(s, event);\n },\n registerShaderModule(handle: ShaderModule, handleId: HandleId): void {\n s.handleMap.set(handle as object, handleId);\n },\n pushExternalCreateEvent(handle: object, kind: string, event: RhiCallEvent): HandleId {\n const hId = registerHandle(s, handle, kind, event);\n pushEvent(s, event);\n return hId;\n },\n resetForDeviceLoss(): void {\n // A lost GPU device invalidates every opaque handle and every descriptor\n // entry. Keep the recorder usable for the renderer's subsequent rebuild:\n // resource and shader creation calls during recovery repopulate these\n // registries against the fresh device before the next capture arms.\n s.state = RecorderState.Idle;\n s.requestedFrames = 0;\n s.recordedFrames = 0;\n s.events = [];\n s.blobPool = new Map();\n s.handleMap = new WeakMap();\n s.textureViewHandleMap = new WeakMap();\n s.bootstrapCreates = new Map();\n s.descriptorTable = new Map();\n s.snapshotSeededHandles = new Set();\n s.snapshotProgress = undefined;\n s.frameIdx = 0;\n s.bootstrap = true;\n s.recordedCaps = undefined;\n s.valid = true;\n s.capturedDevice = undefined;\n },\n valid(): boolean {\n return s.valid;\n },\n bootstrapCreatesSize(): number {\n return s.bootstrapCreates.size;\n },\n bootstrapEvents(): readonly RhiCallEvent[] {\n return Array.from(s.bootstrapCreates.values());\n },\n descriptorTable() {\n return s.descriptorTable;\n },\n\n async requestAdapter(\n opts?: RequestAdapterOptions | undefined,\n compatibleSurface?: HTMLCanvasElement | OffscreenCanvas | undefined,\n ) {\n const res = await instance.requestAdapter(opts, compatibleSurface);\n if (!res.ok) return res;\n\n const realAdapter = res.value;\n const proxyAdapter: RhiAdapter = {\n features: realAdapter.features,\n limits: realAdapter.limits,\n async requestDevice(devOpts?: RequestDeviceOptions | undefined) {\n const devRes = await realAdapter.requestDevice(devOpts);\n if (!devRes.ok) return devRes;\n // Keep the proxied device available for recorder-owned readback.\n const proxied = createDeviceProxy(s, devRes.value);\n s.capturedDevice = proxied;\n s.recordedCaps = {\n // RhiDevice does not own a canvas, so retain the existing tape\n // default for this informational field while deriving every\n // device-backed capability from the captured device.\n canvasFormat: 'bgra8unorm' as GPUTextureFormat,\n rgba16floatRenderable: proxied.caps.rgba16floatRenderable,\n float32Filterable: proxied.caps.float32Filterable,\n textureCompressionBc: proxied.caps.textureCompressionBc,\n textureCompressionEtc2: proxied.caps.textureCompressionEtc2,\n textureCompressionAstc: proxied.caps.textureCompressionAstc,\n storageBuffer: proxied.caps.storageBuffer,\n timestampQuery: proxied.caps.timestampQuery,\n };\n return makeOk(proxied) as Result<RhiDevice, import('@forgeax/engine-rhi').RhiError>;\n },\n };\n return makeOk(proxyAdapter) as Result<RhiAdapter, import('@forgeax/engine-rhi').RhiError>;\n },\n };\n\n return debugInst;\n}\n","import type { RhiCanvasContext, RhiDevice, RhiError, RhiInstance } from '@forgeax/engine-rhi';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport {\n type CreateShaderModuleFn,\n type DebugRhiInstance,\n wrap,\n wrapCreateShaderModule,\n} from '../recorder';\n\nexport interface RecordableBackend {\n readonly rhi: RhiInstance & {\n readonly acquireCanvasContext?: (\n canvas: HTMLCanvasElement | OffscreenCanvas,\n ) => Result<RhiCanvasContext, RhiError>;\n };\n readonly createShaderModule: CreateShaderModuleFn;\n}\n\nexport interface RecorderBackend extends RecordableBackend {\n readonly unwrapDeviceForSurface: (device: RhiDevice) => Result<RhiDevice, RhiDebugError>;\n}\n\nexport interface RecorderProxy {\n readonly backend: RecorderBackend;\n readonly recorder: DebugRhiInstance;\n}\n\nexport function createRecorderProxy(backend: RecordableBackend): RecorderProxy {\n const recorder = wrap(backend.rhi);\n const wrappedCreateShaderModule = wrapCreateShaderModule(backend.createShaderModule, recorder);\n const acquireCanvasContext = backend.rhi.acquireCanvasContext;\n // Runtime's explicit-RHI seam receives the wrapped singleton as one value.\n // Keep the standalone shader factory enumerable on that value so the\n // renderer can preserve the complete typed backend pack after capture\n // attachment; the public RhiInstance contract remains unchanged.\n const rhi: RecordableBackend['rhi'] & { readonly createShaderModule: CreateShaderModuleFn } = {\n requestAdapter: recorder.requestAdapter.bind(recorder),\n createShaderModule: wrappedCreateShaderModule,\n ...(acquireCanvasContext === undefined\n ? {}\n : { acquireCanvasContext: acquireCanvasContext.bind(backend.rhi) }),\n };\n const wrappedBackend: RecorderBackend = {\n rhi,\n createShaderModule: wrappedCreateShaderModule,\n unwrapDeviceForSurface(device) {\n const raw = (device as RhiDevice & { readonly _realDevice?: RhiDevice })._realDevice;\n if (raw !== undefined) return ok(raw);\n return err(\n createRhiDebugError('capture-unavailable', {\n stage: 'capture',\n cause: 'the recorder backend does not expose a surface device resolver',\n }),\n );\n },\n };\n return { backend: wrappedBackend, recorder };\n}\n","import type { DebugRhiInstance } from '../recorder';\nimport type { HandleId } from '../types';\n\nexport interface ResourceCandidate {\n readonly handleId: HandleId;\n readonly kind: 'buffer' | 'texture';\n readonly estimatedBytes: number;\n}\n\nexport class ResourceRegistry {\n constructor(private readonly recorder: DebugRhiInstance) {}\n\n candidates(): readonly ResourceCandidate[] {\n return Array.from(this.recorder.descriptorTable(), ([handleId, descriptor]) => ({\n handleId,\n kind: descriptor.kind,\n estimatedBytes: estimateBytes(descriptor),\n }));\n }\n\n estimateSnapshotBytes(): number {\n return this.candidates().reduce((total, candidate) => total + candidate.estimatedBytes, 0);\n }\n\n clearGeneration(): void {\n this.recorder.transitionToError();\n this.recorder.resetForDeviceLoss();\n }\n}\n\nfunction estimateBytes(descriptor: {\n readonly kind: 'buffer' | 'texture';\n readonly size?: number | GPUExtent3DStrict;\n}): number {\n if (descriptor.kind === 'buffer') {\n return typeof descriptor.size === 'number' ? descriptor.size : 0;\n }\n if (descriptor.size === undefined || typeof descriptor.size === 'number') return 4;\n if (Array.isArray(descriptor.size)) {\n return Math.max(\n 1,\n (descriptor.size[0] ?? 1) * (descriptor.size[1] ?? 1) * (descriptor.size[2] ?? 1) * 4,\n );\n }\n if (!('width' in descriptor.size)) return 4;\n return Math.max(\n 1,\n descriptor.size.width *\n (descriptor.size.height ?? 1) *\n (descriptor.size.depthOrArrayLayers ?? 1) *\n 4,\n );\n}\n","import { err, ok, type Result } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport type { DebugRhiInstance } from '../recorder';\nimport type { ResourceRegistry } from './resource-registry';\n\nexport interface SnapshotOptions {\n readonly snapshotTimeoutMs: number;\n readonly byteBudget: number;\n}\n\nexport async function snapshotFrame(\n recorder: DebugRhiInstance,\n registry: ResourceRegistry,\n options: SnapshotOptions,\n): Promise<Result<void, RhiDebugError>> {\n const estimatedBytes = registry.estimateSnapshotBytes();\n const requiredBytes = Math.max(1, estimatedBytes);\n if (requiredBytes > options.byteBudget) {\n return err(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: `snapshot byte budget ${options.byteBudget} is smaller than the ${requiredBytes}-byte capture minimum`,\n }),\n );\n }\n try {\n const result = await recorder.snapshotAllLiveResources(options.snapshotTimeoutMs);\n if (result.ok) return ok(undefined);\n return err(result.error);\n } catch (cause) {\n return err(\n createRhiDebugError('capture-snapshot-failed', {\n stage: 'snapshot',\n cause: String(cause),\n }),\n );\n }\n}\n","import { err, ok, type Result } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport { assembleTape, type EncodedTape } from './assemble';\nimport { createRecorderProxy, type RecordableBackend, type RecorderBackend } from './proxy';\nimport { ResourceRegistry } from './resource-registry';\nimport { snapshotFrame } from './snapshot';\n\nexport interface CaptureFrameOptions {\n readonly snapshotTimeoutMs?: number;\n readonly byteBudget?: number;\n readonly signal?: AbortSignal;\n}\n\nexport interface RecorderOptions {\n readonly snapshotTimeoutMs?: number;\n readonly byteBudget?: number;\n}\n\nexport interface RecorderAttachment {\n readonly backend: RecorderBackend;\n captureFrame(options?: CaptureFrameOptions): Promise<Result<EncodedTape, RhiDebugError>>;\n frameBoundary(): Promise<Result<void, RhiDebugError>>;\n deviceLost(): void;\n dispose(): Promise<Result<void, RhiDebugError>>;\n}\n\ntype Phase = 'idle' | 'armed' | 'snapshotting' | 'recording' | 'disposed';\n\nexport function attachRecorder(\n backend: RecordableBackend,\n options: RecorderOptions = {},\n): Result<RecorderAttachment, RhiDebugError> {\n const proxy = createRecorderProxy(backend);\n const registry = new ResourceRegistry(proxy.recorder);\n let phase: Phase = 'idle';\n let generation = 0;\n let active:\n | {\n readonly generation: number;\n readonly options: CaptureFrameOptions;\n readonly resolve: (result: Result<EncodedTape, RhiDebugError>) => void;\n readonly signal?: AbortSignal;\n abortListener?: () => void;\n }\n | undefined;\n\n const fail = <T>(\n code: 'capture-unavailable' | 'capture-busy',\n cause: string,\n ): Result<T, RhiDebugError> => err(createRhiDebugError(code, { stage: 'capture', cause }));\n\n const settle = (result: Result<EncodedTape, RhiDebugError>): void => {\n const request = active;\n if (request === undefined) return;\n active = undefined;\n request.signal?.removeEventListener('abort', request.abortListener ?? (() => {}));\n if (!result.ok && proxy.recorder.getState() === 'error') proxy.recorder.disposeError();\n phase = phase === 'disposed' ? 'disposed' : 'idle';\n request.resolve(result);\n };\n\n const abort = (): void => {\n if (active === undefined) return;\n proxy.recorder.transitionToError();\n settle(fail('capture-unavailable', 'capture request was aborted'));\n };\n\n const attachment: RecorderAttachment = {\n backend: proxy.backend,\n captureFrame(captureOptions = {}) {\n if (phase === 'disposed')\n return Promise.resolve(fail('capture-unavailable', 'recorder is disposed'));\n if (active !== undefined)\n return Promise.resolve(fail('capture-busy', 'another capture is active'));\n const signal = captureOptions.signal;\n if (signal?.aborted)\n return Promise.resolve(fail('capture-unavailable', 'capture request was aborted'));\n const arm = proxy.recorder.arm(1);\n if (!arm.ok) return Promise.resolve(fail('capture-busy', arm.error.hint));\n phase = 'armed';\n generation += 1;\n return new Promise<Result<EncodedTape, RhiDebugError>>((resolve) => {\n const request = {\n generation,\n options: captureOptions,\n resolve,\n ...(signal === undefined ? {} : { signal }),\n } as {\n readonly generation: number;\n readonly options: CaptureFrameOptions;\n readonly resolve: (result: Result<EncodedTape, RhiDebugError>) => void;\n readonly signal?: AbortSignal;\n abortListener?: () => void;\n };\n request.abortListener = abort;\n active = request;\n signal?.addEventListener('abort', abort, { once: true });\n });\n },\n async frameBoundary() {\n if (phase === 'disposed' || active === undefined) return ok(undefined);\n const request = active;\n if (request.generation !== generation) return ok(undefined);\n if (phase === 'armed') {\n phase = 'snapshotting';\n const result = await snapshotFrame(proxy.recorder, registry, {\n snapshotTimeoutMs:\n request.options.snapshotTimeoutMs ?? options.snapshotTimeoutMs ?? 30_000,\n byteBudget: request.options.byteBudget ?? options.byteBudget ?? Number.MAX_SAFE_INTEGER,\n });\n if (!result.ok) {\n proxy.recorder.transitionToError();\n settle(err(result.error));\n return err(result.error);\n }\n phase = 'recording';\n return ok(undefined);\n }\n if (phase !== 'recording') return ok(undefined);\n proxy.recorder.onFrameEnd();\n if (proxy.recorder.getState() !== 'idle') return ok(undefined);\n const result = assembleTape(proxy.recorder);\n settle(result);\n return result.ok ? ok(undefined) : err(result.error);\n },\n deviceLost() {\n generation += 1;\n registry.clearGeneration();\n if (active !== undefined) {\n phase = 'idle';\n settle(fail('capture-unavailable', 'device loss invalidated the active generation'));\n } else if (phase !== 'disposed') {\n phase = 'idle';\n }\n },\n async dispose() {\n if (phase === 'disposed') return ok(undefined);\n if (active !== undefined) {\n proxy.recorder.transitionToError();\n settle(fail('capture-unavailable', 'recorder was disposed during capture'));\n }\n proxy.recorder.disposeError();\n phase = 'disposed';\n return ok(undefined);\n },\n };\n return ok(attachment);\n}\n\nexport type { CreateShaderModuleFn } from '../recorder';\nexport type { EncodedTape } from './assemble';\nexport type { RecordableBackend, RecorderBackend } from './proxy';\n","import type { Tape } from '../protocol/types';\n\nconst RECORDED_CAPABILITY_FEATURES = [\n ['timestampQuery', 'timestamp-query'],\n ['textureCompressionBc', 'texture-compression-bc'],\n ['textureCompressionEtc2', 'texture-compression-etc2'],\n ['textureCompressionAstc', 'texture-compression-astc'],\n ['firstInstanceIndirect', 'indirect-first-instance'],\n ['float32Filterable', 'float32-filterable'],\n ['rg11b10ufloatRenderable', 'rg11b10ufloat-renderable'],\n] as const satisfies readonly (readonly [string, GPUFeatureName])[];\n\n/**\n * Build the strongest fresh WebGPU device the current adapter can provide for\n * a recorded tape. Optional features must be enabled, not merely advertised,\n * and replay receives concrete adapter limits instead of lower device defaults.\n */\nexport function replayDeviceRequest(\n tape: Tape,\n adapterFeatures: ReadonlySet<GPUFeatureName>,\n adapterLimits: Readonly<Record<string, number>>,\n): GPUDeviceDescriptor {\n const requiredFeatures = RECORDED_CAPABILITY_FEATURES.filter(\n ([capability, feature]) =>\n tape.header.rhiCaps[capability] === true && adapterFeatures.has(feature),\n ).map(([, feature]) => feature);\n const limitEntries = Object.entries(adapterLimits).filter(\n ([, value]) => Number.isFinite(value) && value >= 0,\n );\n const request: GPUDeviceDescriptor = {};\n if (requiredFeatures.length > 0) request.requiredFeatures = requiredFeatures;\n if (limitEntries.length > 0) {\n request.requiredLimits = Object.fromEntries(limitEntries) as NonNullable<\n GPUDeviceDescriptor['requiredLimits']\n >;\n }\n return request;\n}\n","// @forgeax/engine-rhi-debug/src/replay/execute-support -- replay event helpers.\n\nimport type {\n Buffer,\n RhiCommandEncoder,\n RhiComputePassEncoder,\n RhiRenderPassEncoder,\n} from '@forgeax/engine-rhi';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport type { RhiCallEvent, Tape } from '../protocol/types';\nimport type { ReplayExecutionContext } from './execute';\nimport type { ReplayResource } from './resources';\n\ntype ReplayPass = RhiRenderPassEncoder & RhiComputePassEncoder;\n\nexport function eventRecord(event: RhiCallEvent): Record<string, unknown> {\n return JSON.parse(JSON.stringify(event));\n}\n\nexport function eventFailure(\n eventIndex: number,\n event: RhiCallEvent,\n stage: 'lookup' | 'create' | 'write' | 'encode' | 'finish' | 'submit',\n cause: unknown,\n): Result<never, RhiDebugError> {\n return err(\n createRhiDebugError('replay-event-failed', {\n eventIndex,\n kind: event.kind,\n stage,\n cause: cause instanceof Error ? cause.message : String(cause),\n }),\n );\n}\n\nexport function blob(\n tape: Tape,\n hash: string,\n event: RhiCallEvent,\n eventIndex: number,\n): Result<Uint8Array, RhiDebugError> {\n const found = tape.blobs.find((candidate) => candidate.hash === hash);\n return found === undefined\n ? eventFailure(eventIndex, event, 'lookup', `blob ${hash} is missing`)\n : ok(found.bytes);\n}\n\nexport function clearBuffer(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'clearBuffer' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n const buffer = requireResource<Buffer>(context, event.handleId, 'buffer', eventIndex, event.kind);\n if (!encoder.ok) return encoder;\n if (!buffer.ok) return buffer;\n encoder.value.clearBuffer(buffer.value, event.offset, event.size);\n return ok(undefined);\n}\n\nexport function commandEncoderCall(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'pushDebugGroup' | 'popDebugGroup' | 'insertDebugMarker' }>,\n eventIndex: number,\n call: (encoder: RhiCommandEncoder) => void,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n if (!encoder.ok) return encoder;\n call(encoder.value);\n return ok(undefined);\n}\n\nexport function finish(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'finish' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n if (!encoder.ok) return encoder;\n const result = encoder.value.finish();\n if (!result.ok) return eventFailure(eventIndex, event, 'finish', result.error);\n return context.table.set(\n event.cmdHandleId,\n { kind: 'encoder', role: 'command-buffer', value: result.value },\n eventRecord(event),\n );\n}\n\nexport function endPass(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'endRenderPass' | 'endComputePass' }>,\n eventIndex: number,\n role: 'render-pass' | 'compute-pass',\n): Result<void, RhiDebugError> {\n const pass = requireResource<RhiRenderPassEncoder | RhiComputePassEncoder>(\n context,\n event.passHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n role,\n );\n if (!pass.ok) return pass;\n pass.value.end();\n context.table.delete(event.passHandleId);\n return ok(undefined);\n}\n\nexport function seedInitialData(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'initialData' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const entry = context.table.get(event.handleId);\n const bytes = blob(context.tape, event.dataHash, event, eventIndex);\n if (!bytes.ok) return bytes;\n if (entry?.resource.kind === 'buffer') {\n const result = context.queue.writeBuffer(entry.resource.value, 0, bytes.value);\n return result.ok ? ok(undefined) : eventFailure(eventIndex, event, 'write', result.error);\n }\n return eventFailure(\n eventIndex,\n event,\n 'lookup',\n 'initialData currently requires a buffer resource',\n );\n}\n\nexport function requireResource<T>(\n context: ReplayExecutionContext,\n resourceId: string,\n kind: ReplayResource['kind'] | string,\n eventIndex: number,\n eventKind: RhiCallEvent['kind'],\n role?: string,\n): Result<T, RhiDebugError> {\n const entry = context.table.get(resourceId);\n if (\n entry === undefined ||\n entry.resource.kind !== kind ||\n (role !== undefined && entry.resource.role !== role)\n ) {\n return missingResource(\n eventIndex,\n { kind: eventKind } as RhiCallEvent,\n resourceId,\n `${kind}${role === undefined ? '' : `/${role}`}`,\n );\n }\n return ok(entry.resource.value as T);\n}\n\nexport function requireReplayResource(\n context: ReplayExecutionContext,\n resourceId: string,\n kind: ReplayResource['kind'] | string,\n eventIndex: number,\n eventKind: RhiCallEvent['kind'],\n role?: string,\n): Result<ReplayResource, RhiDebugError> {\n const entry = context.table.get(resourceId);\n if (\n entry === undefined ||\n entry.resource.kind !== kind ||\n (role !== undefined && entry.resource.role !== role)\n ) {\n return missingResource(\n eventIndex,\n { kind: eventKind } as RhiCallEvent,\n resourceId,\n `${kind}${role === undefined ? '' : `/${role}`}`,\n );\n }\n return ok(entry.resource);\n}\n\nexport function passCall(\n context: ReplayExecutionContext,\n event: RhiCallEvent,\n eventIndex: number,\n role: 'render-pass' | 'compute-pass' | 'pass',\n call: (pass: ReplayPass) => Result<void, RhiDebugError>,\n): Result<void, RhiDebugError> {\n const passId = 'passHandleId' in event ? event.passHandleId : undefined;\n if (passId === undefined)\n return eventFailure(eventIndex, event, 'lookup', 'pass handle is missing');\n const entry = context.table.get(passId);\n const valid =\n entry?.resource.kind === 'encoder' && (role === 'pass' || entry.resource.role === role);\n if (!valid || entry === undefined || entry.resource.kind !== 'encoder') {\n return missingResource(eventIndex, event, passId, role);\n }\n return call(entry.resource.value as ReplayPass);\n}\n\nexport function pipelineError<T>(\n result: Result<T, RhiDebugError>,\n event: RhiCallEvent,\n eventIndex: number,\n): Result<never, RhiDebugError> {\n return result.ok\n ? eventFailure(eventIndex, event, 'lookup', 'resource has the wrong role')\n : result;\n}\n\nexport function missingResource(\n eventIndex: number,\n event: RhiCallEvent,\n resourceId: string,\n expected: string,\n): Result<never, RhiDebugError> {\n return eventFailure(eventIndex, event, 'lookup', `resource ${resourceId} is not a ${expected}`);\n}\n\nexport function unsupportedEvent(\n eventIndex: number,\n event: RhiCallEvent,\n cause: string,\n): Result<never, RhiDebugError> {\n return eventFailure(eventIndex, event, 'lookup', cause);\n}\n","/// <reference types=\"@webgpu/types\" />\n\nexport interface TextureReadbackDescriptor {\n readonly format: string;\n readonly dimension: string;\n readonly aspect?: GPUTextureAspect | undefined;\n}\n\nexport type TextureReadbackPlan =\n | {\n readonly supported: true;\n readonly format: string;\n readonly bytesPerTexel: number;\n readonly blockWidth: 1;\n readonly blockHeight: 1;\n }\n | {\n readonly supported: false;\n readonly format: string;\n readonly reason: string;\n };\n\nconst BYTES_PER_TEXEL: Readonly<Record<string, number>> = {\n r8unorm: 1,\n rg8unorm: 2,\n rgba8unorm: 4,\n 'rgba8unorm-srgb': 4,\n bgra8unorm: 4,\n 'bgra8unorm-srgb': 4,\n r16float: 2,\n rg16float: 4,\n rgba16float: 8,\n r32float: 4,\n rg32float: 8,\n rgba32float: 16,\n rgb10a2unorm: 4,\n rg11b10ufloat: 4,\n};\n\nconst DEPTH_FORMATS = new Set([\n 'depth16unorm',\n 'depth24plus',\n 'depth24plus-stencil8',\n 'depth32float',\n 'depth32float-stencil8',\n]);\n\nexport function isDepthTextureFormat(format: string): boolean {\n return DEPTH_FORMATS.has(format);\n}\n\nexport function isDepthStencilTextureFormat(format: string): boolean {\n return format.endsWith('-stencil8');\n}\n\nexport function getTextureReadbackPlan(descriptor: TextureReadbackDescriptor): TextureReadbackPlan {\n if (descriptor.dimension === '3d') {\n return {\n supported: false,\n format: descriptor.format,\n reason: '3D texture volume readback is outside the v7 core matrix',\n };\n }\n if (/^(bc|etc2|eac|astc)-/.test(descriptor.format)) {\n return {\n supported: false,\n format: descriptor.format,\n reason: 'compressed texture readback has no core decoder',\n };\n }\n if (DEPTH_FORMATS.has(descriptor.format)) {\n return {\n supported: true,\n format: descriptor.format,\n bytesPerTexel: 4,\n blockWidth: 1,\n blockHeight: 1,\n };\n }\n const bytesPerTexel = BYTES_PER_TEXEL[descriptor.format];\n if (bytesPerTexel === undefined) {\n return {\n supported: false,\n format: descriptor.format,\n reason: 'texture format is not in the v7 readback matrix',\n };\n }\n return {\n supported: true,\n format: descriptor.format,\n bytesPerTexel,\n blockWidth: 1,\n blockHeight: 1,\n };\n}\n\nexport function textureBytesPerTexel(format: string): number | undefined {\n return BYTES_PER_TEXEL[format] ?? (DEPTH_FORMATS.has(format) ? 4 : undefined);\n}\n","import type {\n BindGroupDescriptor,\n Buffer,\n CommandBuffer,\n PipelineLayout,\n RenderPassColorAttachment,\n RenderPassDepthStencilAttachment,\n RhiBindingResource,\n RhiCommandEncoder,\n RhiDevice,\n RhiError,\n RhiQueue,\n Texture,\n} from '@forgeax/engine-rhi';\nimport { ok, type Result } from '@forgeax/engine-types';\nimport type { RhiDebugError } from '../errors';\nimport type { RhiCallEvent, Tape } from '../protocol/types';\nimport {\n blob,\n clearBuffer,\n commandEncoderCall,\n endPass,\n eventFailure,\n eventRecord,\n finish,\n missingResource,\n passCall,\n pipelineError,\n requireReplayResource,\n requireResource,\n seedInitialData,\n unsupportedEvent,\n} from './execute-support';\nimport type { ReplayResource, ResourceTable } from './resources';\nimport { isDepthTextureFormat } from './texture-format';\n\nexport { eventFailure } from './execute-support';\n\nexport interface ReplayExecutionContext {\n readonly device: RhiDevice;\n readonly queue: RhiQueue;\n readonly tape: Tape;\n readonly table: ResourceTable;\n readonly createShaderModule: (\n device: RhiDevice,\n desc: { readonly code: string; readonly label?: string | undefined },\n ) => Promise<Result<import('@forgeax/engine-rhi').ShaderModule, RhiError>>;\n}\n\nexport async function executeEvent(\n context: ReplayExecutionContext,\n event: RhiCallEvent,\n eventIndex: number,\n): Promise<Result<void, RhiDebugError>> {\n try {\n switch (event.kind) {\n case 'frameMark':\n return ok(undefined);\n case 'createBuffer':\n return createResource(context, eventIndex, event, context.device.createBuffer(event.desc), {\n kind: 'buffer',\n });\n case 'createTexture':\n return createResource(\n context,\n eventIndex,\n event,\n context.device.createTexture(replayTextureDescriptor(event.desc) as never),\n {\n kind: 'texture',\n },\n );\n case 'destroyBuffer':\n return destroyResource(context, eventIndex, event, 'buffer');\n case 'destroyTexture':\n return destroyResource(context, eventIndex, event, 'texture');\n case 'createTextureView': {\n const texture = requireResource<Texture>(\n context,\n event.sourceHandleId,\n 'texture',\n eventIndex,\n event.kind,\n );\n if (!texture.ok) return texture;\n return createResource(\n context,\n eventIndex,\n event,\n context.device.createTextureView(texture.value, event.desc),\n { kind: 'texture-view' },\n event.resultHandleId,\n );\n }\n case 'createSampler':\n return createResource(\n context,\n eventIndex,\n event,\n context.device.createSampler(event.desc),\n {\n kind: 'sampler',\n },\n );\n case 'createBindGroupLayout':\n return createResource(\n context,\n eventIndex,\n event,\n context.device.createBindGroupLayout(event.desc as never),\n { kind: 'binding', role: 'bind-group-layout' },\n );\n case 'createBindGroup':\n return createBindGroup(context, event, eventIndex);\n case 'createPipelineLayout':\n return createPipelineLayout(context, event, eventIndex);\n case 'createRenderPipeline':\n return createRenderPipeline(context, event, eventIndex);\n case 'createComputePipeline':\n return createComputePipeline(context, event, eventIndex);\n case 'createShaderModule':\n return createShaderModule(context, event, eventIndex);\n case 'createCommandEncoder':\n return createResource(\n context,\n eventIndex,\n event,\n context.device.createCommandEncoder(event.desc),\n { kind: 'encoder', role: 'command' },\n event.cmdHandleId,\n );\n case 'writeBuffer':\n return writeBuffer(context, event, eventIndex);\n case 'writeTexture':\n return writeTexture(context, event, eventIndex);\n case 'copyExternalImageToTexture':\n return unsupportedEvent(eventIndex, event, 'external image sources are not self-contained');\n case 'submit':\n return submit(context, event, eventIndex);\n case 'beginRenderPass':\n return beginRenderPass(context, event, eventIndex);\n case 'beginComputePass':\n return beginComputePass(context, event, eventIndex);\n case 'copyBufferToBuffer':\n return copyBufferToBuffer(context, event, eventIndex);\n case 'copyBufferToTexture':\n return copyBufferToTexture(context, event, eventIndex);\n case 'copyTextureToBuffer':\n return copyTextureToBuffer(context, event, eventIndex);\n case 'copyTextureToTexture':\n return copyTextureToTexture(context, event, eventIndex);\n case 'clearBuffer':\n return clearBuffer(context, event, eventIndex);\n case 'pushDebugGroup':\n return commandEncoderCall(context, event, eventIndex, (encoder) =>\n encoder.pushDebugGroup(event.groupLabel),\n );\n case 'popDebugGroup':\n return commandEncoderCall(context, event, eventIndex, (encoder) => encoder.popDebugGroup());\n case 'insertDebugMarker':\n return commandEncoderCall(context, event, eventIndex, (encoder) =>\n encoder.insertDebugMarker(event.markerLabel),\n );\n case 'finish':\n return finish(context, event, eventIndex);\n case 'setPipeline':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n const pipeline = requireReplayResource(\n context,\n event.pipelineHandleId,\n 'pipeline',\n eventIndex,\n event.kind,\n );\n if (!pipeline.ok || pipeline.value.role !== 'render')\n return pipelineError(pipeline, event, eventIndex);\n pass.setPipeline(pipeline.value.value as never);\n return ok(undefined);\n });\n case 'setVertexBuffer':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n const buffer = requireResource<Buffer>(\n context,\n event.bufferHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n if (!buffer.ok) return buffer;\n pass.setVertexBuffer(event.slot, buffer.value, event.offset, event.size);\n return ok(undefined);\n });\n case 'setIndexBuffer':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n const buffer = requireResource<Buffer>(\n context,\n event.bufferHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n if (!buffer.ok) return buffer;\n pass.setIndexBuffer(buffer.value, event.format, event.offset, event.size);\n return ok(undefined);\n });\n case 'setBindGroup':\n return passCall(context, event, eventIndex, 'pass', (pass) => {\n const bindGroup = requireReplayResource(\n context,\n event.bindGroupHandleId,\n 'binding',\n eventIndex,\n event.kind,\n );\n if (!bindGroup.ok || bindGroup.value.role !== 'bind-group')\n return pipelineError(bindGroup, event, eventIndex);\n pass.setBindGroup(event.index, bindGroup.value.value as never, event.dynamicOffsets);\n return ok(undefined);\n });\n case 'draw':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n pass.draw(event.vertexCount, event.instanceCount, event.firstVertex, event.firstInstance);\n return ok(undefined);\n });\n case 'drawIndexed':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n pass.drawIndexed(\n event.indexCount,\n event.instanceCount,\n event.firstIndex,\n event.baseVertex,\n event.firstInstance,\n );\n return ok(undefined);\n });\n case 'setViewport':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n pass.setViewport(event.x, event.y, event.w, event.h, event.minDepth, event.maxDepth);\n return ok(undefined);\n });\n case 'setScissorRect':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n pass.setScissorRect(event.x, event.y, event.w, event.h);\n return ok(undefined);\n });\n case 'setStencilReference':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n pass.setStencilReference(event.reference);\n return ok(undefined);\n });\n case 'endRenderPass':\n return endPass(context, event, eventIndex, 'render-pass');\n case 'setBlendConstant':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n pass.setBlendConstant(event.color);\n return ok(undefined);\n });\n case 'drawIndirect':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n const buffer = requireResource<Buffer>(\n context,\n event.indirectBufferHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n if (!buffer.ok) return buffer;\n pass.drawIndirect(buffer.value, event.indirectOffset);\n return ok(undefined);\n });\n case 'drawIndexedIndirect':\n return passCall(context, event, eventIndex, 'render-pass', (pass) => {\n const buffer = requireResource<Buffer>(\n context,\n event.indirectBufferHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n if (!buffer.ok) return buffer;\n pass.drawIndexedIndirect(buffer.value, event.indirectOffset);\n return ok(undefined);\n });\n case 'passPushDebugGroup':\n return passCall(context, event, eventIndex, 'pass', (pass) => {\n pass.pushDebugGroup(event.groupLabel);\n return ok(undefined);\n });\n case 'passPopDebugGroup':\n return passCall(context, event, eventIndex, 'pass', (pass) => {\n pass.popDebugGroup();\n return ok(undefined);\n });\n case 'passInsertDebugMarker':\n return passCall(context, event, eventIndex, 'pass', (pass) => {\n pass.insertDebugMarker(event.markerLabel);\n return ok(undefined);\n });\n case 'setComputePipeline':\n return passCall(context, event, eventIndex, 'compute-pass', (pass) => {\n const pipeline = requireReplayResource(\n context,\n event.pipelineHandleId,\n 'pipeline',\n eventIndex,\n event.kind,\n );\n if (!pipeline.ok || pipeline.value.role !== 'compute')\n return pipelineError(pipeline, event, eventIndex);\n pass.setPipeline(pipeline.value.value as never);\n return ok(undefined);\n });\n case 'dispatchWorkgroups':\n return passCall(context, event, eventIndex, 'compute-pass', (pass) => {\n pass.dispatchWorkgroups(event.x, event.y, event.z);\n return ok(undefined);\n });\n case 'dispatchWorkgroupsIndirect':\n return passCall(context, event, eventIndex, 'compute-pass', (pass) => {\n const buffer = requireResource<Buffer>(\n context,\n event.indirectBufferHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n if (!buffer.ok) return buffer;\n pass.dispatchWorkgroupsIndirect(buffer.value, event.indirectOffset);\n return ok(undefined);\n });\n case 'endComputePass':\n return endPass(context, event, eventIndex, 'compute-pass');\n case 'initialData':\n return seedInitialData(context, event, eventIndex);\n default:\n return unsupportedEvent(eventIndex, event, 'event kind has no replay executor');\n }\n } catch (cause) {\n return eventFailure(eventIndex, event, 'encode', cause);\n }\n}\n\nfunction replayTextureDescriptor(\n descriptor: Extract<RhiCallEvent, { kind: 'createTexture' }>['desc'],\n): Extract<RhiCallEvent, { kind: 'createTexture' }>['desc'] {\n if (!isDepthTextureFormat(descriptor.format)) return descriptor;\n return {\n ...descriptor,\n // depth24plus* readback uses a package-owned depth-to-color blit and thus\n // needs the source texture to be bindable on a fresh replay device.\n usage: (descriptor.usage ?? 0) | 0x04,\n };\n}\n\nfunction createResource<T extends ReplayResource>(\n context: ReplayExecutionContext,\n eventIndex: number,\n event: RhiCallEvent,\n result: Result<T['value'], RhiError>,\n shape: Pick<ReplayResource, 'kind'> & { readonly role?: string },\n resourceId?: string,\n): Result<void, RhiDebugError> {\n if (!result.ok) return eventFailure(eventIndex, event, 'create', result.error);\n const id = resourceId ?? ('handleId' in event ? event.handleId : undefined);\n if (id === undefined)\n return eventFailure(eventIndex, event, 'lookup', 'created resource has no handle id');\n const stored = context.table.set(id, { ...shape, value: result.value } as T, eventRecord(event));\n return stored.ok ? ok(undefined) : stored;\n}\n\nfunction destroyResource(\n context: ReplayExecutionContext,\n eventIndex: number,\n event: Extract<RhiCallEvent, { kind: 'destroyBuffer' | 'destroyTexture' }>,\n kind: 'buffer' | 'texture',\n): Result<void, RhiDebugError> {\n const entry = context.table.get(event.handleId);\n if (entry === undefined || entry.resource.kind !== kind)\n return missingResource(eventIndex, event, event.handleId, kind);\n const result =\n kind === 'buffer'\n ? context.device.destroyBuffer(entry.resource.value as Buffer)\n : context.device.destroyTexture(entry.resource.value as Texture);\n if (!result.ok) return eventFailure(eventIndex, event, 'create', result.error);\n context.table.delete(event.handleId);\n return ok(undefined);\n}\n\nasync function createShaderModule(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'createShaderModule' }>,\n eventIndex: number,\n): Promise<Result<void, RhiDebugError>> {\n const result = await context.createShaderModule(context.device, { code: event.wgslCode });\n return createResource(context, eventIndex, event, result, { kind: 'shader-module' });\n}\n\nfunction createBindGroup(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'createBindGroup' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const layout = requireReplayResource(\n context,\n event.layoutHandleId,\n 'binding',\n eventIndex,\n event.kind,\n );\n if (!layout.ok || layout.value.role !== 'bind-group-layout')\n return pipelineError(layout, event, eventIndex);\n const resources: RhiBindingResource[] = [];\n for (const [index, entry] of event.entries.entries()) {\n const resourceId = event.resourceHandleIds[index];\n if (resourceId === undefined)\n return eventFailure(eventIndex, event, 'lookup', 'bind group resource handle is missing');\n const resolved = context.table.get(resourceId);\n if (resolved === undefined)\n return missingResource(eventIndex, event, resourceId, entry.resourceKind);\n if (entry.resourceKind === 'buffer' && resolved.resource.kind === 'buffer') {\n resources.push({\n kind: 'buffer',\n value: {\n buffer: resolved.resource.value,\n ...(entry.bufferOffset === undefined ? {} : { offset: entry.bufferOffset }),\n ...(entry.bufferSize === undefined ? {} : { size: entry.bufferSize }),\n },\n });\n } else if (entry.resourceKind === 'sampler' && resolved.resource.kind === 'sampler') {\n resources.push({ kind: 'sampler', value: resolved.resource.value });\n } else if (entry.resourceKind === 'textureView' && resolved.resource.kind === 'texture-view') {\n resources.push({ kind: 'textureView', value: resolved.resource.value });\n } else {\n return missingResource(eventIndex, event, resourceId, entry.resourceKind);\n }\n }\n const descriptor: BindGroupDescriptor = {\n layout: layout.value.value as never,\n entries: event.entries.map((entry, index) => ({\n binding: entry.binding,\n resource: resources[index] as RhiBindingResource,\n })),\n };\n return createResource(context, eventIndex, event, context.device.createBindGroup(descriptor), {\n kind: 'binding',\n role: 'bind-group',\n });\n}\n\nfunction createPipelineLayout(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'createPipelineLayout' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const layouts: import('@forgeax/engine-rhi').BindGroupLayout[] = [];\n for (const id of event.bglHandleIds) {\n const layout = requireReplayResource(context, id, 'binding', eventIndex, event.kind);\n if (!layout.ok || layout.value.role !== 'bind-group-layout')\n return pipelineError(layout, event, eventIndex);\n layouts.push(layout.value.value as import('@forgeax/engine-rhi').BindGroupLayout);\n }\n return createResource(\n context,\n eventIndex,\n event,\n context.device.createPipelineLayout({ bindGroupLayouts: layouts }),\n { kind: 'binding', role: 'pipeline-layout' },\n );\n}\n\nfunction createRenderPipeline(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'createRenderPipeline' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const layout = requireReplayResource(\n context,\n event.layoutHandleId,\n 'binding',\n eventIndex,\n event.kind,\n );\n if (!layout.ok || layout.value.role !== 'pipeline-layout')\n return pipelineError(layout, event, eventIndex);\n const vertex = event.desc.vertex;\n const fragment = event.desc.fragment;\n const vertexShader =\n vertex === undefined ? undefined : shaderValue(context, event.vertexShaderModuleHandleId);\n const fragmentShader =\n fragment === undefined ? undefined : shaderValue(context, event.fragmentShaderModuleHandleId);\n const descriptor = {\n ...event.desc,\n layout: layout.value.value as PipelineLayout,\n ...(vertex === undefined ? {} : { vertex: { ...vertex, module: vertexShader } }),\n ...(fragment === undefined\n ? {}\n : {\n fragment: {\n ...fragment,\n module: fragmentShader,\n },\n }),\n };\n if (\n (vertex !== undefined && vertexShader === undefined) ||\n (fragment !== undefined && fragmentShader === undefined)\n ) {\n return eventFailure(\n eventIndex,\n event,\n 'lookup',\n 'render pipeline shader module handle is missing',\n );\n }\n return createResource(\n context,\n eventIndex,\n event,\n context.device.createRenderPipeline(descriptor as never),\n {\n kind: 'pipeline',\n role: 'render',\n },\n );\n}\n\nfunction createComputePipeline(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'createComputePipeline' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const layout = requireReplayResource(\n context,\n event.layoutHandleId,\n 'binding',\n eventIndex,\n event.kind,\n );\n if (!layout.ok || layout.value.role !== 'pipeline-layout')\n return pipelineError(layout, event, eventIndex);\n const shader = shaderValue(context, event.computeShaderModuleHandleId);\n if (shader === undefined)\n return eventFailure(\n eventIndex,\n event,\n 'lookup',\n 'compute pipeline shader module handle is missing',\n );\n return createResource(\n context,\n eventIndex,\n event,\n context.device.createComputePipeline({\n ...event.desc,\n layout: layout.value.value as PipelineLayout,\n compute: { ...event.desc.compute, module: shader },\n } as never),\n { kind: 'pipeline', role: 'compute' },\n );\n}\n\nfunction shaderValue(\n context: ReplayExecutionContext,\n id: string | undefined,\n): import('@forgeax/engine-rhi').ShaderModule | undefined {\n if (id === undefined) return undefined;\n const entry = context.table.get(id);\n if (entry?.resource.kind !== 'shader-module') return undefined;\n return entry.resource.value;\n}\n\nfunction writeBuffer(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'writeBuffer' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const buffer = requireResource<Buffer>(context, event.handleId, 'buffer', eventIndex, event.kind);\n if (!buffer.ok) return buffer;\n const bytes = blob(context.tape, event.dataHash, event, eventIndex);\n if (!bytes.ok) return bytes;\n const result = context.queue.writeBuffer(\n buffer.value,\n event.bufferOffset,\n bytes.value,\n 0,\n event.size,\n );\n return result.ok ? ok(undefined) : eventFailure(eventIndex, event, 'write', result.error);\n}\n\nfunction writeTexture(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'writeTexture' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const texture = requireResource<Texture>(\n context,\n event.destination.textureHandleId,\n 'texture',\n eventIndex,\n event.kind,\n );\n if (!texture.ok) return texture;\n const bytes = blob(context.tape, event.dataHash, event, eventIndex);\n if (!bytes.ok) return bytes;\n const result = context.queue.writeTexture(\n {\n texture: texture.value,\n mipLevel: event.destination.mipLevel ?? 0,\n origin: event.destination.origin,\n aspect: event.destination.aspect,\n } as never,\n bytes.value,\n {\n offset: event.dataLayout.offset ?? 0,\n ...(event.dataLayout.bytesPerRow === undefined\n ? {}\n : { bytesPerRow: event.dataLayout.bytesPerRow }),\n ...(event.dataLayout.rowsPerImage === undefined\n ? {}\n : { rowsPerImage: event.dataLayout.rowsPerImage }),\n },\n event.size,\n );\n return result.ok ? ok(undefined) : eventFailure(eventIndex, event, 'write', result.error);\n}\n\nfunction submit(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'submit' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const commandBuffers: CommandBuffer[] = [];\n for (const id of event.cmdHandleIds) {\n const entry = context.table.get(id);\n if (entry?.resource.kind !== 'encoder' || entry.resource.role !== 'command-buffer') {\n return missingResource(eventIndex, event, id, 'encoder');\n }\n commandBuffers.push(entry.resource.value as CommandBuffer);\n }\n const result = context.queue.submit(commandBuffers);\n return result.ok ? ok(undefined) : eventFailure(eventIndex, event, 'submit', result.error);\n}\n\nfunction beginRenderPass(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'beginRenderPass' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n if (!encoder.ok) return encoder;\n const colors = Array.from(event.desc.colorAttachments).map((attachment, index) => {\n if (attachment === null || attachment === undefined) return attachment;\n const viewId = event.colorAttachmentViewHandleIds[index];\n const view = viewId === undefined ? undefined : context.table.get(viewId)?.resource;\n if (view?.kind !== 'texture-view') throw new Error(`missing color attachment view ${viewId}`);\n const resolveId = event.colorAttachmentResolveTargetHandleIds?.[index];\n const resolve = resolveId === undefined ? undefined : context.table.get(resolveId)?.resource;\n return {\n ...attachment,\n view: view.value,\n ...(resolve?.kind === 'texture-view' ? { resolveTarget: resolve.value } : {}),\n } as RenderPassColorAttachment;\n });\n const depth =\n event.depthStencilViewHandleId === undefined\n ? undefined\n : context.table.get(event.depthStencilViewHandleId)?.resource;\n const descriptor = {\n ...event.desc,\n colorAttachments: colors,\n ...(depth?.kind === 'texture-view'\n ? {\n depthStencilAttachment: {\n ...event.desc.depthStencilAttachment,\n view: depth.value,\n } as RenderPassDepthStencilAttachment,\n }\n : {}),\n };\n const pass = encoder.value.beginRenderPass(descriptor as never);\n return context.table.set(\n event.passHandleId,\n { kind: 'encoder', role: 'render-pass', value: pass },\n eventRecord(event),\n );\n}\n\nfunction beginComputePass(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'beginComputePass' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n if (!encoder.ok) return encoder;\n const pass = encoder.value.beginComputePass(JSON.parse(JSON.stringify(event.desc)));\n return context.table.set(\n event.passHandleId,\n { kind: 'encoder', role: 'compute-pass', value: pass },\n eventRecord(event),\n );\n}\n\nfunction copyBufferToBuffer(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'copyBufferToBuffer' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n const source = requireResource<Buffer>(\n context,\n event.sourceHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n const destination = requireResource<Buffer>(\n context,\n event.destinationHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n if (!encoder.ok) return encoder;\n if (!source.ok) return source;\n if (!destination.ok) return destination;\n encoder.value.copyBufferToBuffer(\n source.value,\n event.sourceOffset,\n destination.value,\n event.destinationOffset,\n event.size,\n );\n return ok(undefined);\n}\n\nfunction copyBufferToTexture(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'copyBufferToTexture' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n const buffer = requireResource<Buffer>(\n context,\n event.source.bufferHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n const texture = requireResource<Texture>(\n context,\n event.destination.textureHandleId,\n 'texture',\n eventIndex,\n event.kind,\n );\n if (!encoder.ok) return encoder;\n if (!buffer.ok) return buffer;\n if (!texture.ok) return texture;\n encoder.value.copyBufferToTexture(\n { ...event.source, buffer: buffer.value } as never,\n { ...event.destination, texture: texture.value } as never,\n event.copySize,\n );\n return ok(undefined);\n}\n\nfunction copyTextureToBuffer(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'copyTextureToBuffer' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n const texture = requireResource<Texture>(\n context,\n event.source.textureHandleId,\n 'texture',\n eventIndex,\n event.kind,\n );\n const buffer = requireResource<Buffer>(\n context,\n event.destination.bufferHandleId,\n 'buffer',\n eventIndex,\n event.kind,\n );\n if (!encoder.ok) return encoder;\n if (!texture.ok) return texture;\n if (!buffer.ok) return buffer;\n encoder.value.copyTextureToBuffer(\n { ...event.source, texture: texture.value } as never,\n { ...event.destination, buffer: buffer.value } as never,\n event.copySize,\n );\n return ok(undefined);\n}\n\nfunction copyTextureToTexture(\n context: ReplayExecutionContext,\n event: Extract<RhiCallEvent, { kind: 'copyTextureToTexture' }>,\n eventIndex: number,\n): Result<void, RhiDebugError> {\n const encoder = requireResource<RhiCommandEncoder>(\n context,\n event.cmdHandleId,\n 'encoder',\n eventIndex,\n event.kind,\n 'command',\n );\n const source = requireResource<Texture>(\n context,\n event.source.textureHandleId,\n 'texture',\n eventIndex,\n event.kind,\n );\n const destination = requireResource<Texture>(\n context,\n event.destination.textureHandleId,\n 'texture',\n eventIndex,\n event.kind,\n );\n if (!encoder.ok) return encoder;\n if (!source.ok) return source;\n if (!destination.ok) return destination;\n encoder.value.copyTextureToTexture(\n { ...event.source, texture: source.value } as never,\n { ...event.destination, texture: destination.value } as never,\n event.copySize,\n );\n return ok(undefined);\n}\n","import type {\n Buffer,\n MappedBuffer,\n RhiCommandEncoder,\n RhiDevice,\n Texture,\n} from '@forgeax/engine-rhi';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport type { CreateShaderModuleFn } from '../recorder';\nimport type { ResourceTable, ResourceTableEntry } from './resources';\nimport {\n getTextureReadbackPlan,\n isDepthStencilTextureFormat,\n isDepthTextureFormat,\n textureBytesPerTexel,\n} from './texture-format';\n\nconst COPY_DST_MAP_READ = 0x9;\nconst GPU_MAP_MODE_READ = 0x1;\n\nexport interface BufferReadbackRange {\n readonly offset: number;\n readonly size?: number;\n}\n\nexport interface TextureReadbackSubresource {\n readonly mipLevel?: number;\n readonly arrayLayer?: number;\n readonly aspect?: 'all' | 'depth-only' | 'stencil-only';\n}\n\nexport type ReplayReadbackRequest = BufferReadbackRange | TextureReadbackSubresource;\n\nexport interface ReplayReadbackProvenance {\n readonly generation: number;\n readonly resourceId: string;\n readonly subresource: ReplayReadbackRequest | null;\n readonly selectedWorkIndex?: number;\n}\n\nexport interface ReplayReadbackResult {\n readonly resourceId: string;\n readonly kind: 'buffer' | 'texture';\n readonly format?: string;\n readonly width?: number;\n readonly height?: number;\n readonly bytes: Uint8Array;\n readonly provenance: ReplayReadbackProvenance;\n}\n\ntype ReplayReadbackPayload = Omit<ReplayReadbackResult, 'provenance'>;\n\nexport async function readReplayResource(\n device: RhiDevice,\n table: ResourceTable,\n resourceId: string,\n subresource: ReplayReadbackRequest | undefined,\n createShaderModule: CreateShaderModuleFn,\n): Promise<Result<ReplayReadbackResult, RhiDebugError>> {\n const entry = table.get(resourceId);\n if (entry === undefined)\n return readbackFailure(`resource ${resourceId} is not present in the current generation`);\n let result: Result<ReplayReadbackPayload, RhiDebugError>;\n if (entry.resource.kind === 'texture-view') {\n const sourceId = stringField(entry.descriptor, 'sourceHandleId');\n const source = sourceId === undefined ? undefined : table.get(sourceId);\n if (source === undefined || source.resource.kind !== 'texture') {\n return readbackFailure(`texture view ${resourceId} has no readable source texture`);\n }\n const sourceSubresource = resolveTextureViewSubresource(entry, source, subresource);\n if (!sourceSubresource.ok) return sourceSubresource;\n result = await readTexture(\n device,\n source,\n resourceId,\n sourceSubresource.value,\n createShaderModule,\n );\n } else if (entry.resource.kind === 'texture') {\n result = await readTexture(device, entry, resourceId, subresource, createShaderModule);\n } else if (entry.resource.kind === 'buffer') {\n result = await readBuffer(device, entry, resourceId, subresource);\n } else {\n return readbackFailure(`resource ${resourceId} is not readable by the v7 core matrix`);\n }\n if (!result.ok) return result;\n return ok({\n ...result.value,\n provenance: {\n generation: table.generation,\n resourceId,\n subresource: subresource ?? null,\n },\n });\n}\n\nfunction resolveTextureViewSubresource(\n view: ResourceTableEntry,\n source: ResourceTableEntry,\n requested: ReplayReadbackRequest | undefined,\n): Result<ReplayReadbackRequest | undefined, RhiDebugError> {\n if (requested === undefined || isBufferRange(requested)) return ok(requested);\n const sourceDescriptor = recordField(source.descriptor, 'desc');\n const sourceSize = textureSize(sourceDescriptor?.size);\n const sourceMipCount = numberField(sourceDescriptor, 'mipLevelCount') ?? 1;\n const viewDescriptor = recordField(view.descriptor, 'desc');\n const baseMipLevel = numberField(viewDescriptor, 'baseMipLevel') ?? 0;\n const baseArrayLayer = numberField(viewDescriptor, 'baseArrayLayer') ?? 0;\n const mipLevelCount =\n numberField(viewDescriptor, 'mipLevelCount') ?? sourceMipCount - baseMipLevel;\n const arrayLayerCount =\n numberField(viewDescriptor, 'arrayLayerCount') ??\n sourceSize.depthOrArrayLayers - baseArrayLayer;\n const localMipLevel = requested.mipLevel ?? 0;\n const localArrayLayer = requested.arrayLayer ?? 0;\n if (\n !validIndex(baseMipLevel, sourceMipCount + 1) ||\n !validIndex(baseArrayLayer, sourceSize.depthOrArrayLayers + 1) ||\n !validIndex(localMipLevel, mipLevelCount) ||\n !validIndex(localArrayLayer, arrayLayerCount) ||\n baseMipLevel + mipLevelCount > sourceMipCount ||\n baseArrayLayer + arrayLayerCount > sourceSize.depthOrArrayLayers\n ) {\n return readbackFailure('texture view subresource is outside the recorded view extent');\n }\n return ok({\n ...requested,\n mipLevel: baseMipLevel + localMipLevel,\n arrayLayer: baseArrayLayer + localArrayLayer,\n });\n}\n\nasync function readBuffer(\n device: RhiDevice,\n entry: ResourceTableEntry,\n resourceId: string,\n subresource: ReplayReadbackRequest | undefined,\n): Promise<Result<ReplayReadbackPayload, RhiDebugError>> {\n const size = numberField(recordField(entry.descriptor, 'desc'), 'size');\n if (size === undefined || !Number.isSafeInteger(size) || size < 0)\n return readbackFailure(`buffer ${resourceId} has no valid recorded size`);\n const request = isBufferRange(subresource) ? subresource : undefined;\n const offset = request?.offset ?? 0;\n const requestedSize = request?.size ?? size - offset;\n if (!validRange(offset, requestedSize, size))\n return readbackFailure(\n `buffer range ${offset}:${requestedSize} escapes ${resourceId} (${size} bytes)`,\n );\n const bytes = await copyBufferBytes(\n device,\n entry.resource.value as Buffer,\n offset,\n requestedSize,\n );\n if (!bytes.ok) return bytes;\n return ok({ resourceId, kind: 'buffer', bytes: bytes.value });\n}\n\nasync function readTexture(\n device: RhiDevice,\n entry: ResourceTableEntry,\n resourceId: string,\n subresource: ReplayReadbackRequest | undefined,\n createShaderModule: CreateShaderModuleFn,\n): Promise<Result<ReplayReadbackPayload, RhiDebugError>> {\n const descriptor = recordField(entry.descriptor, 'desc');\n const format = stringField(descriptor, 'format');\n const dimension = stringField(descriptor, 'dimension') ?? '2d';\n if (format === undefined) return readbackFailure(`texture ${resourceId} has no recorded format`);\n const plan = getTextureReadbackPlan({ format, dimension });\n if (!plan.supported) {\n return err(\n createRhiDebugError('readback-unsupported', {\n stage: 'readback',\n resourceId,\n format,\n reason: plan.reason,\n }),\n );\n }\n const size = textureSize(recordField(descriptor, 'size'));\n const mipLevel = textureSubresourceField(subresource, 'mipLevel') ?? 0;\n const arrayLayer = textureSubresourceField(subresource, 'arrayLayer') ?? 0;\n const mipCount = numberField(descriptor, 'mipLevelCount') ?? 1;\n if (\n !validIndex(mipLevel, mipCount) ||\n !Number.isInteger(arrayLayer) ||\n arrayLayer < 0 ||\n arrayLayer >= size.depthOrArrayLayers\n ) {\n return readbackFailure(`texture subresource for ${resourceId} is outside the recorded extent`);\n }\n const width = Math.max(1, Math.floor(size.width / 2 ** mipLevel));\n const height = Math.max(1, Math.floor(size.height / 2 ** mipLevel));\n const requestedAspect = textureAspect(subresource);\n if (isDepthStencilTextureFormat(format)) {\n if (requestedAspect === 'all') {\n return readbackUnsupported(\n resourceId,\n format,\n `${format} requires an explicit depth-only or stencil-only aspect`,\n );\n }\n if (requestedAspect === 'stencil-only') {\n const bytes = await copyTextureBytes(\n device,\n entry.resource.value as Texture,\n align256(width) * height,\n {\n mipLevel,\n arrayLayer,\n aspect: 'stencil-only',\n width,\n height,\n bytesPerRow: align256(width),\n rowBytes: width,\n },\n );\n if (!bytes.ok) return bytes;\n return ok({ resourceId, kind: 'texture', format, width, height, bytes: bytes.value });\n }\n if (format === 'depth24plus-stencil8') {\n return blitDepth24PlusTexture(\n device,\n entry.resource.value as Texture,\n resourceId,\n format,\n width,\n height,\n mipLevel,\n arrayLayer,\n createShaderModule,\n );\n }\n }\n if (format === 'depth24plus') {\n if (requestedAspect === 'stencil-only') {\n return readbackUnsupported(resourceId, format, 'depth24plus has no stencil aspect');\n }\n return blitDepth24PlusTexture(\n device,\n entry.resource.value as Texture,\n resourceId,\n format,\n width,\n height,\n mipLevel,\n arrayLayer,\n createShaderModule,\n );\n }\n const texelBytes = textureBytesPerTexel(format);\n if (texelBytes === undefined)\n return readbackFailure(`texture format ${format} has no byte layout`);\n const rowBytes = width * texelBytes;\n const bytesPerRow = align256(rowBytes);\n const bytes = await copyTextureBytes(\n device,\n entry.resource.value as Texture,\n bytesPerRow * height,\n {\n mipLevel,\n arrayLayer,\n aspect: directTextureAspect(format, requestedAspect),\n width,\n height,\n bytesPerRow,\n rowBytes,\n },\n );\n if (!bytes.ok) return bytes;\n return ok({ resourceId, kind: 'texture', format, width, height, bytes: bytes.value });\n}\n\nfunction readbackUnsupported(\n resourceId: string,\n format: string,\n reason: string,\n): Result<never, RhiDebugError> {\n return err(\n createRhiDebugError('readback-unsupported', {\n stage: 'readback',\n resourceId,\n format,\n reason,\n }),\n );\n}\n\nfunction directTextureAspect(\n format: string,\n aspect: 'all' | 'depth-only' | 'stencil-only',\n): 'all' | 'depth-only' | 'stencil-only' {\n if (isDepthTextureFormat(format) && !isDepthStencilTextureFormat(format)) {\n return 'depth-only';\n }\n if (isDepthStencilTextureFormat(format) && aspect === 'all') return 'depth-only';\n return aspect;\n}\n\nconst DEPTH_BLIT_SHADER = `\n@group(0) @binding(0) var sourceDepth: texture_depth_2d;\n\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {\n var positions = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 3.0, -1.0),\n vec2<f32>(-1.0, 3.0),\n );\n var output: VertexOutput;\n output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);\n return output;\n}\n\n@fragment\nfn fs_main(@builtin(position) position: vec4<f32>) -> @location(0) vec4<f32> {\n let pixel = vec2<i32>(i32(position.x), i32(position.y));\n return vec4<f32>(textureLoad(sourceDepth, pixel, 0), 0.0, 0.0, 1.0);\n}\n`;\n\nasync function blitDepth24PlusTexture(\n device: RhiDevice,\n source: Texture,\n resourceId: string,\n format: string,\n width: number,\n height: number,\n mipLevel: number,\n arrayLayer: number,\n createShaderModule: CreateShaderModuleFn,\n): Promise<Result<ReplayReadbackPayload, RhiDebugError>> {\n let output: Texture | undefined;\n let staging: Buffer | undefined;\n let mapped: MappedBuffer | undefined;\n try {\n const sourceView = device.createTextureView(source, {\n dimension: '2d',\n baseMipLevel: mipLevel,\n mipLevelCount: 1,\n baseArrayLayer: arrayLayer,\n arrayLayerCount: 1,\n aspect: 'depth-only',\n });\n if (!sourceView.ok)\n return readbackFailure(\n `depth readback source view creation failed: ${sourceView.error.code}`,\n );\n\n const layout = device.createBindGroupLayout({\n entries: [\n {\n binding: 0,\n visibility: 0x2,\n texture: { sampleType: 'depth', viewDimension: '2d', multisampled: false },\n },\n ],\n });\n if (!layout.ok)\n return readbackFailure(`depth readback bind group layout failed: ${layout.error.code}`);\n const pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [layout.value] });\n if (!pipelineLayout.ok)\n return readbackFailure(`depth readback pipeline layout failed: ${pipelineLayout.error.code}`);\n const shader = await createShaderModule(device, {\n code: DEPTH_BLIT_SHADER,\n label: 'rhi-debug-depth-readback',\n });\n if (!shader.ok) return readbackFailure(`depth readback shader failed: ${shader.error.code}`);\n const pipeline = device.createRenderPipeline({\n layout: pipelineLayout.value,\n vertex: { module: shader.value, entryPoint: 'vs_main', buffers: [] },\n fragment: {\n module: shader.value,\n entryPoint: 'fs_main',\n targets: [{ format: 'rgba32float' }],\n },\n primitive: { topology: 'triangle-list' },\n } as never);\n if (!pipeline.ok)\n return readbackFailure(`depth readback pipeline failed: ${pipeline.error.code}`);\n const bindGroup = device.createBindGroup({\n layout: layout.value,\n entries: [{ binding: 0, resource: { kind: 'textureView', value: sourceView.value } }],\n });\n if (!bindGroup.ok)\n return readbackFailure(`depth readback bind group failed: ${bindGroup.error.code}`);\n\n const outputResult = device.createTexture({\n size: { width, height, depthOrArrayLayers: 1 },\n format: 'rgba32float',\n dimension: '2d',\n mipLevelCount: 1,\n sampleCount: 1,\n usage: 0x11,\n });\n if (!outputResult.ok)\n return readbackFailure(`depth readback output texture failed: ${outputResult.error.code}`);\n output = outputResult.value;\n const outputView = device.createTextureView(output, { dimension: '2d' });\n if (!outputView.ok)\n return readbackFailure(`depth readback output view failed: ${outputView.error.code}`);\n\n const encoderResult = device.createCommandEncoder({});\n if (!encoderResult.ok)\n return readbackFailure(`depth readback encoder failed: ${encoderResult.error.code}`);\n const pass = encoderResult.value.beginRenderPass({\n colorAttachments: [\n {\n view: outputView.value,\n loadOp: 'clear',\n storeOp: 'store',\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n },\n ],\n } as never);\n pass.setPipeline(pipeline.value);\n pass.setBindGroup(0, bindGroup.value);\n pass.draw(3, 1, 0, 0);\n pass.end();\n\n const bytesPerRow = align256(width * 16);\n const created = device.createBuffer({ size: bytesPerRow * height, usage: COPY_DST_MAP_READ });\n if (!created.ok)\n return readbackFailure(`depth readback staging buffer failed: ${created.error.code}`);\n staging = created.value;\n encoderResult.value.copyTextureToBuffer(\n { texture: output, aspect: 'all' } as never,\n { buffer: staging, offset: 0, bytesPerRow, rowsPerImage: height } as never,\n { width, height, depthOrArrayLayers: 1 },\n );\n const finished = encoderResult.value.finish();\n if (!finished.ok)\n return readbackFailure(`depth readback finish failed: ${finished.error.code}`);\n const submitted = device.queue.submit([finished.value]);\n if (!submitted.ok)\n return readbackFailure(`depth readback submit failed: ${submitted.error.code}`);\n await device.queue.onSubmittedWorkDone();\n const mappedResult = await staging.mapAsync(GPU_MAP_MODE_READ);\n if (!mappedResult.ok)\n return readbackFailure(`depth readback map failed: ${mappedResult.error.code}`);\n mapped = mappedResult.value;\n const range = mapped.getMappedRange(0, bytesPerRow * height);\n if (!range.ok)\n return readbackFailure(`depth readback mapped range failed: ${range.error.code}`);\n const padded = new Uint8Array(range.value);\n const bytes = new Uint8Array(width * height * 4);\n for (let row = 0; row < height; row++) {\n for (let column = 0; column < width; column++) {\n const sourceOffset = row * bytesPerRow + column * 16;\n const targetOffset = (row * width + column) * 4;\n bytes.set(padded.subarray(sourceOffset, sourceOffset + 4), targetOffset);\n }\n }\n return ok({ resourceId, kind: 'texture', format, width, height, bytes });\n } catch (cause) {\n return readbackFailure(`depth readback failed: ${messageOf(cause)}`);\n } finally {\n if (mapped !== undefined) mapped.unmap();\n if (staging !== undefined) device.destroyBuffer(staging);\n if (output !== undefined) device.destroyTexture(output);\n }\n}\n\nasync function copyBufferBytes(\n device: RhiDevice,\n source: Buffer,\n sourceOffset: number,\n size: number,\n): Promise<Result<Uint8Array, RhiDebugError>> {\n let staging: Buffer | undefined;\n let mapped: MappedBuffer | undefined;\n try {\n const alignedSourceOffset = sourceOffset - (sourceOffset % 4);\n const leadingBytes = sourceOffset - alignedSourceOffset;\n const copySize = align4(leadingBytes + size);\n const created = device.createBuffer({ size: Math.max(4, copySize), usage: COPY_DST_MAP_READ });\n if (!created.ok)\n return readbackFailure(`staging buffer creation failed: ${created.error.code}`);\n staging = created.value;\n const encoderResult = device.createCommandEncoder({});\n if (!encoderResult.ok)\n return readbackFailure(`readback encoder creation failed: ${encoderResult.error.code}`);\n const encoder = encoderResult.value;\n encoder.copyBufferToBuffer(source, alignedSourceOffset, staging, 0, copySize);\n const finished = encoder.finish();\n if (!finished.ok)\n return readbackFailure(`readback encoder finish failed: ${finished.error.code}`);\n const submitted = device.queue.submit([finished.value]);\n if (!submitted.ok) return readbackFailure(`readback submit failed: ${submitted.error.code}`);\n await device.queue.onSubmittedWorkDone();\n const mappedResult = await staging.mapAsync(GPU_MAP_MODE_READ);\n if (!mappedResult.ok) return readbackFailure(`readback map failed: ${mappedResult.error.code}`);\n mapped = mappedResult.value;\n const range = mapped.getMappedRange(0, copySize);\n if (!range.ok) return readbackFailure(`readback mapped range failed: ${range.error.code}`);\n return ok(new Uint8Array(range.value).slice(leadingBytes, leadingBytes + size));\n } catch (cause) {\n return readbackFailure(`buffer readback failed: ${messageOf(cause)}`);\n } finally {\n if (mapped !== undefined) mapped.unmap();\n if (staging !== undefined) device.destroyBuffer(staging);\n }\n}\n\nasync function copyTextureBytes(\n device: RhiDevice,\n source: Texture,\n bufferSize: number,\n copy: {\n readonly mipLevel: number;\n readonly arrayLayer: number;\n readonly aspect: 'all' | 'depth-only' | 'stencil-only';\n readonly width: number;\n readonly height: number;\n readonly bytesPerRow: number;\n readonly rowBytes: number;\n },\n): Promise<Result<Uint8Array, RhiDebugError>> {\n let staging: Buffer | undefined;\n let mapped: MappedBuffer | undefined;\n try {\n const created = device.createBuffer({ size: bufferSize, usage: COPY_DST_MAP_READ });\n if (!created.ok)\n return readbackFailure(`staging buffer creation failed: ${created.error.code}`);\n staging = created.value;\n const encoderResult = device.createCommandEncoder({});\n if (!encoderResult.ok)\n return readbackFailure(`readback encoder creation failed: ${encoderResult.error.code}`);\n const encoder: RhiCommandEncoder = encoderResult.value;\n encoder.copyTextureToBuffer(\n {\n texture: source,\n mipLevel: copy.mipLevel,\n origin: { x: 0, y: 0, z: copy.arrayLayer },\n aspect: copy.aspect,\n } as never,\n {\n buffer: staging,\n offset: 0,\n bytesPerRow: copy.bytesPerRow,\n rowsPerImage: copy.height,\n } as never,\n { width: copy.width, height: copy.height, depthOrArrayLayers: 1 },\n );\n const finished = encoder.finish();\n if (!finished.ok)\n return readbackFailure(`readback encoder finish failed: ${finished.error.code}`);\n const submitted = device.queue.submit([finished.value]);\n if (!submitted.ok) return readbackFailure(`readback submit failed: ${submitted.error.code}`);\n await device.queue.onSubmittedWorkDone();\n const mappedResult = await staging.mapAsync(GPU_MAP_MODE_READ);\n if (!mappedResult.ok) return readbackFailure(`readback map failed: ${mappedResult.error.code}`);\n mapped = mappedResult.value;\n const range = mapped.getMappedRange(0, bufferSize);\n if (!range.ok) return readbackFailure(`readback mapped range failed: ${range.error.code}`);\n const padded = new Uint8Array(range.value);\n const bytes = new Uint8Array(copy.rowBytes * copy.height);\n for (let row = 0; row < copy.height; row++) {\n bytes.set(\n padded.subarray(row * copy.bytesPerRow, row * copy.bytesPerRow + copy.rowBytes),\n row * copy.rowBytes,\n );\n }\n return ok(bytes);\n } catch (cause) {\n return readbackFailure(`texture readback failed: ${messageOf(cause)}`);\n } finally {\n if (mapped !== undefined) mapped.unmap();\n if (staging !== undefined) device.destroyBuffer(staging);\n }\n}\n\nfunction readbackFailure(cause: string): Result<never, RhiDebugError> {\n return err(createRhiDebugError('readback-failed', { stage: 'readback', cause }));\n}\n\nfunction recordField(\n value: Record<string, unknown> | undefined,\n key: string,\n): Record<string, unknown> | undefined {\n const field = value?.[key];\n return field !== null && typeof field === 'object'\n ? (field as Record<string, unknown>)\n : undefined;\n}\n\nfunction stringField(value: Record<string, unknown> | undefined, key: string): string | undefined {\n const field = value?.[key];\n return typeof field === 'string' ? field : undefined;\n}\n\nfunction numberField(value: Record<string, unknown> | undefined, key: string): number | undefined {\n const field = value?.[key];\n return typeof field === 'number' ? field : undefined;\n}\n\nfunction textureSize(value: unknown): {\n readonly width: number;\n readonly height: number;\n readonly depthOrArrayLayers: number;\n} {\n if (Array.isArray(value)) {\n return {\n width: integerOr(value[0], 1),\n height: integerOr(value[1], integerOr(value[0], 1)),\n depthOrArrayLayers: integerOr(value[2], 1),\n };\n }\n const object =\n value !== null && typeof value === 'object' ? (value as Record<string, unknown>) : undefined;\n return {\n width: integerOr(object?.width, 1),\n height: integerOr(object?.height, integerOr(object?.width, 1)),\n depthOrArrayLayers: integerOr(object?.depthOrArrayLayers, 1),\n };\n}\n\nfunction integerOr(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : fallback;\n}\n\nfunction textureSubresourceField(\n value: ReplayReadbackRequest | undefined,\n key: 'mipLevel' | 'arrayLayer',\n): number | undefined {\n if (value === undefined || isBufferRange(value)) return undefined;\n return value[key];\n}\n\nfunction textureAspect(\n value: ReplayReadbackRequest | undefined,\n): 'all' | 'depth-only' | 'stencil-only' {\n if (value === undefined || isBufferRange(value)) return 'all';\n return value.aspect ?? 'all';\n}\n\nfunction isBufferRange(value: ReplayReadbackRequest | undefined): value is BufferReadbackRange {\n return value !== undefined && 'offset' in value;\n}\n\nfunction validRange(offset: number, size: number, total: number): boolean {\n return (\n Number.isSafeInteger(offset) &&\n Number.isSafeInteger(size) &&\n offset >= 0 &&\n size >= 0 &&\n offset + size <= total\n );\n}\n\nfunction validIndex(value: number, count: number): boolean {\n return Number.isInteger(value) && value >= 0 && value < count;\n}\n\nfunction align256(value: number): number {\n return Math.max(256, Math.ceil(value / 256) * 256);\n}\n\nfunction align4(value: number): number {\n return Math.ceil(value / 4) * 4;\n}\n\nfunction messageOf(cause: unknown): string {\n return cause instanceof Error ? cause.message : String(cause);\n}\n","import type {\n BindGroup,\n BindGroupLayout,\n Buffer,\n CommandBuffer,\n ComputePipeline,\n PipelineLayout,\n RenderPipeline,\n RhiCommandEncoder,\n RhiComputePassEncoder,\n RhiDevice,\n RhiRenderPassEncoder,\n Sampler,\n ShaderModule,\n Texture,\n TextureView,\n} from '@forgeax/engine-rhi';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport type { ResourceKind } from '../protocol/types';\n\nexport type ReplayResource = {\n readonly role?: string;\n} & (\n | { readonly kind: 'buffer'; readonly value: Buffer }\n | { readonly kind: 'texture'; readonly value: Texture }\n | { readonly kind: 'texture-view'; readonly value: TextureView }\n | { readonly kind: 'sampler'; readonly value: Sampler }\n | { readonly kind: 'shader-module'; readonly value: ShaderModule }\n | {\n readonly kind: 'pipeline';\n readonly role: 'render' | 'compute';\n readonly value: RenderPipeline | ComputePipeline;\n }\n | {\n readonly kind: 'binding';\n readonly role: 'bind-group' | 'bind-group-layout' | 'pipeline-layout';\n readonly value: BindGroup | BindGroupLayout | PipelineLayout;\n }\n | {\n readonly kind: 'encoder';\n readonly role: 'command' | 'command-buffer' | 'render-pass' | 'compute-pass';\n readonly value:\n | RhiCommandEncoder\n | RhiRenderPassEncoder\n | RhiComputePassEncoder\n | CommandBuffer;\n }\n);\n\nexport interface ResourceTableEntry {\n readonly resourceId: string;\n readonly generation: number;\n readonly resource: ReplayResource;\n readonly descriptor: Record<string, unknown> | undefined;\n}\n\nexport class ResourceTable {\n private readonly entries = new Map<string, ResourceTableEntry>();\n private disposed = false;\n private currentGeneration: number;\n\n constructor(\n private readonly device: RhiDevice,\n generation = 0,\n ) {\n this.currentGeneration = generation;\n }\n\n get generation(): number {\n return this.currentGeneration;\n }\n\n get(resourceId: string): ResourceTableEntry | undefined {\n return this.entries.get(resourceId);\n }\n\n set(\n resourceId: string,\n resource: ReplayResource,\n descriptor?: Record<string, unknown> | undefined,\n ): Result<void, RhiDebugError> {\n if (this.disposed) {\n return err(\n createRhiDebugError('replay-position-invalid', {\n requested: this.generation,\n available: -1,\n }),\n );\n }\n this.entries.set(resourceId, {\n resourceId,\n generation: this.generation,\n resource,\n descriptor,\n });\n return ok(undefined);\n }\n\n delete(resourceId: string): void {\n this.entries.delete(resourceId);\n }\n\n values(): IterableIterator<ResourceTableEntry> {\n return this.entries.values();\n }\n\n reset(): Result<void, RhiDebugError> {\n const result = this.releaseAll();\n if (!result.ok) return result;\n this.entries.clear();\n this.currentGeneration += 1;\n return ok(undefined);\n }\n\n dispose(): Result<void, RhiDebugError> {\n if (this.disposed) return ok(undefined);\n const result = this.releaseAll();\n this.entries.clear();\n this.disposed = true;\n return result;\n }\n\n private releaseAll(): Result<void, RhiDebugError> {\n let firstFailure: Result<never, RhiDebugError> | undefined;\n for (const entry of this.entries.values()) {\n if (entry.resource.kind === 'buffer') {\n const result = this.device.destroyBuffer(entry.resource.value);\n if (!result.ok && firstFailure === undefined)\n firstFailure = resourceDisposeFailure(entry.resourceId, result.error.code);\n } else if (entry.resource.kind === 'texture') {\n const result = this.device.destroyTexture(entry.resource.value);\n if (!result.ok && firstFailure === undefined)\n firstFailure = resourceDisposeFailure(entry.resourceId, result.error.code);\n }\n }\n return firstFailure ?? ok(undefined);\n }\n}\n\nfunction resourceDisposeFailure(resourceId: string, cause: string): Result<never, RhiDebugError> {\n return err(\n createRhiDebugError('replay-event-failed', {\n eventIndex: -1,\n kind: `dispose:${resourceId}`,\n stage: 'create',\n cause,\n }),\n );\n}\n\nexport function isResourceKind(resource: ReplayResource, kind: ResourceKind): boolean {\n return resource.kind === kind;\n}\n","import type {\n RhiCommandEncoder,\n RhiComputePassEncoder,\n RhiDevice,\n RhiRenderPassEncoder,\n} from '@forgeax/engine-rhi';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { createRhiDebugError, type RhiDebugError } from '../errors';\nimport { buildFrameModel, type WorkBinding, type WorkPipeline } from '../frame-model';\nimport { buildTapeIndex, type TapeIndex, type TapeWorkEntry } from '../protocol/tape-index';\nimport type { BootstrapResource, RhiCallEvent, Tape } from '../protocol/types';\nimport type { CreateShaderModuleFn } from '../recorder';\nimport { computeTextureLayout, projectTextureExtent } from '../texel-layout';\nimport { eventFailure, executeEvent, type ReplayExecutionContext } from './execute';\nimport {\n type BufferReadbackRange,\n type ReplayReadbackResult,\n readReplayResource,\n} from './readback';\nimport { ResourceTable } from './resources';\n\nexport interface ReplayBackend {\n readonly device: RhiDevice;\n readonly createShaderModule: CreateShaderModuleFn;\n}\n\nexport interface TextureSubresource {\n readonly mipLevel: number;\n readonly arrayLayer: number;\n readonly aspect?: 'all' | 'depth-only' | 'stencil-only';\n}\n\nexport type ReadbackSubresource = TextureSubresource | BufferReadbackRange;\n\nexport type InspectField = 'bindings' | 'pipeline' | 'pixels';\n\nexport interface WorkInspection {\n readonly workIndex: number;\n readonly eventIndex: number;\n readonly passIndex: number;\n readonly attachment: ReplayReadbackResult | undefined;\n readonly pipeline?: WorkPipeline;\n readonly bindings?: readonly WorkBinding[];\n readonly vertexBuffers?: readonly {\n readonly slot: number;\n readonly bufferHandleId: string;\n readonly offset: number;\n readonly size: number | null;\n }[];\n readonly indexBuffer?: {\n readonly bufferHandleId: string;\n readonly format: string;\n readonly offset: number;\n readonly size: number | null;\n } | null;\n readonly shaders?: WorkPipeline['shaders'];\n readonly resourceIds?: readonly string[];\n}\n\nexport interface ReplaySession {\n readonly generation: number;\n inspectWork(\n workIndex: number,\n fields?: readonly InspectField[],\n signal?: AbortSignal,\n ): Promise<Result<WorkInspection, RhiDebugError>>;\n readResource(\n resourceId: string,\n subresource?: ReadbackSubresource,\n signal?: AbortSignal,\n ): Promise<Result<ReplayReadbackResult, RhiDebugError>>;\n dispose(): Promise<Result<void, RhiDebugError>>;\n}\n\nexport async function openReplay(\n tape: Tape,\n backend: ReplayBackend,\n): Promise<Result<ReplaySession, RhiDebugError>> {\n if (tape.header.formatVersion !== 7) {\n return err(\n createRhiDebugError('tape-version-unsupported', {\n foundVersion: tape.header.formatVersion,\n expectedVersion: 7,\n }),\n );\n }\n const capabilityFailure = checkCapabilities(tape, backend.device);\n if (capabilityFailure !== undefined) return err(capabilityFailure);\n\n const index = buildTapeIndex(tape);\n const model = buildFrameModel(tape);\n const table = new ResourceTable(backend.device, 0);\n let disposed = false;\n let prepared = false;\n\n const context: ReplayExecutionContext = {\n device: backend.device,\n queue: backend.device.queue,\n tape,\n table,\n createShaderModule: backend.createShaderModule,\n };\n\n const reset = async (): Promise<Result<void, RhiDebugError>> => {\n const cleared = table.reset();\n if (!cleared.ok) return cleared;\n prepared = false;\n return ok(undefined);\n };\n\n const prepare = async (): Promise<Result<void, RhiDebugError>> => {\n if (prepared) return ok(undefined);\n for (let index = 0; index < tape.bootstrap.length; index++) {\n const resource = tape.bootstrap[index];\n if (resource === undefined) continue;\n const created = await executeBootstrapResource(context, resource, index);\n if (!created.ok) return created;\n const seeded = await seedBootstrapResource(context, resource, index);\n if (!seeded.ok) return seeded;\n }\n prepared = true;\n return ok(undefined);\n };\n\n const session: ReplaySession = {\n get generation() {\n return table.generation;\n },\n async inspectWork(workIndex, fields, signal) {\n if (disposed) return positionError(workIndex, index.works.length);\n if (signal?.aborted) return positionError(workIndex, index.works.length);\n const work = index.works[workIndex];\n const modelWork = model.works[workIndex];\n if (work === undefined) return positionError(workIndex, index.works.length);\n if (modelWork === undefined) return positionError(workIndex, index.works.length);\n const cleared = await reset();\n if (!cleared.ok) return cleared;\n const bootstrapped = await prepare();\n if (!bootstrapped.ok) return bootstrapped;\n const replayed = await replayThroughWork(context, index, work, signal);\n if (!replayed.ok) return replayed;\n const attachment = fields?.includes('pixels')\n ? await readWorkAttachment(context, index, work)\n : undefined;\n if (attachment !== undefined && !attachment.ok) return attachment;\n const selectedAttachment =\n attachment?.ok === true\n ? {\n ...attachment.value,\n provenance: {\n ...attachment.value.provenance,\n selectedWorkIndex: work.workIndex,\n },\n }\n : undefined;\n const baseInspection = {\n workIndex: work.workIndex,\n eventIndex: work.eventIndex,\n passIndex: work.passIndex,\n attachment: selectedAttachment,\n };\n return ok({\n ...baseInspection,\n ...(fields?.includes('pipeline') ? { pipeline: modelWork.pipeline } : {}),\n ...(fields?.includes('bindings')\n ? {\n bindings: modelWork.bindings,\n vertexBuffers: modelWork.vertexBuffers,\n indexBuffer: modelWork.indexBuffer,\n shaders: modelWork.pipeline.shaders,\n resourceIds: modelWork.bindings\n .map((binding) => binding.resourceId)\n .filter((resourceId): resourceId is string => resourceId !== null),\n }\n : {}),\n });\n },\n async readResource(resourceId, subresource, signal) {\n if (disposed) {\n return err(\n createRhiDebugError('replay-position-invalid', {\n requested: -1,\n available: 0,\n }),\n );\n }\n if (signal?.aborted) {\n return err(\n createRhiDebugError('readback-failed', {\n stage: 'readback',\n cause: 'readback was aborted',\n }),\n );\n }\n const cleared = await reset();\n if (!cleared.ok) return cleared;\n const bootstrapped = await prepare();\n if (!bootstrapped.ok) return bootstrapped;\n return readReplayResource(\n backend.device,\n table,\n resourceId,\n subresource,\n backend.createShaderModule,\n );\n },\n async dispose() {\n if (disposed) return ok(undefined);\n const result = table.dispose();\n disposed = true;\n prepared = false;\n return result;\n },\n };\n\n return ok(session);\n}\n\nfunction checkCapabilities(tape: Tape, device: RhiDevice): RhiDebugError | undefined {\n const recorded = tape.header.rhiCaps;\n const missing = Object.entries(recorded).filter(([key, value]) => {\n if (value !== true) return false;\n const target = device.caps[key as keyof typeof device.caps];\n return target !== true;\n });\n if (missing.length === 0) return undefined;\n return createRhiDebugError('replay-capability-mismatch', {\n stage: 'replay',\n cause: `missing capabilities: ${missing.map(([key]) => key).join(', ')}`,\n });\n}\n\nasync function executeBootstrapResource(\n context: ReplayExecutionContext,\n resource: BootstrapResource,\n bootstrapIndex: number,\n): Promise<Result<void, RhiDebugError>> {\n const event: RhiCallEvent = JSON.parse(JSON.stringify(resource.create));\n const result = await executeEvent(context, event, -bootstrapIndex - 1);\n return result;\n}\n\nasync function seedBootstrapResource(\n context: ReplayExecutionContext,\n resource: BootstrapResource,\n bootstrapIndex: number,\n): Promise<Result<void, RhiDebugError>> {\n if (resource.initialData.length === 0) return ok(undefined);\n const entry = context.table.get(resource.handleId);\n const event: RhiCallEvent = JSON.parse(JSON.stringify(resource.create));\n if (entry?.resource.kind === 'texture' && event.kind === 'createTexture') {\n return seedTextureInitialData(context, entry.resource.value, event, resource, bootstrapIndex);\n }\n if (entry?.resource.kind !== 'buffer') {\n return eventFailure(\n -bootstrapIndex - 1,\n event,\n 'lookup',\n 'bootstrap initialData requires a buffer or color texture resource',\n );\n }\n for (const slice of resource.initialData) {\n const blob = context.tape.blobs.find((candidate) => candidate.hash === slice.hash);\n if (blob === undefined) {\n return eventFailure(-bootstrapIndex - 1, event, 'lookup', `blob ${slice.hash} is missing`);\n }\n const end = slice.byteOffset + slice.byteLength;\n if (slice.byteOffset < 0 || slice.byteLength < 0 || end > blob.bytes.byteLength) {\n return eventFailure(\n -bootstrapIndex - 1,\n event,\n 'lookup',\n `blob ${slice.hash} does not contain initialData slice [${slice.byteOffset}, ${end})`,\n );\n }\n const bytes = blob.bytes.slice(slice.byteOffset, slice.byteOffset + slice.byteLength);\n const written = context.queue.writeBuffer(entry.resource.value, 0, bytes);\n if (!written.ok) {\n return eventFailure(-bootstrapIndex - 1, event, 'write', written.error);\n }\n }\n return ok(undefined);\n}\n\nfunction seedTextureInitialData(\n context: ReplayExecutionContext,\n texture: import('@forgeax/engine-rhi').Texture,\n event: Extract<RhiCallEvent, { kind: 'createTexture' }>,\n resource: BootstrapResource,\n bootstrapIndex: number,\n): Result<void, RhiDebugError> {\n const extent = projectTextureExtent(event.desc.size);\n const layout = computeTextureLayout(\n event.desc.format,\n extent.width,\n extent.height,\n extent.layerCount,\n event.desc.mipLevelCount ?? 1,\n );\n if (layout === undefined) {\n return eventFailure(\n -bootstrapIndex - 1,\n event,\n 'lookup',\n `texture format '${event.desc.format}' has no known bootstrap byte layout`,\n );\n }\n for (const slice of resource.initialData) {\n const blob = context.tape.blobs.find((candidate) => candidate.hash === slice.hash);\n if (blob === undefined) {\n return eventFailure(-bootstrapIndex - 1, event, 'lookup', `blob ${slice.hash} is missing`);\n }\n const end = slice.byteOffset + slice.byteLength;\n if (slice.byteOffset < 0 || slice.byteLength < 0 || end > blob.bytes.byteLength) {\n return eventFailure(\n -bootstrapIndex - 1,\n event,\n 'lookup',\n `blob ${slice.hash} does not contain initialData slice [${slice.byteOffset}, ${end})`,\n );\n }\n const bytes = blob.bytes.subarray(slice.byteOffset, end);\n if (bytes.byteLength !== layout.totalBytes) {\n return eventFailure(\n -bootstrapIndex - 1,\n event,\n 'lookup',\n `texture initialData has ${bytes.byteLength} bytes; expected ${layout.totalBytes}`,\n );\n }\n for (const subresource of layout.slices) {\n const rowBytes = Math.ceil(subresource.width / layout.blockWidth) * layout.bytesPerBlock;\n const rowCount = Math.ceil(subresource.height / layout.blockHeight);\n const subresourceBytes = bytes.subarray(\n subresource.byteOffset,\n subresource.byteOffset + subresource.byteLength,\n );\n const written = context.queue.writeTexture(\n {\n texture,\n mipLevel: subresource.mip,\n origin: { x: 0, y: 0, z: subresource.layer },\n aspect: 'all',\n } as never,\n subresourceBytes,\n { offset: 0, bytesPerRow: rowBytes, rowsPerImage: rowCount },\n {\n width: Math.ceil(subresource.width / layout.blockWidth) * layout.blockWidth,\n height: Math.ceil(subresource.height / layout.blockHeight) * layout.blockHeight,\n depthOrArrayLayers: 1,\n },\n );\n if (!written.ok) {\n return eventFailure(-bootstrapIndex - 1, event, 'write', written.error);\n }\n }\n }\n return ok(undefined);\n}\n\nasync function replayThroughWork(\n context: ReplayExecutionContext,\n index: TapeIndex,\n work: TapeWorkEntry,\n signal?: AbortSignal,\n): Promise<Result<void, RhiDebugError>> {\n for (let eventIndex = 0; eventIndex <= work.eventIndex; eventIndex++) {\n const event = context.tape.events[eventIndex];\n if (event === undefined) break;\n if (signal?.aborted) {\n return eventFailure(eventIndex, event, 'lookup', 'inspectWork was aborted');\n }\n const result = await executeEvent(context, event, eventIndex);\n if (!result.ok) return result;\n }\n return finalizeWorkPass(context, index, work);\n}\n\nasync function finalizeWorkPass(\n context: ReplayExecutionContext,\n index: TapeIndex,\n work: TapeWorkEntry,\n): Promise<Result<void, RhiDebugError>> {\n const pass = index.passes.find((candidate) => candidate.passIndex === work.passIndex);\n if (pass === undefined) return ok(undefined);\n const begin = context.tape.events[pass.beginEventIndex];\n if (begin?.kind !== 'beginRenderPass' && begin?.kind !== 'beginComputePass') return ok(undefined);\n const entry = context.table.get(begin.passHandleId);\n if (\n entry?.resource.kind !== 'encoder' ||\n (entry.resource.role !== 'render-pass' && entry.resource.role !== 'compute-pass')\n ) {\n return eventFailure(\n pass.beginEventIndex,\n begin,\n 'lookup',\n `pass ${begin.passHandleId} is not open`,\n );\n }\n try {\n (entry.resource.value as RhiRenderPassEncoder | RhiComputePassEncoder).end();\n } catch (cause) {\n return eventFailure(pass.endEventIndex ?? work.eventIndex, begin, 'encode', cause);\n }\n context.table.delete(begin.passHandleId);\n const finishEventIndex = findNextEvent(\n context.tape.events,\n pass.beginEventIndex,\n 'finish',\n begin.cmdHandleId,\n );\n const encoder = context.table.get(begin.cmdHandleId);\n if (encoder?.resource.kind !== 'encoder' || encoder.resource.role !== 'command') {\n return eventFailure(\n finishEventIndex ?? work.eventIndex,\n begin,\n 'lookup',\n `encoder ${begin.cmdHandleId} is not available`,\n );\n }\n const finished = (encoder.resource.value as RhiCommandEncoder).finish();\n const finishEvent = context.tape.events[finishEventIndex ?? work.eventIndex] ?? begin;\n if (!finished.ok)\n return eventFailure(finishEventIndex ?? work.eventIndex, finishEvent, 'finish', finished.error);\n context.table.set(begin.cmdHandleId, {\n kind: 'encoder',\n role: 'command-buffer',\n value: finished.value,\n });\n const submitEventIndex = findNextEvent(\n context.tape.events,\n finishEventIndex ?? pass.beginEventIndex,\n 'submit',\n begin.cmdHandleId,\n );\n const submitted = context.queue.submit([finished.value]);\n const submitEvent = context.tape.events[submitEventIndex ?? work.eventIndex] ?? begin;\n if (!submitted.ok)\n return eventFailure(\n submitEventIndex ?? work.eventIndex,\n submitEvent,\n 'submit',\n submitted.error,\n );\n await context.queue.onSubmittedWorkDone();\n return ok(undefined);\n}\n\nfunction findNextEvent(\n events: readonly RhiCallEvent[],\n start: number,\n kind: 'finish' | 'submit',\n commandId: string,\n): number | undefined {\n for (let index = start + 1; index < events.length; index++) {\n const event = events[index];\n if (event?.kind === 'finish' && kind === 'finish' && event.cmdHandleId === commandId)\n return index;\n if (event?.kind === 'submit' && kind === 'submit' && event.cmdHandleIds.includes(commandId))\n return index;\n }\n return undefined;\n}\n\nfunction positionError(requested: number, available: number): Result<never, RhiDebugError> {\n return err(\n createRhiDebugError('replay-position-invalid', {\n requested,\n available,\n }),\n );\n}\n\nasync function readWorkAttachment(\n context: ReplayExecutionContext,\n index: TapeIndex,\n work: TapeWorkEntry,\n): Promise<Result<ReplayReadbackResult, RhiDebugError>> {\n const pass = index.passes.find((candidate) => candidate.passIndex === work.passIndex);\n const begin = pass === undefined ? undefined : context.tape.events[pass.beginEventIndex];\n if (begin?.kind !== 'beginRenderPass') {\n return err(\n createRhiDebugError('readback-unsupported', {\n stage: 'readback',\n reason: 'work has no color attachment',\n }),\n );\n }\n const viewId = begin.colorAttachmentViewHandleIds.find(\n (candidate): candidate is string => candidate !== undefined,\n );\n if (viewId === undefined) {\n return err(\n createRhiDebugError('readback-unsupported', {\n stage: 'readback',\n reason: 'render pass has no readable color attachment view',\n }),\n );\n }\n return readReplayResource(\n context.device,\n context.table,\n viewId,\n undefined,\n context.createShaderModule,\n );\n}\n\nexport type { BufferReadbackRange, ReplayReadbackResult } from './readback';\n","// texel-decode.ts -- CPU decode of each uncompressed color format to RGBA8 for preview.\n//\n// The recorder promotes COPY_SRC onto every createTexture, so the replayer's\n// copyTextureToBuffer reads back each uncompressed color texture's raw bytes\n// faithfully (no format change -- replay fidelity intact). This module turns\n// those raw bytes into displayable RGBA8 entirely on the host:\n//\n// raw bytes --formatInfo--> per-channel values --[display map]--> RGBA8\n//\n// Display map (RenderDoc's default initial state, confirmed with the user):\n// float/ufloat -> clamp(v, 0, 1) * 255 (HDR highlights >1 saturate to white)\n// unorm -> v * 255 (already 0..1)\n// snorm -> clamp(v, 0, 1) * 255 (negatives clip to black)\n// uint/sint -> clamp(v, 0, 255) (small integer ids stay visible)\n//\n// Channels -> RGBA: 1ch grayscale (R=G=B), 2ch (R,G,B=0), 3ch (RGB,A=255), 4ch.\n//\n// Related: plan \"all-format color preview\"; reuses formatInfo (rhi-debug texel-layout).\n\nimport { bytesPerTexel, type FormatInfo, formatInfo } from './texel-layout';\n\n/** Decode a single IEEE half-float (16-bit) bit pattern to a JS number. */\nexport function halfToFloat(h: number): number {\n const sign = (h & 0x8000) >> 15;\n const exp = (h & 0x7c00) >> 10;\n const frac = h & 0x03ff;\n const s = sign === 0 ? 1 : -1;\n if (exp === 0) {\n // Subnormal (or zero): 2^-14 * (frac / 1024).\n return s * 2 ** -14 * (frac / 1024);\n }\n if (exp === 0x1f) {\n // Inf / NaN.\n return frac === 0 ? s * Number.POSITIVE_INFINITY : Number.NaN;\n }\n // Normal: 2^(exp-15) * (1 + frac/1024).\n return s * 2 ** (exp - 15) * (1 + frac / 1024);\n}\n\n/**\n * Decode an unsigned-int bit pattern of an 11- or 10-bit unsigned float\n * (rg11b10ufloat layout: no sign bit). 11-bit = 5 exp + 6 mantissa; 10-bit =\n * 5 exp + 5 mantissa. Bias 15, matching the f16 exponent.\n */\nfunction smallUFloatToFloat(bits: number, mantissaBits: number): number {\n const expBits = 5;\n const exp = (bits >> mantissaBits) & ((1 << expBits) - 1);\n const mantMax = 1 << mantissaBits;\n const frac = bits & (mantMax - 1);\n if (exp === 0) return 2 ** -14 * (frac / mantMax);\n if (exp === 0x1f) return frac === 0 ? Number.POSITIVE_INFINITY : Number.NaN;\n return 2 ** (exp - 15) * (1 + frac / mantMax);\n}\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\n/** Map one decoded channel value to a 0..255 display byte by channel type. */\nfunction toByte(v: number, channelType: FormatInfo['channelType']): number {\n // uint/sint: small integer ids stay visible (clamp 0..255, no normalize).\n if (channelType === 'uint' || channelType === 'sint') {\n return Math.round(v < 0 ? 0 : v > 255 ? 255 : v);\n }\n // float/ufloat clamp HDR to [0,1]; unorm already 0..1; snorm clips negatives.\n return Math.round(clamp01(v) * 255);\n}\n\n/**\n * Read the `channels` raw channel values of one texel at byte offset `off`.\n * Plain formats read each channel at a uniform per-channel byte width; packed\n * formats unpack the single 32-bit word by bit-field. Values are returned in the\n * format's native channel order (BGRA swizzle handled by the caller).\n */\nfunction readTexel(\n view: DataView,\n off: number,\n info: FormatInfo,\n channelBytes: number,\n): [number, number, number, number] {\n const out: [number, number, number, number] = [0, 0, 0, 1];\n\n if (info.packed === 'rgb10a2unorm') {\n const word = view.getUint32(off, true);\n out[0] = (word & 0x3ff) / 1023;\n out[1] = ((word >> 10) & 0x3ff) / 1023;\n out[2] = ((word >> 20) & 0x3ff) / 1023;\n out[3] = ((word >> 30) & 0x3) / 3;\n return out;\n }\n if (info.packed === 'rg11b10ufloat') {\n const word = view.getUint32(off, true);\n out[0] = smallUFloatToFloat(word & 0x7ff, 6);\n out[1] = smallUFloatToFloat((word >> 11) & 0x7ff, 6);\n out[2] = smallUFloatToFloat((word >> 22) & 0x3ff, 5);\n out[3] = 1;\n return out;\n }\n\n for (let c = 0; c < info.channels; c++) {\n const co = off + c * channelBytes;\n let v: number;\n switch (info.channelType) {\n case 'float':\n v = channelBytes === 2 ? halfToFloat(view.getUint16(co, true)) : view.getFloat32(co, true);\n break;\n case 'unorm':\n v =\n channelBytes === 1\n ? view.getUint8(co) / 255\n : channelBytes === 2\n ? view.getUint16(co, true) / 65535\n : view.getUint32(co, true) / 4294967295;\n break;\n case 'snorm': {\n const raw =\n channelBytes === 1\n ? view.getInt8(co)\n : channelBytes === 2\n ? view.getInt16(co, true)\n : view.getInt32(co, true);\n const denom = channelBytes === 1 ? 127 : channelBytes === 2 ? 32767 : 2147483647;\n v = Math.max(-1, raw / denom);\n break;\n }\n case 'uint':\n v =\n channelBytes === 1\n ? view.getUint8(co)\n : channelBytes === 2\n ? view.getUint16(co, true)\n : view.getUint32(co, true);\n break;\n case 'sint':\n v =\n channelBytes === 1\n ? view.getInt8(co)\n : channelBytes === 2\n ? view.getInt16(co, true)\n : view.getInt32(co, true);\n break;\n default:\n v = 0;\n }\n out[c] = v;\n }\n return out;\n}\n\n/**\n * Decode tight raw GPU bytes of a supported color or depth/stencil plane into\n * RGBA8 the canvas can paint via putImageData. Returns null when the format has\n * no {@link formatInfo} entry or the requested aspect is invalid.\n *\n * @param bytes - Tight readback bytes (no row padding), length = w*h*bytesPerTexel.\n * @param format - The texture's real format string.\n * @param width - Texture width in pixels.\n * @param height - Texture height in pixels.\n * @param aspect - Explicit plane selected by readback for depth/stencil formats.\n */\nexport function decodeToRgba8(\n bytes: Uint8Array,\n format: string,\n width: number,\n height: number,\n aspect: 'all' | 'depth-only' | 'stencil-only' = 'all',\n): Uint8ClampedArray<ArrayBuffer> | null {\n if (format.startsWith('depth')) {\n return decodeDepthToRgba8(bytes, format, width, height, aspect);\n }\n const info = formatInfo(format);\n const texBytes = bytesPerTexel(format as never);\n if (!info || texBytes === undefined) return null;\n\n // Per-channel byte width for plain formats (packed formats ignore this).\n const channelBytes = info.packed ? texBytes : texBytes / info.channels;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n // Explicit ArrayBuffer backing (not ArrayBufferLike) so ImageData accepts it.\n const out = new Uint8ClampedArray(new ArrayBuffer(width * height * 4));\n\n for (let i = 0; i < width * height; i++) {\n const [c0, c1, c2, c3] = readTexel(view, i * texBytes, info, channelBytes);\n const di = i * 4;\n if (info.channels === 1) {\n const g = toByte(c0, info.channelType);\n out[di] = g;\n out[di + 1] = g;\n out[di + 2] = g;\n out[di + 3] = 255;\n } else if (info.channels === 2) {\n out[di] = toByte(c0, info.channelType);\n out[di + 1] = toByte(c1, info.channelType);\n out[di + 2] = 0;\n out[di + 3] = 255;\n } else {\n // 3 or 4 channels. BGRA stores blue-first -> swizzle B<->R.\n const r = info.bgra ? c2 : c0;\n const b = info.bgra ? c0 : c2;\n out[di] = toByte(r, info.channelType);\n out[di + 1] = toByte(c1, info.channelType);\n out[di + 2] = toByte(b, info.channelType);\n out[di + 3] = info.channels === 4 ? toByte(c3, info.channelType) : 255;\n }\n }\n return out;\n}\n\nfunction decodeDepthToRgba8(\n bytes: Uint8Array,\n format: string,\n width: number,\n height: number,\n aspect: 'all' | 'depth-only' | 'stencil-only',\n): Uint8ClampedArray<ArrayBuffer> | null {\n const combined = format.endsWith('-stencil8');\n if (combined && aspect === 'all') return null;\n if (!combined && aspect === 'stencil-only') return null;\n const stencil = aspect === 'stencil-only';\n const bytesPerValue = stencil ? 1 : 4;\n const texelCount = width * height;\n if (bytes.byteLength < texelCount * bytesPerValue) return null;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const out = new Uint8ClampedArray(new ArrayBuffer(texelCount * 4));\n for (let index = 0; index < texelCount; index++) {\n const value = stencil\n ? view.getUint8(index)\n : Math.round(clamp01(view.getFloat32(index * 4, true)) * 255);\n const target = index * 4;\n out[target] = value;\n out[target + 1] = value;\n out[target + 2] = value;\n out[target + 3] = 255;\n }\n return out;\n}\n\n/**\n * Decode a single texel from tight raw GPU bytes into raw float RGBA values\n * without the display clamp (D-4: raw byte bypass for HDR fidelity).\n *\n * Unlike `decodeToRgba8` which clamps float/ufloat to [0,1] for display, this\n * returns the decoded per-channel values as-is: float formats keep true values\n * (2.5 stays 2.5, negative stays negative), unorm/snorm stay in their native\n * ranges, uint/sint stay as integers cast to number.\n *\n * Channels: 1ch grayscale (R=G=B, A=1), 2ch (RG, B=0, A=1), 3/4ch (RGBA or\n * BGRA→swizzled). Returns null when the format has no {@link formatInfo} entry.\n *\n * @param bytes - Tight readback bytes, length = width*height*bytesPerTexel.\n * @param format - The texture's real format string.\n * @param width - Texture width in pixels.\n * @param height - Texture height in pixels.\n * @param texelX - 0-based column of the target texel.\n * @param texelY - 0-based row of the target texel.\n */\nexport function decodeTexelRaw(\n bytes: Uint8Array,\n format: string,\n width: number,\n height: number,\n texelX: number,\n texelY: number,\n): [number, number, number, number] | null {\n if (texelX < 0 || texelX >= width || texelY < 0 || texelY >= height) return null;\n\n const info = formatInfo(format);\n const texBytes = bytesPerTexel(format as never);\n if (!info || texBytes === undefined) return null;\n\n const texelIdx = texelY * width + texelX;\n const byteOffset = texelIdx * texBytes;\n\n // Guard: the buffer must be large enough for this texel.\n if (byteOffset + texBytes > bytes.byteLength) return null;\n\n const channelBytes = info.packed ? texBytes : texBytes / info.channels;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const channels = readTexel(view, byteOffset, info, channelBytes);\n\n if (info.channels === 1) {\n return [channels[0], channels[0], channels[0], 1];\n }\n if (info.channels === 2) {\n return [channels[0], channels[1], 0, 1];\n }\n // 3 or 4 channels. BGRA swizzle B<->R.\n const r = info.bgra ? channels[2] : channels[0];\n const b = info.bgra ? channels[0] : channels[2];\n const a = info.channels === 4 ? channels[3] : 1;\n return [r, channels[1], b, a];\n}\n"]}
|