footprintjs 9.48.2 → 10.0.0

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.
Files changed (326) hide show
  1. package/AGENTS.md +12 -10
  2. package/CLAUDE.md +21 -23
  3. package/README.md +1 -1
  4. package/dist/advanced.js +71 -128
  5. package/dist/esm/advanced.d.ts +24 -58
  6. package/dist/esm/advanced.js +13 -51
  7. package/dist/esm/index.d.ts +5 -8
  8. package/dist/esm/index.js +3 -3
  9. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -1
  10. package/dist/esm/lib/builder/FlowChartBuilder.js +3 -3
  11. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +1 -1
  12. package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
  13. package/dist/esm/lib/capture/index.d.ts +0 -1
  14. package/dist/esm/lib/capture/index.js +1 -2
  15. package/dist/esm/lib/engine/graph/prefixNodeTree.js +2 -2
  16. package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  17. package/dist/esm/lib/engine/handlers/ResumeEntry.js +4 -4
  18. package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  19. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -8
  20. package/dist/esm/lib/engine/index.d.ts +1 -1
  21. package/dist/esm/lib/engine/index.js +1 -1
  22. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  23. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  24. package/dist/esm/lib/engine/narrative/index.d.ts +1 -1
  25. package/dist/esm/lib/engine/narrative/index.js +1 -1
  26. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  27. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  28. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  29. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -6
  30. package/dist/esm/lib/engine/traversalContext.d.ts +1 -1
  31. package/dist/esm/lib/engine/traversalContext.js +2 -2
  32. package/dist/esm/lib/engine/types.d.ts +2 -10
  33. package/dist/esm/lib/engine/types.js +1 -1
  34. package/dist/esm/lib/engine/walkSubflowSpec.js +2 -2
  35. package/dist/esm/lib/ids/reservedIds.js +2 -2
  36. package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
  37. package/dist/esm/lib/memory/StageContext.d.ts +2 -4
  38. package/dist/esm/lib/memory/StageContext.js +2 -2
  39. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  40. package/dist/esm/lib/memory/index.d.ts +6 -21
  41. package/dist/esm/lib/memory/index.js +4 -22
  42. package/dist/esm/lib/memory/redaction.d.ts +1 -1
  43. package/dist/esm/lib/memory/redaction.js +2 -2
  44. package/dist/esm/lib/memory/runPolicy.d.ts +3 -2
  45. package/dist/esm/lib/memory/runPolicy.js +1 -1
  46. package/dist/esm/lib/reactive/createTypedScope.js +2 -2
  47. package/dist/esm/lib/reactive/writeTraps.js +2 -2
  48. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +3 -2
  49. package/dist/esm/lib/recorder/ControlDepRecorder.js +3 -2
  50. package/dist/esm/lib/recorder/EmitRecorder.d.ts +1 -1
  51. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  52. package/dist/esm/lib/recorder/InOutRecorder.js +2 -2
  53. package/dist/esm/lib/recorder/qualityTrace.d.ts +1 -1
  54. package/dist/esm/lib/recorder/qualityTrace.js +2 -2
  55. package/dist/esm/lib/runner/DeferredObserverTier.js +2 -2
  56. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -5
  57. package/dist/esm/lib/runner/ExecutionRuntime.js +2 -5
  58. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
  59. package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
  60. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  61. package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -4
  62. package/dist/esm/lib/runner/resume.js +2 -2
  63. package/dist/esm/lib/runner/snapshot.js +3 -2
  64. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  65. package/dist/esm/lib/scope/state/zod/scopeFactory.js +2 -2
  66. package/dist/esm/recorders.d.ts +2 -3
  67. package/dist/esm/recorders.js +1 -1
  68. package/dist/esm/trace.d.ts +11 -57
  69. package/dist/esm/trace.js +10 -68
  70. package/dist/index.js +3 -3
  71. package/dist/lib/builder/FlowChartBuilder.js +5 -5
  72. package/dist/lib/builder/structure/StructureRecorder.js +1 -1
  73. package/dist/lib/capture/index.js +2 -4
  74. package/dist/lib/engine/graph/prefixNodeTree.js +5 -5
  75. package/dist/lib/engine/handlers/ResumeEntry.js +4 -4
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -9
  77. package/dist/lib/engine/index.js +1 -1
  78. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  79. package/dist/lib/engine/narrative/index.js +1 -1
  80. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  81. package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -10
  82. package/dist/lib/engine/traversalContext.js +4 -4
  83. package/dist/lib/engine/types.js +1 -1
  84. package/dist/lib/engine/walkSubflowSpec.js +3 -3
  85. package/dist/lib/ids/reservedIds.js +5 -5
  86. package/dist/lib/memory/DiagnosticCollector.js +3 -3
  87. package/dist/lib/memory/StageContext.js +3 -3
  88. package/dist/lib/memory/borrowedMutation.js +3 -3
  89. package/dist/lib/memory/index.js +7 -42
  90. package/dist/lib/memory/redaction.js +3 -3
  91. package/dist/lib/memory/runPolicy.js +1 -1
  92. package/dist/lib/reactive/createTypedScope.js +3 -3
  93. package/dist/lib/reactive/writeTraps.js +4 -4
  94. package/dist/lib/recorder/ControlDepRecorder.js +3 -2
  95. package/dist/lib/recorder/EmitRecorder.js +1 -1
  96. package/dist/lib/recorder/InOutRecorder.js +3 -3
  97. package/dist/lib/recorder/qualityTrace.js +4 -4
  98. package/dist/lib/runner/DeferredObserverTier.js +3 -3
  99. package/dist/lib/runner/ExecutionRuntime.js +6 -9
  100. package/dist/lib/runner/FlowChartExecutor.js +1 -1
  101. package/dist/lib/runner/getSubtreeSnapshot.js +6 -6
  102. package/dist/lib/runner/resume.js +3 -3
  103. package/dist/lib/runner/snapshot.js +6 -5
  104. package/dist/lib/scope/ScopeFacade.js +3 -3
  105. package/dist/lib/scope/state/zod/scopeFactory.js +4 -4
  106. package/dist/recorders.js +1 -1
  107. package/dist/trace.js +18 -120
  108. package/dist/types/advanced.d.ts +24 -58
  109. package/dist/types/index.d.ts +5 -8
  110. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -1
  111. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
  112. package/dist/types/lib/capture/index.d.ts +0 -1
  113. package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  114. package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  115. package/dist/types/lib/engine/index.d.ts +1 -1
  116. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  117. package/dist/types/lib/engine/narrative/index.d.ts +1 -1
  118. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  119. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  120. package/dist/types/lib/engine/traversalContext.d.ts +1 -1
  121. package/dist/types/lib/engine/types.d.ts +2 -10
  122. package/dist/types/lib/memory/StageContext.d.ts +2 -4
  123. package/dist/types/lib/memory/index.d.ts +6 -21
  124. package/dist/types/lib/memory/redaction.d.ts +1 -1
  125. package/dist/types/lib/memory/runPolicy.d.ts +3 -2
  126. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +3 -2
  127. package/dist/types/lib/recorder/EmitRecorder.d.ts +1 -1
  128. package/dist/types/lib/recorder/qualityTrace.d.ts +1 -1
  129. package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -5
  130. package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
  131. package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  132. package/dist/types/recorders.d.ts +2 -3
  133. package/dist/types/trace.d.ts +11 -57
  134. package/package.json +6 -15
  135. package/dist/esm/lib/capture/freeze.d.ts +0 -91
  136. package/dist/esm/lib/capture/freeze.js +0 -314
  137. package/dist/esm/lib/capture/ownData.d.ts +0 -7
  138. package/dist/esm/lib/capture/ownData.js +0 -15
  139. package/dist/esm/lib/capture/valueKinds.d.ts +0 -57
  140. package/dist/esm/lib/capture/valueKinds.js +0 -142
  141. package/dist/esm/lib/ids/runtimeStageId.d.ts +0 -173
  142. package/dist/esm/lib/ids/runtimeStageId.js +0 -194
  143. package/dist/esm/lib/memory/EventLog.d.ts +0 -105
  144. package/dist/esm/lib/memory/EventLog.js +0 -148
  145. package/dist/esm/lib/memory/RecordFrame.d.ts +0 -232
  146. package/dist/esm/lib/memory/RecordFrame.js +0 -296
  147. package/dist/esm/lib/memory/SharedMemory.d.ts +0 -46
  148. package/dist/esm/lib/memory/SharedMemory.js +0 -88
  149. package/dist/esm/lib/memory/TransactionBuffer.d.ts +0 -521
  150. package/dist/esm/lib/memory/TransactionBuffer.js +0 -946
  151. package/dist/esm/lib/memory/admission.d.ts +0 -81
  152. package/dist/esm/lib/memory/admission.js +0 -153
  153. package/dist/esm/lib/memory/backtrack.d.ts +0 -286
  154. package/dist/esm/lib/memory/backtrack.js +0 -457
  155. package/dist/esm/lib/memory/commitLogUtils.d.ts +0 -217
  156. package/dist/esm/lib/memory/commitLogUtils.js +0 -384
  157. package/dist/esm/lib/memory/deltaEncoding.d.ts +0 -66
  158. package/dist/esm/lib/memory/deltaEncoding.js +0 -122
  159. package/dist/esm/lib/memory/equality.d.ts +0 -93
  160. package/dist/esm/lib/memory/equality.js +0 -262
  161. package/dist/esm/lib/memory/eventPosition.d.ts +0 -18
  162. package/dist/esm/lib/memory/eventPosition.js +0 -2
  163. package/dist/esm/lib/memory/honesty.d.ts +0 -93
  164. package/dist/esm/lib/memory/honesty.js +0 -92
  165. package/dist/esm/lib/memory/keyPaths.d.ts +0 -125
  166. package/dist/esm/lib/memory/keyPaths.js +0 -227
  167. package/dist/esm/lib/memory/logModel.d.ts +0 -76
  168. package/dist/esm/lib/memory/logModel.js +0 -364
  169. package/dist/esm/lib/memory/merge.d.ts +0 -26
  170. package/dist/esm/lib/memory/merge.js +0 -60
  171. package/dist/esm/lib/memory/pathOps.d.ts +0 -115
  172. package/dist/esm/lib/memory/pathOps.js +0 -290
  173. package/dist/esm/lib/memory/paths.d.ts +0 -52
  174. package/dist/esm/lib/memory/paths.js +0 -57
  175. package/dist/esm/lib/memory/placeholders.d.ts +0 -39
  176. package/dist/esm/lib/memory/placeholders.js +0 -40
  177. package/dist/esm/lib/memory/recordCommit.d.ts +0 -45
  178. package/dist/esm/lib/memory/recordCommit.js +0 -61
  179. package/dist/esm/lib/memory/scrub.d.ts +0 -53
  180. package/dist/esm/lib/memory/scrub.js +0 -74
  181. package/dist/esm/lib/memory/types.d.ts +0 -209
  182. package/dist/esm/lib/memory/types.js +0 -10
  183. package/dist/esm/lib/memory/utils.d.ts +0 -73
  184. package/dist/esm/lib/memory/utils.js +0 -159
  185. package/dist/esm/lib/memory/verbs.d.ts +0 -333
  186. package/dist/esm/lib/memory/verbs.js +0 -427
  187. package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +0 -147
  188. package/dist/esm/lib/recorder/CommitRangeIndex.js +0 -207
  189. package/dist/esm/lib/scope/detectCircular.d.ts +0 -13
  190. package/dist/esm/lib/scope/detectCircular.js +0 -14
  191. package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +0 -5
  192. package/dist/esm/lib/scope/recorders/summarizeValue.js +0 -6
  193. package/dist/esm/lib/slice/elementProvenance.d.ts +0 -81
  194. package/dist/esm/lib/slice/elementProvenance.js +0 -190
  195. package/dist/esm/lib/slice/forwardSliceForKey.d.ts +0 -88
  196. package/dist/esm/lib/slice/forwardSliceForKey.js +0 -243
  197. package/dist/esm/lib/slice/index.d.ts +0 -25
  198. package/dist/esm/lib/slice/index.js +0 -25
  199. package/dist/esm/lib/slice/keyIndex.d.ts +0 -137
  200. package/dist/esm/lib/slice/keyIndex.js +0 -293
  201. package/dist/esm/lib/slice/keyTimeline.d.ts +0 -49
  202. package/dist/esm/lib/slice/keyTimeline.js +0 -113
  203. package/dist/esm/lib/slice/keysReadSources.d.ts +0 -51
  204. package/dist/esm/lib/slice/keysReadSources.js +0 -95
  205. package/dist/esm/lib/slice/serialize.d.ts +0 -78
  206. package/dist/esm/lib/slice/serialize.js +0 -278
  207. package/dist/esm/lib/slice/sliceForKey.d.ts +0 -47
  208. package/dist/esm/lib/slice/sliceForKey.js +0 -88
  209. package/dist/esm/lib/slice/types.d.ts +0 -567
  210. package/dist/esm/lib/slice/types.js +0 -25
  211. package/dist/esm/lib/time-travel/axis.d.ts +0 -119
  212. package/dist/esm/lib/time-travel/axis.js +0 -179
  213. package/dist/esm/lib/time-travel/bundles.d.ts +0 -77
  214. package/dist/esm/lib/time-travel/bundles.js +0 -136
  215. package/dist/esm/lib/time-travel/chain.d.ts +0 -93
  216. package/dist/esm/lib/time-travel/chain.js +0 -188
  217. package/dist/esm/lib/time-travel/commitStops.d.ts +0 -55
  218. package/dist/esm/lib/time-travel/commitStops.js +0 -202
  219. package/dist/esm/lib/time-travel/index.d.ts +0 -22
  220. package/dist/esm/lib/time-travel/index.js +0 -21
  221. package/dist/esm/lib/time-travel/stateAt.d.ts +0 -102
  222. package/dist/esm/lib/time-travel/stateAt.js +0 -153
  223. package/dist/esm/lib/time-travel/tagStops.d.ts +0 -72
  224. package/dist/esm/lib/time-travel/tagStops.js +0 -102
  225. package/dist/esm/lib/time-travel/timeTravel.d.ts +0 -70
  226. package/dist/esm/lib/time-travel/timeTravel.js +0 -360
  227. package/dist/esm/lib/time-travel/types.d.ts +0 -470
  228. package/dist/esm/lib/time-travel/types.js +0 -23
  229. package/dist/esm/write.d.ts +0 -47
  230. package/dist/esm/write.js +0 -46
  231. package/dist/lib/capture/freeze.js +0 -320
  232. package/dist/lib/capture/ownData.js +0 -19
  233. package/dist/lib/capture/valueKinds.js +0 -146
  234. package/dist/lib/ids/runtimeStageId.js +0 -210
  235. package/dist/lib/memory/EventLog.js +0 -152
  236. package/dist/lib/memory/RecordFrame.js +0 -300
  237. package/dist/lib/memory/SharedMemory.js +0 -92
  238. package/dist/lib/memory/TransactionBuffer.js +0 -950
  239. package/dist/lib/memory/admission.js +0 -159
  240. package/dist/lib/memory/backtrack.js +0 -463
  241. package/dist/lib/memory/commitLogUtils.js +0 -399
  242. package/dist/lib/memory/deltaEncoding.js +0 -128
  243. package/dist/lib/memory/equality.js +0 -266
  244. package/dist/lib/memory/eventPosition.js +0 -3
  245. package/dist/lib/memory/honesty.js +0 -95
  246. package/dist/lib/memory/keyPaths.js +0 -243
  247. package/dist/lib/memory/logModel.js +0 -372
  248. package/dist/lib/memory/merge.js +0 -64
  249. package/dist/lib/memory/pathOps.js +0 -306
  250. package/dist/lib/memory/paths.js +0 -62
  251. package/dist/lib/memory/placeholders.js +0 -43
  252. package/dist/lib/memory/recordCommit.js +0 -65
  253. package/dist/lib/memory/scrub.js +0 -79
  254. package/dist/lib/memory/types.js +0 -11
  255. package/dist/lib/memory/utils.js +0 -178
  256. package/dist/lib/memory/verbs.js +0 -444
  257. package/dist/lib/recorder/CommitRangeIndex.js +0 -211
  258. package/dist/lib/scope/detectCircular.js +0 -21
  259. package/dist/lib/scope/recorders/summarizeValue.js +0 -10
  260. package/dist/lib/slice/elementProvenance.js +0 -195
  261. package/dist/lib/slice/forwardSliceForKey.js +0 -247
  262. package/dist/lib/slice/index.js +0 -42
  263. package/dist/lib/slice/keyIndex.js +0 -313
  264. package/dist/lib/slice/keyTimeline.js +0 -117
  265. package/dist/lib/slice/keysReadSources.js +0 -101
  266. package/dist/lib/slice/serialize.js +0 -286
  267. package/dist/lib/slice/sliceForKey.js +0 -93
  268. package/dist/lib/slice/types.js +0 -26
  269. package/dist/lib/time-travel/axis.js +0 -184
  270. package/dist/lib/time-travel/bundles.js +0 -144
  271. package/dist/lib/time-travel/chain.js +0 -193
  272. package/dist/lib/time-travel/commitStops.js +0 -206
  273. package/dist/lib/time-travel/index.js +0 -32
  274. package/dist/lib/time-travel/stateAt.js +0 -160
  275. package/dist/lib/time-travel/tagStops.js +0 -106
  276. package/dist/lib/time-travel/timeTravel.js +0 -364
  277. package/dist/lib/time-travel/types.js +0 -24
  278. package/dist/types/lib/capture/freeze.d.ts +0 -91
  279. package/dist/types/lib/capture/ownData.d.ts +0 -7
  280. package/dist/types/lib/capture/valueKinds.d.ts +0 -57
  281. package/dist/types/lib/ids/runtimeStageId.d.ts +0 -173
  282. package/dist/types/lib/memory/EventLog.d.ts +0 -105
  283. package/dist/types/lib/memory/RecordFrame.d.ts +0 -232
  284. package/dist/types/lib/memory/SharedMemory.d.ts +0 -46
  285. package/dist/types/lib/memory/TransactionBuffer.d.ts +0 -521
  286. package/dist/types/lib/memory/admission.d.ts +0 -81
  287. package/dist/types/lib/memory/backtrack.d.ts +0 -286
  288. package/dist/types/lib/memory/commitLogUtils.d.ts +0 -217
  289. package/dist/types/lib/memory/deltaEncoding.d.ts +0 -66
  290. package/dist/types/lib/memory/equality.d.ts +0 -93
  291. package/dist/types/lib/memory/eventPosition.d.ts +0 -18
  292. package/dist/types/lib/memory/honesty.d.ts +0 -93
  293. package/dist/types/lib/memory/keyPaths.d.ts +0 -125
  294. package/dist/types/lib/memory/logModel.d.ts +0 -76
  295. package/dist/types/lib/memory/merge.d.ts +0 -26
  296. package/dist/types/lib/memory/pathOps.d.ts +0 -115
  297. package/dist/types/lib/memory/paths.d.ts +0 -52
  298. package/dist/types/lib/memory/placeholders.d.ts +0 -39
  299. package/dist/types/lib/memory/recordCommit.d.ts +0 -45
  300. package/dist/types/lib/memory/scrub.d.ts +0 -53
  301. package/dist/types/lib/memory/types.d.ts +0 -209
  302. package/dist/types/lib/memory/utils.d.ts +0 -73
  303. package/dist/types/lib/memory/verbs.d.ts +0 -333
  304. package/dist/types/lib/recorder/CommitRangeIndex.d.ts +0 -147
  305. package/dist/types/lib/scope/detectCircular.d.ts +0 -13
  306. package/dist/types/lib/scope/recorders/summarizeValue.d.ts +0 -5
  307. package/dist/types/lib/slice/elementProvenance.d.ts +0 -81
  308. package/dist/types/lib/slice/forwardSliceForKey.d.ts +0 -88
  309. package/dist/types/lib/slice/index.d.ts +0 -25
  310. package/dist/types/lib/slice/keyIndex.d.ts +0 -137
  311. package/dist/types/lib/slice/keyTimeline.d.ts +0 -49
  312. package/dist/types/lib/slice/keysReadSources.d.ts +0 -51
  313. package/dist/types/lib/slice/serialize.d.ts +0 -78
  314. package/dist/types/lib/slice/sliceForKey.d.ts +0 -47
  315. package/dist/types/lib/slice/types.d.ts +0 -567
  316. package/dist/types/lib/time-travel/axis.d.ts +0 -119
  317. package/dist/types/lib/time-travel/bundles.d.ts +0 -77
  318. package/dist/types/lib/time-travel/chain.d.ts +0 -93
  319. package/dist/types/lib/time-travel/commitStops.d.ts +0 -55
  320. package/dist/types/lib/time-travel/index.d.ts +0 -22
  321. package/dist/types/lib/time-travel/stateAt.d.ts +0 -102
  322. package/dist/types/lib/time-travel/tagStops.d.ts +0 -72
  323. package/dist/types/lib/time-travel/timeTravel.d.ts +0 -70
  324. package/dist/types/lib/time-travel/types.d.ts +0 -470
  325. package/dist/types/write.d.ts +0 -47
  326. package/dist/write.js +0 -52
@@ -1,122 +0,0 @@
1
- /**
2
- * deltaEncoding.ts — the delta encoding's pure helpers (`commitValues:
3
- * 'delta'`, #13c-B; docs/design/13c-b-delta-commit-verb.md), out of
4
- * `TransactionBuffer` since 9.30.0: the overlap families of rule 3 and the
5
- * order rows are emitted in (which now also places the admitted record's
6
- * re-encoded families), the append detection, and the row that carries a
7
- * value. The verb CHOICE stays in `TransactionBuffer · deltaRows`; nothing
8
- * here replays the verb law.
9
- */
10
- import { nativeSet as _set } from './pathOps.js';
11
- import { deepEqual, DELIM } from './utils.js';
12
- /**
13
- * A delta row carrying a VALUE: an `append` of the tail when `before` is a
14
- * strict prefix of `value` ({@link isStrictArrayPrefix}), else a `set` of it.
15
- * The value is cloned here — the one copy the record takes.
16
- *
17
- * `marked` — a redaction mark sits BELOW this path (`list.1.token`): its
18
- * indices count from the start of the WHOLE array, and an `append` row holds
19
- * only the tail, where `scrubPatch` would find no element 1 and leave the
20
- * secret in the log and the redacted mirror. Such a path always takes the
21
- * `set` of the whole value, where the mark lands (9.30.0; the same gap was
22
- * open in 9.29.0 for a hard write of base + tail).
23
- */
24
- export function pushValueRow(rows, path, segments, before, value, prov, marked = false) {
25
- if (!marked && isStrictArrayPrefix(before, value)) {
26
- rows.trace.push({ path, verb: 'append', ...prov });
27
- _set(rows.overwrite, segments, structuredClone(value.slice(before.length)));
28
- }
29
- else {
30
- rows.trace.push({ path, verb: 'set', ...prov });
31
- _set(rows.overwrite, segments, structuredClone(value));
32
- }
33
- }
34
- /**
35
- * Group survivors into OVERLAP FAMILIES (`toDeltaPayload` rule 3): each path's
36
- * family is keyed by its SHALLOWEST surviving ancestor — walking prefixes
37
- * shallow first means the first hit is that root, and a depth-1 path (the
38
- * common case) never enters the loop at all. Any two paths sharing a root
39
- * are exactly the paths whose patch storage overlaps.
40
- */
41
- export function groupIntoFamilies(survivors, survivingPaths) {
42
- const rootOf = new Map();
43
- const byRoot = new Map();
44
- for (const s of survivors) {
45
- let root = s.path;
46
- for (let i = 1; i < s.segments.length; i++) {
47
- const ancestor = s.segments.slice(0, i).join(DELIM);
48
- if (survivingPaths.has(ancestor)) {
49
- root = ancestor;
50
- break;
51
- }
52
- }
53
- rootOf.set(s.path, root);
54
- const family = byRoot.get(root);
55
- if (family)
56
- family.push(s);
57
- else
58
- byRoot.set(root, [s]);
59
- }
60
- return { rootOf, byRoot };
61
- }
62
- /**
63
- * Emit survivors in last-touch order, with one exception: in an overlapping
64
- * family the ROOT is emitted LAST — its whole-subtree set is what makes the
65
- * replayed subtree exactly the family value (a descendant applied afterwards
66
- * could only re-state a value already inside it, but would also leave behind
67
- * the `key: undefined` shells 'full' mode never has). `before(touch)` runs
68
- * ahead of each survivor with that survivor's last touch — where the
69
- * re-encoded families of the admitted record take their places.
70
- */
71
- export function emitInFamilyOrder(survivors, rootOf, byRoot, emit, before) {
72
- for (const s of survivors) {
73
- before(s.last);
74
- const root = rootOf.get(s.path);
75
- const family = byRoot.get(root);
76
- if (family.length === 1) {
77
- emit(s);
78
- continue;
79
- }
80
- if (s.path !== root)
81
- emit(s);
82
- if (family[family.length - 1] === s)
83
- emit(family.find((m) => m.path === root));
84
- }
85
- }
86
- /**
87
- * Append-detection predicate (#13c-B §2.2): both values are arrays, the
88
- * final is strictly longer, and the base is a structural prefix of the
89
- * final. Element compares short-circuit on reference identity (`deepEqual`'s
90
- * `===` fast path) before walking structure, and bail at the first mismatch
91
- * — worst case one structural compare of the base array, strictly cheaper
92
- * than the full-value `structuredClone` the fallback pays.
93
- *
94
- * `before === undefined` (first write) fails `Array.isArray` → `set`, which
95
- * keeps the first write as the causal anchor for "who initialized this key".
96
- *
97
- * BOTH arrays must also be plain and dense ({@link isIndexOnly}): replay
98
- * reconstructs an append as `[...current, ...tail]`, and that spread carries
99
- * ONLY indexed elements — a named property parked on an array (a nested write
100
- * like `set(['history','note'], …)`, which `nativeSet` happily hangs off the
101
- * array object) or a hole would be silently dropped, where `'full'` mode
102
- * stores the value whole and keeps it.
103
- */
104
- function isStrictArrayPrefix(before, after) {
105
- if (!Array.isArray(before) || !Array.isArray(after))
106
- return false;
107
- if (after.length <= before.length)
108
- return false;
109
- for (let i = 0; i < before.length; i++) {
110
- if (!deepEqual(before[i], after[i]))
111
- return false;
112
- }
113
- return isIndexOnly(before) && isIndexOnly(after);
114
- }
115
- /** True when an array's own enumerable keys are exactly its indices — no
116
- * extra named properties and no holes, i.e. the array survives a spread
117
- * intact. One `Object.keys` pass, same order as the prefix compare above
118
- * and paid only after it succeeds. */
119
- function isIndexOnly(arr) {
120
- return Object.keys(arr).length === arr.length;
121
- }
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsdGFFbmNvZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2RlbHRhRW5jb2RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFHSCxPQUFPLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQXdCOUM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixJQUFVLEVBQ1YsSUFBWSxFQUNaLFFBQWtCLEVBQ2xCLE1BQWUsRUFDZixLQUFjLEVBQ2QsSUFBd0MsRUFDeEMsTUFBTSxHQUFHLEtBQUs7SUFFZCxJQUFJLENBQUMsTUFBTSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUUsS0FBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxp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QUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEQsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozt1Q0FHdUM7QUFDdkMsU0FBUyxXQUFXLENBQUMsR0FBYztJQUNqQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVsdGFFbmNvZGluZy50cyDigJQgdGhlIGRlbHRhIGVuY29kaW5nJ3MgcHVyZSBoZWxwZXJzIChgY29tbWl0VmFsdWVzOlxuICogJ2RlbHRhJ2AsICMxM2MtQjsgZG9jcy9kZXNpZ24vMTNjLWItZGVsdGEtY29tbWl0LXZlcmIubWQpLCBvdXQgb2ZcbiAqIGBUcmFuc2FjdGlvbkJ1ZmZlcmAgc2luY2UgOS4zMC4wOiB0aGUgb3ZlcmxhcCBmYW1pbGllcyBvZiBydWxlIDMgYW5kIHRoZVxuICogb3JkZXIgcm93cyBhcmUgZW1pdHRlZCBpbiAod2hpY2ggbm93IGFsc28gcGxhY2VzIHRoZSBhZG1pdHRlZCByZWNvcmQnc1xuICogcmUtZW5jb2RlZCBmYW1pbGllcyksIHRoZSBhcHBlbmQgZGV0ZWN0aW9uLCBhbmQgdGhlIHJvdyB0aGF0IGNhcnJpZXMgYVxuICogdmFsdWUuIFRoZSB2ZXJiIENIT0lDRSBzdGF5cyBpbiBgVHJhbnNhY3Rpb25CdWZmZXIgwrcgZGVsdGFSb3dzYDsgbm90aGluZ1xuICogaGVyZSByZXBsYXlzIHRoZSB2ZXJiIGxhdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJvd3MgfSBmcm9tICcuL2FkbWlzc2lvbi5qcyc7XG5pbXBvcnQgeyBuYXRpdmVTZXQgYXMgX3NldCB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwsIERFTElNIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbi8qKiBPcC1sZXZlbCB2ZXJicyBzdGFnZWQgaW50byBgb3BUcmFjZWAuIGAnZGVsZXRlJ2AgaXMgc3RhZ2VkIGRpc3RpbmN0bHkgc29cbiAqICBkZWx0YS1tb2RlIGNvbW1pdHMgKCMxM2MtQikgY2FuIGVtaXQgYSByZWFsIGBkZWxldGVgIHRyYWNlIGVudHJ5OyB1bmRlclxuICogIHRoZSBkZWZhdWx0IGAnZnVsbCdgIG1vZGUgaXQgY29tbWl0cyBhcyBgJ3NldCdgIChvZiBgdW5kZWZpbmVkYCkg4oCUXG4gKiAgYnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgZmxhdHRlbmluZy4gKi9cbmV4cG9ydCB0eXBlIE9wVmVyYiA9ICdzZXQnIHwgJ21lcmdlJyB8ICdkZWxldGUnO1xuXG4vKiogQSBwYXRoIHRoYXQgcGFzc2VkIHRoZSBuZXQtY2hhbmdlIGZpbHRlciwgd2l0aCBldmVyeXRoaW5nIHRoZSBkZWx0YVxuICogIGVuY29kZXIgbmVlZHMgdG8gZGVjaWRlIGl0cyB2ZXJiIOKAlCByZXNvbHZlZCBvbmNlLCB0aGVuIHJldXNlZCBieSB0aGVcbiAqICBvdmVybGFwLWZhbWlseSBncm91cGluZyAoYHRvRGVsdGFQYXlsb2FkYCBydWxlIDMpLiAqL1xuZXhwb3J0IHR5cGUgU3Vydml2b3IgPSB7XG4gIHBhdGg6IHN0cmluZztcbiAgc2VnbWVudHM6IHN0cmluZ1tdO1xuICB2ZXJiczogT3BWZXJiW107XG4gIHJlYWRLZXlzPzogc3RyaW5nW107XG4gIC8qKiBJbmRleCBpbiBgb3BUcmFjZWAgb2YgdGhpcyBwYXRoJ3MgbGFzdCBvcCAoaXRzIGxhc3QgdG91Y2gpLiAqL1xuICBsYXN0OiBudW1iZXI7XG4gIC8qKiBWYWx1ZSBhdCB0aGlzIHBhdGggd2hlbiB0aGUgc3RhZ2UgYmVnYW4gKHRoZSBhcHBlbmQvZGlmZiBiYXNlKS4gKi9cbiAgYmVmb3JlOiB1bmtub3duO1xuICAvKiogVmFsdWUgYXQgdGhpcyBwYXRoIGFmdGVyIGV2ZXJ5IHN0YWdlZCBvcCAocmVhZC15b3VyLXdyaXRlcyB2aWV3KS4gKi9cbiAgYWZ0ZXI6IHVua25vd247XG59O1xuXG4vKipcbiAqIEEgZGVsdGEgcm93IGNhcnJ5aW5nIGEgVkFMVUU6IGFuIGBhcHBlbmRgIG9mIHRoZSB0YWlsIHdoZW4gYGJlZm9yZWAgaXMgYVxuICogc3RyaWN0IHByZWZpeCBvZiBgdmFsdWVgICh7QGxpbmsgaXNTdHJpY3RBcnJheVByZWZpeH0pLCBlbHNlIGEgYHNldGAgb2YgaXQuXG4gKiBUaGUgdmFsdWUgaXMgY2xvbmVkIGhlcmUg4oCUIHRoZSBvbmUgY29weSB0aGUgcmVjb3JkIHRha2VzLlxuICpcbiAqIGBtYXJrZWRgIOKAlCBhIHJlZGFjdGlvbiBtYXJrIHNpdHMgQkVMT1cgdGhpcyBwYXRoIChgbGlzdC4xLnRva2VuYCk6IGl0c1xuICogaW5kaWNlcyBjb3VudCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgV0hPTEUgYXJyYXksIGFuZCBhbiBgYXBwZW5kYCByb3cgaG9sZHNcbiAqIG9ubHkgdGhlIHRhaWwsIHdoZXJlIGBzY3J1YlBhdGNoYCB3b3VsZCBmaW5kIG5vIGVsZW1lbnQgMSBhbmQgbGVhdmUgdGhlXG4gKiBzZWNyZXQgaW4gdGhlIGxvZyBhbmQgdGhlIHJlZGFjdGVkIG1pcnJvci4gU3VjaCBhIHBhdGggYWx3YXlzIHRha2VzIHRoZVxuICogYHNldGAgb2YgdGhlIHdob2xlIHZhbHVlLCB3aGVyZSB0aGUgbWFyayBsYW5kcyAoOS4zMC4wOyB0aGUgc2FtZSBnYXAgd2FzXG4gKiBvcGVuIGluIDkuMjkuMCBmb3IgYSBoYXJkIHdyaXRlIG9mIGJhc2UgKyB0YWlsKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1c2hWYWx1ZVJvdyhcbiAgcm93czogUm93cyxcbiAgcGF0aDogc3RyaW5nLFxuICBzZWdtZW50czogc3RyaW5nW10sXG4gIGJlZm9yZTogdW5rbm93bixcbiAgdmFsdWU6IHVua25vd24sXG4gIHByb3Y6IHsgcmVhZEtleXM6IHN0cmluZ1tdIH0gfCB1bmRlZmluZWQsXG4gIG1hcmtlZCA9IGZhbHNlLFxuKTogdm9pZCB7XG4gIGlmICghbWFya2VkICYmIGlzU3RyaWN0QXJyYXlQcmVmaXgoYmVmb3JlLCB2YWx1ZSkpIHtcbiAgICByb3dzLnRyYWNlLnB1c2goeyBwYXRoLCB2ZXJiOiAnYXBwZW5kJywgLi4ucHJvdiB9KTtcbiAgICBfc2V0KHJvd3Mub3ZlcndyaXRlLCBzZWdtZW50cywgc3RydWN0dXJlZENsb25lKCh2YWx1ZSBhcyB1bmtub3duW10pLnNsaWNlKGJlZm9yZS5sZW5ndGgpKSk7XG4gIH0gZWxzZSB7XG4gICAgcm93cy50cmFjZS5wdXNoKHsgcGF0aCwgdmVyYjogJ3NldCcsIC4uLnByb3YgfSk7XG4gICAgX3NldChyb3dzLm92ZXJ3cml0ZSwgc2VnbWVudHMsIHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSkpO1xuICB9XG59XG5cbi8qKlxuICogR3JvdXAgc3Vydml2b3JzIGludG8gT1ZFUkxBUCBGQU1JTElFUyAoYHRvRGVsdGFQYXlsb2FkYCBydWxlIDMpOiBlYWNoIHBhdGgnc1xuICogZmFtaWx5IGlzIGtleWVkIGJ5IGl0cyBTSEFMTE9XRVNUIHN1cnZpdmluZyBhbmNlc3RvciDigJQgd2Fsa2luZyBwcmVmaXhlc1xuICogc2hhbGxvdyBmaXJzdCBtZWFucyB0aGUgZmlyc3QgaGl0IGlzIHRoYXQgcm9vdCwgYW5kIGEgZGVwdGgtMSBwYXRoICh0aGVcbiAqIGNvbW1vbiBjYXNlKSBuZXZlciBlbnRlcnMgdGhlIGxvb3AgYXQgYWxsLiBBbnkgdHdvIHBhdGhzIHNoYXJpbmcgYSByb290XG4gKiBhcmUgZXhhY3RseSB0aGUgcGF0aHMgd2hvc2UgcGF0Y2ggc3RvcmFnZSBvdmVybGFwcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwSW50b0ZhbWlsaWVzKFxuICBzdXJ2aXZvcnM6IFN1cnZpdm9yW10sXG4gIHN1cnZpdmluZ1BhdGhzOiBTZXQ8c3RyaW5nPixcbik6IHsgcm9vdE9mOiBNYXA8c3RyaW5nLCBzdHJpbmc+OyBieVJvb3Q6IE1hcDxzdHJpbmcsIFN1cnZpdm9yW10+IH0ge1xuICBjb25zdCByb290T2YgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCBieVJvb3QgPSBuZXcgTWFwPHN0cmluZywgU3Vydml2b3JbXT4oKTtcbiAgZm9yIChjb25zdCBzIG9mIHN1cnZpdm9ycykge1xuICAgIGxldCByb290ID0gcy5wYXRoO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcy5zZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSBzLnNlZ21lbnRzLnNsaWNlKDAsIGkpLmpvaW4oREVMSU0pO1xuICAgICAgaWYgKHN1cnZpdmluZ1BhdGhzLmhhcyhhbmNlc3RvcikpIHtcbiAgICAgICAgcm9vdCA9IGFuY2VzdG9yO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcm9vdE9mLnNldChzLnBhdGgsIHJvb3QpO1xuICAgIGNvbnN0IGZhbWlseSA9IGJ5Um9vdC5nZXQocm9vdCk7XG4gICAgaWYgKGZhbWlseSkgZmFtaWx5LnB1c2gocyk7XG4gICAgZWxzZSBieVJvb3Quc2V0KHJvb3QsIFtzXSk7XG4gIH1cbiAgcmV0dXJuIHsgcm9vdE9mLCBieVJvb3QgfTtcbn1cblxuLyoqXG4gKiBFbWl0IHN1cnZpdm9ycyBpbiBsYXN0LXRvdWNoIG9yZGVyLCB3aXRoIG9uZSBleGNlcHRpb246IGluIGFuIG92ZXJsYXBwaW5nXG4gKiBmYW1pbHkgdGhlIFJPT1QgaXMgZW1pdHRlZCBMQVNUIOKAlCBpdHMgd2hvbGUtc3VidHJlZSBzZXQgaXMgd2hhdCBtYWtlcyB0aGVcbiAqIHJlcGxheWVkIHN1YnRyZWUgZXhhY3RseSB0aGUgZmFtaWx5IHZhbHVlIChhIGRlc2NlbmRhbnQgYXBwbGllZCBhZnRlcndhcmRzXG4gKiBjb3VsZCBvbmx5IHJlLXN0YXRlIGEgdmFsdWUgYWxyZWFkeSBpbnNpZGUgaXQsIGJ1dCB3b3VsZCBhbHNvIGxlYXZlIGJlaGluZFxuICogdGhlIGBrZXk6IHVuZGVmaW5lZGAgc2hlbGxzICdmdWxsJyBtb2RlIG5ldmVyIGhhcykuIGBiZWZvcmUodG91Y2gpYCBydW5zXG4gKiBhaGVhZCBvZiBlYWNoIHN1cnZpdm9yIHdpdGggdGhhdCBzdXJ2aXZvcidzIGxhc3QgdG91Y2gg4oCUIHdoZXJlIHRoZVxuICogcmUtZW5jb2RlZCBmYW1pbGllcyBvZiB0aGUgYWRtaXR0ZWQgcmVjb3JkIHRha2UgdGhlaXIgcGxhY2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEluRmFtaWx5T3JkZXIoXG4gIHN1cnZpdm9yczogU3Vydml2b3JbXSxcbiAgcm9vdE9mOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICBieVJvb3Q6IE1hcDxzdHJpbmcsIFN1cnZpdm9yW10+LFxuICBlbWl0OiAoczogU3Vydml2b3IpID0+IHZvaWQsXG4gIGJlZm9yZTogKHRvdWNoOiBudW1iZXIpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBzIG9mIHN1cnZpdm9ycykge1xuICAgIGJlZm9yZShzLmxhc3QpO1xuICAgIGNvbnN0IHJvb3QgPSByb290T2YuZ2V0KHMucGF0aCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGZhbWlseSA9IGJ5Um9vdC5nZXQocm9vdCkgYXMgU3Vydml2b3JbXTtcbiAgICBpZiAoZmFtaWx5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgZW1pdChzKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocy5wYXRoICE9PSByb290KSBlbWl0KHMpO1xuICAgIGlmIChmYW1pbHlbZmFtaWx5Lmxlbmd0aCAtIDFdID09PSBzKSBlbWl0KGZhbWlseS5maW5kKChtKSA9PiBtLnBhdGggPT09IHJvb3QpIGFzIFN1cnZpdm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGVuZC1kZXRlY3Rpb24gcHJlZGljYXRlICgjMTNjLUIgwqcyLjIpOiBib3RoIHZhbHVlcyBhcmUgYXJyYXlzLCB0aGVcbiAqIGZpbmFsIGlzIHN0cmljdGx5IGxvbmdlciwgYW5kIHRoZSBiYXNlIGlzIGEgc3RydWN0dXJhbCBwcmVmaXggb2YgdGhlXG4gKiBmaW5hbC4gRWxlbWVudCBjb21wYXJlcyBzaG9ydC1jaXJjdWl0IG9uIHJlZmVyZW5jZSBpZGVudGl0eSAoYGRlZXBFcXVhbGAnc1xuICogYD09PWAgZmFzdCBwYXRoKSBiZWZvcmUgd2Fsa2luZyBzdHJ1Y3R1cmUsIGFuZCBiYWlsIGF0IHRoZSBmaXJzdCBtaXNtYXRjaFxuICog4oCUIHdvcnN0IGNhc2Ugb25lIHN0cnVjdHVyYWwgY29tcGFyZSBvZiB0aGUgYmFzZSBhcnJheSwgc3RyaWN0bHkgY2hlYXBlclxuICogdGhhbiB0aGUgZnVsbC12YWx1ZSBgc3RydWN0dXJlZENsb25lYCB0aGUgZmFsbGJhY2sgcGF5cy5cbiAqXG4gKiBgYmVmb3JlID09PSB1bmRlZmluZWRgIChmaXJzdCB3cml0ZSkgZmFpbHMgYEFycmF5LmlzQXJyYXlgIOKGkiBgc2V0YCwgd2hpY2hcbiAqIGtlZXBzIHRoZSBmaXJzdCB3cml0ZSBhcyB0aGUgY2F1c2FsIGFuY2hvciBmb3IgXCJ3aG8gaW5pdGlhbGl6ZWQgdGhpcyBrZXlcIi5cbiAqXG4gKiBCT1RIIGFycmF5cyBtdXN0IGFsc28gYmUgcGxhaW4gYW5kIGRlbnNlICh7QGxpbmsgaXNJbmRleE9ubHl9KTogcmVwbGF5XG4gKiByZWNvbnN0cnVjdHMgYW4gYXBwZW5kIGFzIGBbLi4uY3VycmVudCwgLi4udGFpbF1gLCBhbmQgdGhhdCBzcHJlYWQgY2Fycmllc1xuICogT05MWSBpbmRleGVkIGVsZW1lbnRzIOKAlCBhIG5hbWVkIHByb3BlcnR5IHBhcmtlZCBvbiBhbiBhcnJheSAoYSBuZXN0ZWQgd3JpdGVcbiAqIGxpa2UgYHNldChbJ2hpc3RvcnknLCdub3RlJ10sIOKApilgLCB3aGljaCBgbmF0aXZlU2V0YCBoYXBwaWx5IGhhbmdzIG9mZiB0aGVcbiAqIGFycmF5IG9iamVjdCkgb3IgYSBob2xlIHdvdWxkIGJlIHNpbGVudGx5IGRyb3BwZWQsIHdoZXJlIGAnZnVsbCdgIG1vZGVcbiAqIHN0b3JlcyB0aGUgdmFsdWUgd2hvbGUgYW5kIGtlZXBzIGl0LlxuICovXG5mdW5jdGlvbiBpc1N0cmljdEFycmF5UHJlZml4KGJlZm9yZTogdW5rbm93biwgYWZ0ZXI6IHVua25vd24pOiBiZWZvcmUgaXMgdW5rbm93bltdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJlZm9yZSkgfHwgIUFycmF5LmlzQXJyYXkoYWZ0ZXIpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChhZnRlci5sZW5ndGggPD0gYmVmb3JlLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJlZm9yZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghZGVlcEVxdWFsKGJlZm9yZVtpXSwgYWZ0ZXJbaV0pKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzSW5kZXhPbmx5KGJlZm9yZSkgJiYgaXNJbmRleE9ubHkoYWZ0ZXIpO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGFuIGFycmF5J3Mgb3duIGVudW1lcmFibGUga2V5cyBhcmUgZXhhY3RseSBpdHMgaW5kaWNlcyDigJQgbm9cbiAqICBleHRyYSBuYW1lZCBwcm9wZXJ0aWVzIGFuZCBubyBob2xlcywgaS5lLiB0aGUgYXJyYXkgc3Vydml2ZXMgYSBzcHJlYWRcbiAqICBpbnRhY3QuIE9uZSBgT2JqZWN0LmtleXNgIHBhc3MsIHNhbWUgb3JkZXIgYXMgdGhlIHByZWZpeCBjb21wYXJlIGFib3ZlXG4gKiAgYW5kIHBhaWQgb25seSBhZnRlciBpdCBzdWNjZWVkcy4gKi9cbmZ1bmN0aW9uIGlzSW5kZXhPbmx5KGFycjogdW5rbm93bltdKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhhcnIpLmxlbmd0aCA9PT0gYXJyLmxlbmd0aDtcbn1cbiJdfQ==
@@ -1,93 +0,0 @@
1
- /**
2
- * equality.ts — structural equality of committed-state values: THE owner of
3
- * "what counts as a change". What `TransactionBuffer`'s net-change filter, the
4
- * admitted record's compare, the read model's writer rule and the
5
- * borrowed-mutation guard all ask. Its one import is the classifier of value
6
- * kinds (`capture/valueKinds.ts`, a leaf); re-exported from `utils.ts`, so no
7
- * importer moved.
8
- */
9
- /**
10
- * Structural deep equality for committed-state values.
11
- *
12
- * Used by {@link TransactionBuffer} to decide whether a stage actually CHANGED
13
- * a path or merely re-wrote / reverted it to the value it already held (a
14
- * "no-op write"), and by `borrowedMutation.firstDifferingPath` to find where a
15
- * borrowed read moved. Committed state must survive `structuredClone`, so the
16
- * values it can hold are the kinds the clone keeps, and two values are equal
17
- * when a record holds the same thing for both. Every kind has ONE arm below
18
- * (`equalPairs`' switch over `ValueKind` — a kind added to the union does not
19
- * compile until it is compared). Before 9.22.0 a Date, Map or Set was compared
20
- * as an object with no own keys, and until 9.44.2 so were a RegExp, an Error,
21
- * a boxed primitive, an ArrayBuffer, a DataView and a Blob: any two of a kind
22
- * were "equal", so `$setValue('re', /y/g)` over `/x/g` committed no row and
23
- * live state kept the OLD value.
24
- *
25
- * Semantics:
26
- * - reference / identical-primitive short-circuits first (cheap fast path)
27
- * - `NaN` equals `NaN` (primitive compare falls back to `Object.is`)
28
- * - two values of different KINDS are never equal (a `Date` is never `{}`,
29
- * an array never `{ 0: … }`)
30
- * - `Date`: same `getTime()` (two invalid dates are equal)
31
- * - `RegExp`: same `source` and `flags` (the clone resets `lastIndex`)
32
- * - `Error`: the same restored kind (one of the six built-in error names,
33
- * else `Error`), own `message`, `stack` and own `cause` (deep) — what the
34
- * clone keeps; any other own field is dropped by it, so it never counts
35
- * (the admitted record's law)
36
- * - a boxed primitive: the same wrapper type and the same primitive inside
37
- * - an `ArrayBuffer`: length, resizability and bytes; a typed array or a
38
- * `DataView`: its type and the bytes IT views — never the rest of its
39
- * buffer (a Node `Buffer` views a slice of a shared pool, and the record
40
- * keeps the view's bytes only: `capture/freeze.ts · freezeRecord`)
41
- * - `Map`: same size AND, per key of `a`, `b` holds a deep-equal value —
42
- * keys by `Map` identity (`SameValueZero`), values deep
43
- * - `Set`: same size AND every member of `a` is deep-equal to SOME member
44
- * of `b` (order-insensitive — a Set has no order to compare by)
45
- * - an OPAQUE value (a Blob, a `DOMException` — content this library cannot
46
- * read): by the caller's {@link OpaqueRule} — equal only to itself by
47
- * default (replacing one is always a change), or, when both sides are
48
- * copies of one record, equal to any other of its kind
49
- * - arrays: equal length AND deep-equal element-wise (order-sensitive; an
50
- * array's expando keys are out of contract and not compared)
51
- * - objects: identical set of keys that HOLD a value AND deep-equal per key.
52
- * An own key whose value is `undefined` counts as ABSENT: it is this
53
- * library's other spelling of a deleted key (`'full'` mode flattens
54
- * `delete` into `key: undefined`; `'delta'` mode's `delete` verb removes
55
- * the key), and every consumer — JSON, the fold, `commitValueAt`, the
56
- * mirror — reads the two spellings as one state. So must the net-change
57
- * filter (9.19.1): `{}` and `{ k: undefined }` are not a change. Arrays
58
- * are untouched — a slot holding `undefined` is still a slot.
59
- *
60
- * Cost & safety:
61
- * - Allocates only transient `Object.keys` arrays, an error's property
62
- * descriptors and a byte view per compared buffer — no clones (but one
63
- * probe clone per class prototype, remembered: `capture/valueKinds.ts ·
64
- * kindOf`). It is strictly cheaper than the `structuredClone` the commit
65
- * already performs.
66
- * - Primitive comparisons (the bulk of state) are O(1) via the `===` /
67
- * `Object.is` fast paths; only nested objects/arrays incur a walk, bounded
68
- * by the value's own size.
69
- * - Terminates on CYCLIC values (9.18.1): a state value must survive
70
- * `structuredClone`, and `structuredClone` preserves cycles — so a
71
- * self-referencing value is a legal value, not an out-of-contract one. A
72
- * pair of objects already under comparison is treated as equal (the
73
- * structural answer, lodash `isEqual` semantics); acyclic inputs see no
74
- * change. Dev mode still warns about cycles at write time
75
- * (`ScopeFacade.setValue`) because they surprise narrative and JSON.
76
- */
77
- export declare function deepEqual(a: any, b: any, opaque?: OpaqueRule): boolean;
78
- /**
79
- * How {@link deepEqual} compares two OPAQUE values (a Blob, a `DOMException` —
80
- * content this library cannot read):
81
- *
82
- * - `'identity'` (the default) — equal only to itself. The answer when one
83
- * side is a value a stage handed in: the net-change filter
84
- * (`TransactionBuffer`), the append check (`deltaEncoding`). A new object
85
- * is a change, because nothing can say it is not.
86
- * - `'copies'` — equal to any other of its kind. The answer when BOTH sides
87
- * are copies of one recorded value — a fold's generations (`logModel`,
88
- * `elementProvenance`), a retained read against live state
89
- * (`borrowedMutation`), the record replayed against the read-back
90
- * (`admission`): copies never share identity, so identity would call every
91
- * opaque value changed.
92
- */
93
- export type OpaqueRule = 'identity' | 'copies';
@@ -1,262 +0,0 @@
1
- /**
2
- * equality.ts — structural equality of committed-state values: THE owner of
3
- * "what counts as a change". What `TransactionBuffer`'s net-change filter, the
4
- * admitted record's compare, the read model's writer rule and the
5
- * borrowed-mutation guard all ask. Its one import is the classifier of value
6
- * kinds (`capture/valueKinds.ts`, a leaf); re-exported from `utils.ts`, so no
7
- * importer moved.
8
- */
9
- import { kindOf } from '../capture/valueKinds.js';
10
- /**
11
- * Structural deep equality for committed-state values.
12
- *
13
- * Used by {@link TransactionBuffer} to decide whether a stage actually CHANGED
14
- * a path or merely re-wrote / reverted it to the value it already held (a
15
- * "no-op write"), and by `borrowedMutation.firstDifferingPath` to find where a
16
- * borrowed read moved. Committed state must survive `structuredClone`, so the
17
- * values it can hold are the kinds the clone keeps, and two values are equal
18
- * when a record holds the same thing for both. Every kind has ONE arm below
19
- * (`equalPairs`' switch over `ValueKind` — a kind added to the union does not
20
- * compile until it is compared). Before 9.22.0 a Date, Map or Set was compared
21
- * as an object with no own keys, and until 9.44.2 so were a RegExp, an Error,
22
- * a boxed primitive, an ArrayBuffer, a DataView and a Blob: any two of a kind
23
- * were "equal", so `$setValue('re', /y/g)` over `/x/g` committed no row and
24
- * live state kept the OLD value.
25
- *
26
- * Semantics:
27
- * - reference / identical-primitive short-circuits first (cheap fast path)
28
- * - `NaN` equals `NaN` (primitive compare falls back to `Object.is`)
29
- * - two values of different KINDS are never equal (a `Date` is never `{}`,
30
- * an array never `{ 0: … }`)
31
- * - `Date`: same `getTime()` (two invalid dates are equal)
32
- * - `RegExp`: same `source` and `flags` (the clone resets `lastIndex`)
33
- * - `Error`: the same restored kind (one of the six built-in error names,
34
- * else `Error`), own `message`, `stack` and own `cause` (deep) — what the
35
- * clone keeps; any other own field is dropped by it, so it never counts
36
- * (the admitted record's law)
37
- * - a boxed primitive: the same wrapper type and the same primitive inside
38
- * - an `ArrayBuffer`: length, resizability and bytes; a typed array or a
39
- * `DataView`: its type and the bytes IT views — never the rest of its
40
- * buffer (a Node `Buffer` views a slice of a shared pool, and the record
41
- * keeps the view's bytes only: `capture/freeze.ts · freezeRecord`)
42
- * - `Map`: same size AND, per key of `a`, `b` holds a deep-equal value —
43
- * keys by `Map` identity (`SameValueZero`), values deep
44
- * - `Set`: same size AND every member of `a` is deep-equal to SOME member
45
- * of `b` (order-insensitive — a Set has no order to compare by)
46
- * - an OPAQUE value (a Blob, a `DOMException` — content this library cannot
47
- * read): by the caller's {@link OpaqueRule} — equal only to itself by
48
- * default (replacing one is always a change), or, when both sides are
49
- * copies of one record, equal to any other of its kind
50
- * - arrays: equal length AND deep-equal element-wise (order-sensitive; an
51
- * array's expando keys are out of contract and not compared)
52
- * - objects: identical set of keys that HOLD a value AND deep-equal per key.
53
- * An own key whose value is `undefined` counts as ABSENT: it is this
54
- * library's other spelling of a deleted key (`'full'` mode flattens
55
- * `delete` into `key: undefined`; `'delta'` mode's `delete` verb removes
56
- * the key), and every consumer — JSON, the fold, `commitValueAt`, the
57
- * mirror — reads the two spellings as one state. So must the net-change
58
- * filter (9.19.1): `{}` and `{ k: undefined }` are not a change. Arrays
59
- * are untouched — a slot holding `undefined` is still a slot.
60
- *
61
- * Cost & safety:
62
- * - Allocates only transient `Object.keys` arrays, an error's property
63
- * descriptors and a byte view per compared buffer — no clones (but one
64
- * probe clone per class prototype, remembered: `capture/valueKinds.ts ·
65
- * kindOf`). It is strictly cheaper than the `structuredClone` the commit
66
- * already performs.
67
- * - Primitive comparisons (the bulk of state) are O(1) via the `===` /
68
- * `Object.is` fast paths; only nested objects/arrays incur a walk, bounded
69
- * by the value's own size.
70
- * - Terminates on CYCLIC values (9.18.1): a state value must survive
71
- * `structuredClone`, and `structuredClone` preserves cycles — so a
72
- * self-referencing value is a legal value, not an out-of-contract one. A
73
- * pair of objects already under comparison is treated as equal (the
74
- * structural answer, lodash `isEqual` semantics); acyclic inputs see no
75
- * change. Dev mode still warns about cycles at write time
76
- * (`ScopeFacade.setValue`) because they surprise narrative and JSON.
77
- */
78
- export function deepEqual(a, b, opaque = 'identity') {
79
- return equalPairs(a, b, undefined, opaque);
80
- }
81
- function equalPairs(a, b, seen, opaque) {
82
- if (a === b)
83
- return true; // same reference or identical primitive
84
- if (typeof a !== typeof b)
85
- return false;
86
- if (a === null || b === null)
87
- return a === b; // one is null, the other isn't
88
- if (typeof a !== 'object')
89
- return Object.is(a, b); // NaN-safe primitive compare
90
- const kind = kindOf(a);
91
- if (kind !== kindOf(b))
92
- return false;
93
- switch (kind) {
94
- // Atoms: their content is a slot, not their keys.
95
- case 'date':
96
- return Object.is(Date.prototype.getTime.call(a), Date.prototype.getTime.call(b));
97
- case 'regexp':
98
- return a.source === b.source && a.flags === b.flags;
99
- case 'boxed':
100
- return tagOf(a) === tagOf(b) && equalPairs(a.valueOf(), b.valueOf(), seen, opaque);
101
- case 'buffer':
102
- return equalBuffers(a, b);
103
- case 'view':
104
- return equalViews(a, b);
105
- case 'opaque':
106
- return opaque === 'copies' && tagOf(a) === tagOf(b); // `a === b` was answered above
107
- case 'plain':
108
- case 'array':
109
- case 'map':
110
- case 'set':
111
- case 'error':
112
- return equalContainers(a, b, kind, seen, opaque);
113
- default:
114
- return unknownKind(kind);
115
- }
116
- }
117
- /** The kinds whose content is other values: compared part by part, under the cycle guard. */
118
- function equalContainers(a, b, kind, seen, opaque) {
119
- // Cycle guard — a pair we are already inside is equal by assumption.
120
- seen ??= new WeakMap();
121
- let partners = seen.get(a);
122
- if (partners?.has(b))
123
- return true;
124
- if (!partners)
125
- seen.set(a, (partners = new WeakSet()));
126
- partners.add(b);
127
- if (kind === 'map')
128
- return equalMaps(a, b, seen, opaque);
129
- if (kind === 'set')
130
- return equalSets(a, b, seen, opaque);
131
- if (kind === 'error')
132
- return equalErrors(a, b, seen, opaque);
133
- if (kind === 'array') {
134
- if (a.length !== b.length)
135
- return false;
136
- for (let i = 0; i < a.length; i++) {
137
- if (!equalPairs(a[i], b[i], seen, opaque))
138
- return false;
139
- }
140
- return true;
141
- }
142
- // Objects: only keys that HOLD a value take part — an own `undefined` is a
143
- // deleted key, the same state as an absent one (see the contract above).
144
- let aHeld = 0;
145
- for (const key of Object.keys(a)) {
146
- if (a[key] === undefined)
147
- continue;
148
- aHeld++;
149
- if (!Object.prototype.hasOwnProperty.call(b, key))
150
- return false;
151
- if (!equalPairs(a[key], b[key], seen, opaque))
152
- return false;
153
- }
154
- let bHeld = 0;
155
- for (const key of Object.keys(b))
156
- if (b[key] !== undefined)
157
- bHeld++;
158
- return aHeld === bHeld;
159
- }
160
- function unknownKind(kind) {
161
- throw new TypeError(`deepEqual: no comparison for the value kind '${String(kind)}'`);
162
- }
163
- /** `[object Number]`, `[object Uint8Array]` … — the built-in type a boxed value or a view carries. */
164
- function tagOf(value) {
165
- return Object.prototype.toString.call(value);
166
- }
167
- /** The same view type over the same bytes — the bytes the view sees, wherever they sit in its buffer. */
168
- function equalViews(a, b) {
169
- if (tagOf(a) !== tagOf(b) || a.byteLength !== b.byteLength)
170
- return false;
171
- if (a.buffer === b.buffer && a.byteOffset === b.byteOffset)
172
- return true;
173
- const p = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
174
- const q = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);
175
- for (let i = 0; i < p.length; i++)
176
- if (p[i] !== q[i])
177
- return false;
178
- return true;
179
- }
180
- /** The same length, resizability and bytes. */
181
- function equalBuffers(a, b) {
182
- if (a === b)
183
- return true;
184
- const x = a;
185
- const y = b;
186
- if (x.byteLength !== y.byteLength || x.resizable !== y.resizable || x.maxByteLength !== y.maxByteLength) {
187
- return false;
188
- }
189
- const p = new Uint8Array(a);
190
- const q = new Uint8Array(b);
191
- for (let i = 0; i < p.length; i++)
192
- if (p[i] !== q[i])
193
- return false;
194
- return true;
195
- }
196
- /** The six error names `structuredClone` restores; any other name comes back an `Error`. */
197
- const ERROR_NAMES = new Set(['EvalError', 'RangeError', 'ReferenceError', 'SyntaxError', 'TypeError', 'URIError']);
198
- /**
199
- * Two errors as the clone keeps them: the restored kind, the own `message`,
200
- * the `stack` and the own `cause` (deep). Any other own field is dropped by
201
- * the clone, so it never counts.
202
- */
203
- function equalErrors(a, b, seen, opaque) {
204
- if (errorKindOf(a) !== errorKindOf(b) || stackOf(a) !== stackOf(b))
205
- return false;
206
- const aMessage = ownData(a, 'message');
207
- const bMessage = ownData(b, 'message');
208
- if (String(aMessage?.value) !== String(bMessage?.value) || !aMessage !== !bMessage)
209
- return false;
210
- const aCause = ownData(a, 'cause');
211
- const bCause = ownData(b, 'cause');
212
- if (!aCause || !bCause)
213
- return !aCause === !bCause;
214
- return equalPairs(aCause.value, bCause.value, seen, opaque);
215
- }
216
- function errorKindOf(error) {
217
- const name = String(error.name);
218
- return ERROR_NAMES.has(name) ? name : 'Error';
219
- }
220
- function stackOf(error) {
221
- const stack = error.stack;
222
- return typeof stack === 'string' ? stack : undefined;
223
- }
224
- /** An own DATA property, boxed — how the clone reads an error's `message` and `cause`. */
225
- function ownData(value, key) {
226
- const descriptor = Object.getOwnPropertyDescriptor(value, key);
227
- return descriptor !== undefined && Object.prototype.hasOwnProperty.call(descriptor, 'value')
228
- ? { value: descriptor.value }
229
- : undefined;
230
- }
231
- function equalMaps(a, b, seen, opaque) {
232
- if (a.size !== b.size)
233
- return false;
234
- for (const [key, value] of a) {
235
- if (!b.has(key))
236
- return false;
237
- if (!equalPairs(value, b.get(key), seen, opaque))
238
- return false;
239
- }
240
- return true;
241
- }
242
- /**
243
- * Order-insensitive, deep per member. Quadratic in the worst case for sets of
244
- * objects — a set of primitives (the common shape) is one `has` per member.
245
- */
246
- function equalSets(a, b, seen, opaque) {
247
- if (a.size !== b.size)
248
- return false;
249
- const unmatched = [...b];
250
- for (const member of a) {
251
- // SameValueZero first — primitives and shared references, one `has`.
252
- // Each match retires its slot so two structurally-equal members of `a`
253
- // cannot both claim the same member of `b`.
254
- const at = unmatched.indexOf(member);
255
- const found = at >= 0 ? at : unmatched.findIndex((candidate) => equalPairs(member, candidate, seen, opaque));
256
- if (found < 0)
257
- return false;
258
- unmatched.splice(found, 1);
259
- }
260
- return true;
261
- }
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9lcXVhbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFrQixNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxTQUFxQixVQUFVO0lBQ3ZFLE9BQU8sVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUE0QkQsU0FBUyxVQUFVLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxJQUEyQixFQUFFLE1BQWtCO0lBQ2pGLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLHdDQUF3QztJQUNsRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSTtRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUM3RSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO0lBRWhGLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDckMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLGtEQUFrRDtR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QU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDN0csSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGVxdWFsaXR5LnRzIOKAlCBzdHJ1Y3R1cmFsIGVxdWFsaXR5IG9mIGNvbW1pdHRlZC1zdGF0ZSB2YWx1ZXM6IFRIRSBvd25lciBvZlxuICogXCJ3aGF0IGNvdW50cyBhcyBhIGNoYW5nZVwiLiBXaGF0IGBUcmFuc2FjdGlvbkJ1ZmZlcmAncyBuZXQtY2hhbmdlIGZpbHRlciwgdGhlXG4gKiBhZG1pdHRlZCByZWNvcmQncyBjb21wYXJlLCB0aGUgcmVhZCBtb2RlbCdzIHdyaXRlciBydWxlIGFuZCB0aGVcbiAqIGJvcnJvd2VkLW11dGF0aW9uIGd1YXJkIGFsbCBhc2suIEl0cyBvbmUgaW1wb3J0IGlzIHRoZSBjbGFzc2lmaWVyIG9mIHZhbHVlXG4gKiBraW5kcyAoYGNhcHR1cmUvdmFsdWVLaW5kcy50c2AsIGEgbGVhZik7IHJlLWV4cG9ydGVkIGZyb20gYHV0aWxzLnRzYCwgc28gbm9cbiAqIGltcG9ydGVyIG1vdmVkLlxuICovXG5cbmltcG9ydCB7IHR5cGUgVmFsdWVLaW5kLCBraW5kT2YgfSBmcm9tICcuLi9jYXB0dXJlL3ZhbHVlS2luZHMuanMnO1xuXG4vKipcbiAqIFN0cnVjdHVyYWwgZGVlcCBlcXVhbGl0eSBmb3IgY29tbWl0dGVkLXN0YXRlIHZhbHVlcy5cbiAqXG4gKiBVc2VkIGJ5IHtAbGluayBUcmFuc2FjdGlvbkJ1ZmZlcn0gdG8gZGVjaWRlIHdoZXRoZXIgYSBzdGFnZSBhY3R1YWxseSBDSEFOR0VEXG4gKiBhIHBhdGggb3IgbWVyZWx5IHJlLXdyb3RlIC8gcmV2ZXJ0ZWQgaXQgdG8gdGhlIHZhbHVlIGl0IGFscmVhZHkgaGVsZCAoYVxuICogXCJuby1vcCB3cml0ZVwiKSwgYW5kIGJ5IGBib3Jyb3dlZE11dGF0aW9uLmZpcnN0RGlmZmVyaW5nUGF0aGAgdG8gZmluZCB3aGVyZSBhXG4gKiBib3Jyb3dlZCByZWFkIG1vdmVkLiBDb21taXR0ZWQgc3RhdGUgbXVzdCBzdXJ2aXZlIGBzdHJ1Y3R1cmVkQ2xvbmVgLCBzbyB0aGVcbiAqIHZhbHVlcyBpdCBjYW4gaG9sZCBhcmUgdGhlIGtpbmRzIHRoZSBjbG9uZSBrZWVwcywgYW5kIHR3byB2YWx1ZXMgYXJlIGVxdWFsXG4gKiB3aGVuIGEgcmVjb3JkIGhvbGRzIHRoZSBzYW1lIHRoaW5nIGZvciBib3RoLiBFdmVyeSBraW5kIGhhcyBPTkUgYXJtIGJlbG93XG4gKiAoYGVxdWFsUGFpcnNgJyBzd2l0Y2ggb3ZlciBgVmFsdWVLaW5kYCDigJQgYSBraW5kIGFkZGVkIHRvIHRoZSB1bmlvbiBkb2VzIG5vdFxuICogY29tcGlsZSB1bnRpbCBpdCBpcyBjb21wYXJlZCkuIEJlZm9yZSA5LjIyLjAgYSBEYXRlLCBNYXAgb3IgU2V0IHdhcyBjb21wYXJlZFxuICogYXMgYW4gb2JqZWN0IHdpdGggbm8gb3duIGtleXMsIGFuZCB1bnRpbCA5LjQ0LjIgc28gd2VyZSBhIFJlZ0V4cCwgYW4gRXJyb3IsXG4gKiBhIGJveGVkIHByaW1pdGl2ZSwgYW4gQXJyYXlCdWZmZXIsIGEgRGF0YVZpZXcgYW5kIGEgQmxvYjogYW55IHR3byBvZiBhIGtpbmRcbiAqIHdlcmUgXCJlcXVhbFwiLCBzbyBgJHNldFZhbHVlKCdyZScsIC95L2cpYCBvdmVyIGAveC9nYCBjb21taXR0ZWQgbm8gcm93IGFuZFxuICogbGl2ZSBzdGF0ZSBrZXB0IHRoZSBPTEQgdmFsdWUuXG4gKlxuICogU2VtYW50aWNzOlxuICogICAtIHJlZmVyZW5jZSAvIGlkZW50aWNhbC1wcmltaXRpdmUgc2hvcnQtY2lyY3VpdHMgZmlyc3QgKGNoZWFwIGZhc3QgcGF0aClcbiAqICAgLSBgTmFOYCBlcXVhbHMgYE5hTmAgKHByaW1pdGl2ZSBjb21wYXJlIGZhbGxzIGJhY2sgdG8gYE9iamVjdC5pc2ApXG4gKiAgIC0gdHdvIHZhbHVlcyBvZiBkaWZmZXJlbnQgS0lORFMgYXJlIG5ldmVyIGVxdWFsIChhIGBEYXRlYCBpcyBuZXZlciBge31gLFxuICogICAgIGFuIGFycmF5IG5ldmVyIGB7IDA6IOKApiB9YClcbiAqICAgLSBgRGF0ZWA6IHNhbWUgYGdldFRpbWUoKWAgKHR3byBpbnZhbGlkIGRhdGVzIGFyZSBlcXVhbClcbiAqICAgLSBgUmVnRXhwYDogc2FtZSBgc291cmNlYCBhbmQgYGZsYWdzYCAodGhlIGNsb25lIHJlc2V0cyBgbGFzdEluZGV4YClcbiAqICAgLSBgRXJyb3JgOiB0aGUgc2FtZSByZXN0b3JlZCBraW5kIChvbmUgb2YgdGhlIHNpeCBidWlsdC1pbiBlcnJvciBuYW1lcyxcbiAqICAgICBlbHNlIGBFcnJvcmApLCBvd24gYG1lc3NhZ2VgLCBgc3RhY2tgIGFuZCBvd24gYGNhdXNlYCAoZGVlcCkg4oCUIHdoYXQgdGhlXG4gKiAgICAgY2xvbmUga2VlcHM7IGFueSBvdGhlciBvd24gZmllbGQgaXMgZHJvcHBlZCBieSBpdCwgc28gaXQgbmV2ZXIgY291bnRzXG4gKiAgICAgKHRoZSBhZG1pdHRlZCByZWNvcmQncyBsYXcpXG4gKiAgIC0gYSBib3hlZCBwcmltaXRpdmU6IHRoZSBzYW1lIHdyYXBwZXIgdHlwZSBhbmQgdGhlIHNhbWUgcHJpbWl0aXZlIGluc2lkZVxuICogICAtIGFuIGBBcnJheUJ1ZmZlcmA6IGxlbmd0aCwgcmVzaXphYmlsaXR5IGFuZCBieXRlczsgYSB0eXBlZCBhcnJheSBvciBhXG4gKiAgICAgYERhdGFWaWV3YDogaXRzIHR5cGUgYW5kIHRoZSBieXRlcyBJVCB2aWV3cyDigJQgbmV2ZXIgdGhlIHJlc3Qgb2YgaXRzXG4gKiAgICAgYnVmZmVyIChhIE5vZGUgYEJ1ZmZlcmAgdmlld3MgYSBzbGljZSBvZiBhIHNoYXJlZCBwb29sLCBhbmQgdGhlIHJlY29yZFxuICogICAgIGtlZXBzIHRoZSB2aWV3J3MgYnl0ZXMgb25seTogYGNhcHR1cmUvZnJlZXplLnRzIMK3IGZyZWV6ZVJlY29yZGApXG4gKiAgIC0gYE1hcGA6IHNhbWUgc2l6ZSBBTkQsIHBlciBrZXkgb2YgYGFgLCBgYmAgaG9sZHMgYSBkZWVwLWVxdWFsIHZhbHVlIOKAlFxuICogICAgIGtleXMgYnkgYE1hcGAgaWRlbnRpdHkgKGBTYW1lVmFsdWVaZXJvYCksIHZhbHVlcyBkZWVwXG4gKiAgIC0gYFNldGA6IHNhbWUgc2l6ZSBBTkQgZXZlcnkgbWVtYmVyIG9mIGBhYCBpcyBkZWVwLWVxdWFsIHRvIFNPTUUgbWVtYmVyXG4gKiAgICAgb2YgYGJgIChvcmRlci1pbnNlbnNpdGl2ZSDigJQgYSBTZXQgaGFzIG5vIG9yZGVyIHRvIGNvbXBhcmUgYnkpXG4gKiAgIC0gYW4gT1BBUVVFIHZhbHVlIChhIEJsb2IsIGEgYERPTUV4Y2VwdGlvbmAg4oCUIGNvbnRlbnQgdGhpcyBsaWJyYXJ5IGNhbm5vdFxuICogICAgIHJlYWQpOiBieSB0aGUgY2FsbGVyJ3Mge0BsaW5rIE9wYXF1ZVJ1bGV9IOKAlCBlcXVhbCBvbmx5IHRvIGl0c2VsZiBieVxuICogICAgIGRlZmF1bHQgKHJlcGxhY2luZyBvbmUgaXMgYWx3YXlzIGEgY2hhbmdlKSwgb3IsIHdoZW4gYm90aCBzaWRlcyBhcmVcbiAqICAgICBjb3BpZXMgb2Ygb25lIHJlY29yZCwgZXF1YWwgdG8gYW55IG90aGVyIG9mIGl0cyBraW5kXG4gKiAgIC0gYXJyYXlzOiBlcXVhbCBsZW5ndGggQU5EIGRlZXAtZXF1YWwgZWxlbWVudC13aXNlIChvcmRlci1zZW5zaXRpdmU7IGFuXG4gKiAgICAgYXJyYXkncyBleHBhbmRvIGtleXMgYXJlIG91dCBvZiBjb250cmFjdCBhbmQgbm90IGNvbXBhcmVkKVxuICogICAtIG9iamVjdHM6IGlkZW50aWNhbCBzZXQgb2Yga2V5cyB0aGF0IEhPTEQgYSB2YWx1ZSBBTkQgZGVlcC1lcXVhbCBwZXIga2V5LlxuICogICAgIEFuIG93biBrZXkgd2hvc2UgdmFsdWUgaXMgYHVuZGVmaW5lZGAgY291bnRzIGFzIEFCU0VOVDogaXQgaXMgdGhpc1xuICogICAgIGxpYnJhcnkncyBvdGhlciBzcGVsbGluZyBvZiBhIGRlbGV0ZWQga2V5IChgJ2Z1bGwnYCBtb2RlIGZsYXR0ZW5zXG4gKiAgICAgYGRlbGV0ZWAgaW50byBga2V5OiB1bmRlZmluZWRgOyBgJ2RlbHRhJ2AgbW9kZSdzIGBkZWxldGVgIHZlcmIgcmVtb3Zlc1xuICogICAgIHRoZSBrZXkpLCBhbmQgZXZlcnkgY29uc3VtZXIg4oCUIEpTT04sIHRoZSBmb2xkLCBgY29tbWl0VmFsdWVBdGAsIHRoZVxuICogICAgIG1pcnJvciDigJQgcmVhZHMgdGhlIHR3byBzcGVsbGluZ3MgYXMgb25lIHN0YXRlLiBTbyBtdXN0IHRoZSBuZXQtY2hhbmdlXG4gKiAgICAgZmlsdGVyICg5LjE5LjEpOiBge31gIGFuZCBgeyBrOiB1bmRlZmluZWQgfWAgYXJlIG5vdCBhIGNoYW5nZS4gQXJyYXlzXG4gKiAgICAgYXJlIHVudG91Y2hlZCDigJQgYSBzbG90IGhvbGRpbmcgYHVuZGVmaW5lZGAgaXMgc3RpbGwgYSBzbG90LlxuICpcbiAqIENvc3QgJiBzYWZldHk6XG4gKiAgIC0gQWxsb2NhdGVzIG9ubHkgdHJhbnNpZW50IGBPYmplY3Qua2V5c2AgYXJyYXlzLCBhbiBlcnJvcidzIHByb3BlcnR5XG4gKiAgICAgZGVzY3JpcHRvcnMgYW5kIGEgYnl0ZSB2aWV3IHBlciBjb21wYXJlZCBidWZmZXIg4oCUIG5vIGNsb25lcyAoYnV0IG9uZVxuICogICAgIHByb2JlIGNsb25lIHBlciBjbGFzcyBwcm90b3R5cGUsIHJlbWVtYmVyZWQ6IGBjYXB0dXJlL3ZhbHVlS2luZHMudHMgwrdcbiAqICAgICBraW5kT2ZgKS4gSXQgaXMgc3RyaWN0bHkgY2hlYXBlciB0aGFuIHRoZSBgc3RydWN0dXJlZENsb25lYCB0aGUgY29tbWl0XG4gKiAgICAgYWxyZWFkeSBwZXJmb3Jtcy5cbiAqICAgLSBQcmltaXRpdmUgY29tcGFyaXNvbnMgKHRoZSBidWxrIG9mIHN0YXRlKSBhcmUgTygxKSB2aWEgdGhlIGA9PT1gIC9cbiAqICAgICBgT2JqZWN0LmlzYCBmYXN0IHBhdGhzOyBvbmx5IG5lc3RlZCBvYmplY3RzL2FycmF5cyBpbmN1ciBhIHdhbGssIGJvdW5kZWRcbiAqICAgICBieSB0aGUgdmFsdWUncyBvd24gc2l6ZS5cbiAqICAgLSBUZXJtaW5hdGVzIG9uIENZQ0xJQyB2YWx1ZXMgKDkuMTguMSk6IGEgc3RhdGUgdmFsdWUgbXVzdCBzdXJ2aXZlXG4gKiAgICAgYHN0cnVjdHVyZWRDbG9uZWAsIGFuZCBgc3RydWN0dXJlZENsb25lYCBwcmVzZXJ2ZXMgY3ljbGVzIOKAlCBzbyBhXG4gKiAgICAgc2VsZi1yZWZlcmVuY2luZyB2YWx1ZSBpcyBhIGxlZ2FsIHZhbHVlLCBub3QgYW4gb3V0LW9mLWNvbnRyYWN0IG9uZS4gQVxuICogICAgIHBhaXIgb2Ygb2JqZWN0cyBhbHJlYWR5IHVuZGVyIGNvbXBhcmlzb24gaXMgdHJlYXRlZCBhcyBlcXVhbCAodGhlXG4gKiAgICAgc3RydWN0dXJhbCBhbnN3ZXIsIGxvZGFzaCBgaXNFcXVhbGAgc2VtYW50aWNzKTsgYWN5Y2xpYyBpbnB1dHMgc2VlIG5vXG4gKiAgICAgY2hhbmdlLiBEZXYgbW9kZSBzdGlsbCB3YXJucyBhYm91dCBjeWNsZXMgYXQgd3JpdGUgdGltZVxuICogICAgIChgU2NvcGVGYWNhZGUuc2V0VmFsdWVgKSBiZWNhdXNlIHRoZXkgc3VycHJpc2UgbmFycmF0aXZlIGFuZCBKU09OLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcEVxdWFsKGE6IGFueSwgYjogYW55LCBvcGFxdWU6IE9wYXF1ZVJ1bGUgPSAnaWRlbnRpdHknKTogYm9vbGVhbiB7XG4gIHJldHVybiBlcXVhbFBhaXJzKGEsIGIsIHVuZGVmaW5lZCwgb3BhcXVlKTtcbn1cblxuLyoqXG4gKiBIb3cge0BsaW5rIGRlZXBFcXVhbH0gY29tcGFyZXMgdHdvIE9QQVFVRSB2YWx1ZXMgKGEgQmxvYiwgYSBgRE9NRXhjZXB0aW9uYCDigJRcbiAqIGNvbnRlbnQgdGhpcyBsaWJyYXJ5IGNhbm5vdCByZWFkKTpcbiAqXG4gKiAgIC0gYCdpZGVudGl0eSdgICh0aGUgZGVmYXVsdCkg4oCUIGVxdWFsIG9ubHkgdG8gaXRzZWxmLiBUaGUgYW5zd2VyIHdoZW4gb25lXG4gKiAgICAgc2lkZSBpcyBhIHZhbHVlIGEgc3RhZ2UgaGFuZGVkIGluOiB0aGUgbmV0LWNoYW5nZSBmaWx0ZXJcbiAqICAgICAoYFRyYW5zYWN0aW9uQnVmZmVyYCksIHRoZSBhcHBlbmQgY2hlY2sgKGBkZWx0YUVuY29kaW5nYCkuIEEgbmV3IG9iamVjdFxuICogICAgIGlzIGEgY2hhbmdlLCBiZWNhdXNlIG5vdGhpbmcgY2FuIHNheSBpdCBpcyBub3QuXG4gKiAgIC0gYCdjb3BpZXMnYCDigJQgZXF1YWwgdG8gYW55IG90aGVyIG9mIGl0cyBraW5kLiBUaGUgYW5zd2VyIHdoZW4gQk9USCBzaWRlc1xuICogICAgIGFyZSBjb3BpZXMgb2Ygb25lIHJlY29yZGVkIHZhbHVlIOKAlCBhIGZvbGQncyBnZW5lcmF0aW9ucyAoYGxvZ01vZGVsYCxcbiAqICAgICBgZWxlbWVudFByb3ZlbmFuY2VgKSwgYSByZXRhaW5lZCByZWFkIGFnYWluc3QgbGl2ZSBzdGF0ZVxuICogICAgIChgYm9ycm93ZWRNdXRhdGlvbmApLCB0aGUgcmVjb3JkIHJlcGxheWVkIGFnYWluc3QgdGhlIHJlYWQtYmFja1xuICogICAgIChgYWRtaXNzaW9uYCk6IGNvcGllcyBuZXZlciBzaGFyZSBpZGVudGl0eSwgc28gaWRlbnRpdHkgd291bGQgY2FsbCBldmVyeVxuICogICAgIG9wYXF1ZSB2YWx1ZSBjaGFuZ2VkLlxuICovXG5leHBvcnQgdHlwZSBPcGFxdWVSdWxlID0gJ2lkZW50aXR5JyB8ICdjb3BpZXMnO1xuXG4vKipcbiAqIE9iamVjdCBwYWlycyBtZXQgc28gZmFyLCBrZXllZCBgYSDihpIgdGhlIGIncyBpdCBoYXMgYmVlbiBwYWlyZWQgd2l0aGAuIENyZWF0ZWRcbiAqIGxhemlseSBieSB0aGUgZmlyc3Qgb2JqZWN0IHBhaXIsIHNvIHByaW1pdGl2ZSBjb21wYXJlcyBhbGxvY2F0ZSBub3RoaW5nLlxuICogTmV2ZXIgcHJ1bmVkOiBldmVyeSBgZmFsc2VgIHJldHVybnMgc3RyYWlnaHQgdXAgdG8gdGhlIGNhbGxlciAoZWFjaCByZWN1cnNpdmVcbiAqIGNhbGwgc2hvcnQtY2lyY3VpdHMgb24gaXQpLCBzbyBub3RoaW5nIGlzIGxvb2tlZCB1cCBhZnRlciBhIG1pc21hdGNoIOKAlCBhXG4gKiBzdG9yZWQgcGFpciBpcyBlaXRoZXIgc3RpbGwgdW5kZXIgY29tcGFyaXNvbiBvciBhbHJlYWR5IGtub3duIGVxdWFsLlxuICovXG50eXBlIFNlZW5QYWlycyA9IFdlYWtNYXA8b2JqZWN0LCBXZWFrU2V0PG9iamVjdD4+O1xuXG5mdW5jdGlvbiBlcXVhbFBhaXJzKGE6IGFueSwgYjogYW55LCBzZWVuOiBTZWVuUGFpcnMgfCB1bmRlZmluZWQsIG9wYXF1ZTogT3BhcXVlUnVsZSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7IC8vIHNhbWUgcmVmZXJlbmNlIG9yIGlkZW50aWNhbCBwcmltaXRpdmVcbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlO1xuICBpZiAoYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKSByZXR1cm4gYSA9PT0gYjsgLy8gb25lIGlzIG51bGwsIHRoZSBvdGhlciBpc24ndFxuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmlzKGEsIGIpOyAvLyBOYU4tc2FmZSBwcmltaXRpdmUgY29tcGFyZVxuXG4gIGNvbnN0IGtpbmQgPSBraW5kT2YoYSk7XG4gIGlmIChraW5kICE9PSBraW5kT2YoYikpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgLy8gQXRvbXM6IHRoZWlyIGNvbnRlbnQgaXMgYSBzbG90LCBub3QgdGhlaXIga2V5cy5cbiAgICBjYXNlICdkYXRlJzpcbiAgICAgIHJldHVybiBPYmplY3QuaXMoRGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKGEpLCBEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoYikpO1xuICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgY2FzZSAnYm94ZWQnOlxuICAgICAgcmV0dXJuIHRhZ09mKGEpID09PSB0YWdPZihiKSAmJiBlcXVhbFBhaXJzKGEudmFsdWVPZigpLCBiLnZhbHVlT2YoKSwgc2Vlbiwgb3BhcXVlKTtcbiAgICBjYXNlICdidWZmZXInOlxuICAgICAgcmV0dXJuIGVxdWFsQnVmZmVycyhhLCBiKTtcbiAgICBjYXNlICd2aWV3JzpcbiAgICAgIHJldHVybiBlcXVhbFZpZXdzKGEsIGIpO1xuICAgIGNhc2UgJ29wYXF1ZSc6XG4gICAgICByZXR1cm4gb3BhcXVlID09PSAnY29waWVzJyAmJiB0YWdPZihhKSA9PT0gdGFnT2YoYik7IC8vIGBhID09PSBiYCB3YXMgYW5zd2VyZWQgYWJvdmVcbiAgICBjYXNlICdwbGFpbic6XG4gICAgY2FzZSAnYXJyYXknOlxuICAgIGNhc2UgJ21hcCc6XG4gICAgY2FzZSAnc2V0JzpcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gZXF1YWxDb250YWluZXJzKGEsIGIsIGtpbmQsIHNlZW4sIG9wYXF1ZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmtub3duS2luZChraW5kKTtcbiAgfVxufVxuXG4vKiogVGhlIGtpbmRzIHdob3NlIGNvbnRlbnQgaXMgb3RoZXIgdmFsdWVzOiBjb21wYXJlZCBwYXJ0IGJ5IHBhcnQsIHVuZGVyIHRoZSBjeWNsZSBndWFyZC4gKi9cbmZ1bmN0aW9uIGVxdWFsQ29udGFpbmVycyhhOiBhbnksIGI6IGFueSwga2luZDogVmFsdWVLaW5kLCBzZWVuOiBTZWVuUGFpcnMgfCB1bmRlZmluZWQsIG9wYXF1ZTogT3BhcXVlUnVsZSk6IGJvb2xlYW4ge1xuICAvLyBDeWNsZSBndWFyZCDigJQgYSBwYWlyIHdlIGFyZSBhbHJlYWR5IGluc2lkZSBpcyBlcXVhbCBieSBhc3N1bXB0aW9uLlxuICBzZWVuID8/PSBuZXcgV2Vha01hcCgpO1xuICBsZXQgcGFydG5lcnMgPSBzZWVuLmdldChhKTtcbiAgaWYgKHBhcnRuZXJzPy5oYXMoYikpIHJldHVybiB0cnVlO1xuICBpZiAoIXBhcnRuZXJzKSBzZWVuLnNldChhLCAocGFydG5lcnMgPSBuZXcgV2Vha1NldCgpKSk7XG4gIHBhcnRuZXJzLmFkZChiKTtcblxuICBpZiAoa2luZCA9PT0gJ21hcCcpIHJldHVybiBlcXVhbE1hcHMoYSwgYiwgc2Vlbiwgb3BhcXVlKTtcbiAgaWYgKGtpbmQgPT09ICdzZXQnKSByZXR1cm4gZXF1YWxTZXRzKGEsIGIsIHNlZW4sIG9wYXF1ZSk7XG4gIGlmIChraW5kID09PSAnZXJyb3InKSByZXR1cm4gZXF1YWxFcnJvcnMoYSwgYiwgc2Vlbiwgb3BhcXVlKTtcbiAgaWYgKGtpbmQgPT09ICdhcnJheScpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWVxdWFsUGFpcnMoYVtpXSwgYltpXSwgc2Vlbiwgb3BhcXVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIE9iamVjdHM6IG9ubHkga2V5cyB0aGF0IEhPTEQgYSB2YWx1ZSB0YWtlIHBhcnQg4oCUIGFuIG93biBgdW5kZWZpbmVkYCBpcyBhXG4gIC8vIGRlbGV0ZWQga2V5LCB0aGUgc2FtZSBzdGF0ZSBhcyBhbiBhYnNlbnQgb25lIChzZWUgdGhlIGNvbnRyYWN0IGFib3ZlKS5cbiAgbGV0IGFIZWxkID0gMDtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYSkpIHtcbiAgICBpZiAoYVtrZXldID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGFIZWxkKys7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghZXF1YWxQYWlycyhhW2tleV0sIGJba2V5XSwgc2Vlbiwgb3BhcXVlKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGxldCBiSGVsZCA9IDA7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGIpKSBpZiAoYltrZXldICE9PSB1bmRlZmluZWQpIGJIZWxkKys7XG4gIHJldHVybiBhSGVsZCA9PT0gYkhlbGQ7XG59XG5cbmZ1bmN0aW9uIHVua25vd25LaW5kKGtpbmQ6IG5ldmVyKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBkZWVwRXF1YWw6IG5vIGNvbXBhcmlzb24gZm9yIHRoZSB2YWx1ZSBraW5kICcke1N0cmluZyhraW5kKX0nYCk7XG59XG5cbi8qKiBgW29iamVjdCBOdW1iZXJdYCwgYFtvYmplY3QgVWludDhBcnJheV1gIOKApiDigJQgdGhlIGJ1aWx0LWluIHR5cGUgYSBib3hlZCB2YWx1ZSBvciBhIHZpZXcgY2Fycmllcy4gKi9cbmZ1bmN0aW9uIHRhZ09mKHZhbHVlOiBvYmplY3QpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuLyoqIFRoZSBzYW1lIHZpZXcgdHlwZSBvdmVyIHRoZSBzYW1lIGJ5dGVzIOKAlCB0aGUgYnl0ZXMgdGhlIHZpZXcgc2Vlcywgd2hlcmV2ZXIgdGhleSBzaXQgaW4gaXRzIGJ1ZmZlci4gKi9cbmZ1bmN0aW9uIGVxdWFsVmlld3MoYTogQXJyYXlCdWZmZXJWaWV3LCBiOiBBcnJheUJ1ZmZlclZpZXcpOiBib29sZWFuIHtcbiAgaWYgKHRhZ09mKGEpICE9PSB0YWdPZihiKSB8fCBhLmJ5dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYS5idWZmZXIgPT09IGIuYnVmZmVyICYmIGEuYnl0ZU9mZnNldCA9PT0gYi5ieXRlT2Zmc2V0KSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcCA9IG5ldyBVaW50OEFycmF5KGEuYnVmZmVyLCBhLmJ5dGVPZmZzZXQsIGEuYnl0ZUxlbmd0aCk7XG4gIGNvbnN0IHEgPSBuZXcgVWludDhBcnJheShiLmJ1ZmZlciwgYi5ieXRlT2Zmc2V0LCBiLmJ5dGVMZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChwW2ldICE9PSBxW2ldKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogVGhlIHNhbWUgbGVuZ3RoLCByZXNpemFiaWxpdHkgYW5kIGJ5dGVzLiAqL1xuZnVuY3Rpb24gZXF1YWxCdWZmZXJzKGE6IEFycmF5QnVmZmVyTGlrZSwgYjogQXJyYXlCdWZmZXJMaWtlKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgeCA9IGEgYXMgQXJyYXlCdWZmZXJMaWtlICYgeyByZXNpemFibGU/OiBib29sZWFuOyBtYXhCeXRlTGVuZ3RoPzogbnVtYmVyIH07XG4gIGNvbnN0IHkgPSBiIGFzIHR5cGVvZiB4O1xuICBpZiAoeC5ieXRlTGVuZ3RoICE9PSB5LmJ5dGVMZW5ndGggfHwgeC5yZXNpemFibGUgIT09IHkucmVzaXphYmxlIHx8IHgubWF4Qnl0ZUxlbmd0aCAhPT0geS5tYXhCeXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHAgPSBuZXcgVWludDhBcnJheShhKTtcbiAgY29uc3QgcSA9IG5ldyBVaW50OEFycmF5KGIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChwW2ldICE9PSBxW2ldKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogVGhlIHNpeCBlcnJvciBuYW1lcyBgc3RydWN0dXJlZENsb25lYCByZXN0b3JlczsgYW55IG90aGVyIG5hbWUgY29tZXMgYmFjayBhbiBgRXJyb3JgLiAqL1xuY29uc3QgRVJST1JfTkFNRVMgPSBuZXcgU2V0KFsnRXZhbEVycm9yJywgJ1JhbmdlRXJyb3InLCAnUmVmZXJlbmNlRXJyb3InLCAnU3ludGF4RXJyb3InLCAnVHlwZUVycm9yJywgJ1VSSUVycm9yJ10pO1xuXG4vKipcbiAqIFR3byBlcnJvcnMgYXMgdGhlIGNsb25lIGtlZXBzIHRoZW06IHRoZSByZXN0b3JlZCBraW5kLCB0aGUgb3duIGBtZXNzYWdlYCxcbiAqIHRoZSBgc3RhY2tgIGFuZCB0aGUgb3duIGBjYXVzZWAgKGRlZXApLiBBbnkgb3RoZXIgb3duIGZpZWxkIGlzIGRyb3BwZWQgYnlcbiAqIHRoZSBjbG9uZSwgc28gaXQgbmV2ZXIgY291bnRzLlxuICovXG5mdW5jdGlvbiBlcXVhbEVycm9ycyhhOiBFcnJvciwgYjogRXJyb3IsIHNlZW46IFNlZW5QYWlycywgb3BhcXVlOiBPcGFxdWVSdWxlKTogYm9vbGVhbiB7XG4gIGlmIChlcnJvcktpbmRPZihhKSAhPT0gZXJyb3JLaW5kT2YoYikgfHwgc3RhY2tPZihhKSAhPT0gc3RhY2tPZihiKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBhTWVzc2FnZSA9IG93bkRhdGEoYSwgJ21lc3NhZ2UnKTtcbiAgY29uc3QgYk1lc3NhZ2UgPSBvd25EYXRhKGIsICdtZXNzYWdlJyk7XG4gIGlmIChTdHJpbmcoYU1lc3NhZ2U/LnZhbHVlKSAhPT0gU3RyaW5nKGJNZXNzYWdlPy52YWx1ZSkgfHwgIWFNZXNzYWdlICE9PSAhYk1lc3NhZ2UpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgYUNhdXNlID0gb3duRGF0YShhLCAnY2F1c2UnKTtcbiAgY29uc3QgYkNhdXNlID0gb3duRGF0YShiLCAnY2F1c2UnKTtcbiAgaWYgKCFhQ2F1c2UgfHwgIWJDYXVzZSkgcmV0dXJuICFhQ2F1c2UgPT09ICFiQ2F1c2U7XG4gIHJldHVybiBlcXVhbFBhaXJzKGFDYXVzZS52YWx1ZSwgYkNhdXNlLnZhbHVlLCBzZWVuLCBvcGFxdWUpO1xufVxuXG5mdW5jdGlvbiBlcnJvcktpbmRPZihlcnJvcjogRXJyb3IpOiBzdHJpbmcge1xuICBjb25zdCBuYW1lID0gU3RyaW5nKGVycm9yLm5hbWUpO1xuICByZXR1cm4gRVJST1JfTkFNRVMuaGFzKG5hbWUpID8gbmFtZSA6ICdFcnJvcic7XG59XG5cbmZ1bmN0aW9uIHN0YWNrT2YoZXJyb3I6IEVycm9yKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgcmV0dXJuIHR5cGVvZiBzdGFjayA9PT0gJ3N0cmluZycgPyBzdGFjayA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIEFuIG93biBEQVRBIHByb3BlcnR5LCBib3hlZCDigJQgaG93IHRoZSBjbG9uZSByZWFkcyBhbiBlcnJvcidzIGBtZXNzYWdlYCBhbmQgYGNhdXNlYC4gKi9cbmZ1bmN0aW9uIG93bkRhdGEodmFsdWU6IG9iamVjdCwga2V5OiBzdHJpbmcpOiB7IHZhbHVlOiB1bmtub3duIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVzY3JpcHRvciwgJ3ZhbHVlJylcbiAgICA/IHsgdmFsdWU6IGRlc2NyaXB0b3IudmFsdWUgfVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBlcXVhbE1hcHMoYTogTWFwPHVua25vd24sIHVua25vd24+LCBiOiBNYXA8dW5rbm93biwgdW5rbm93bj4sIHNlZW46IFNlZW5QYWlycywgb3BhcXVlOiBPcGFxdWVSdWxlKTogYm9vbGVhbiB7XG4gIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBhKSB7XG4gICAgaWYgKCFiLmhhcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFlcXVhbFBhaXJzKHZhbHVlLCBiLmdldChrZXkpLCBzZWVuLCBvcGFxdWUpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogT3JkZXItaW5zZW5zaXRpdmUsIGRlZXAgcGVyIG1lbWJlci4gUXVhZHJhdGljIGluIHRoZSB3b3JzdCBjYXNlIGZvciBzZXRzIG9mXG4gKiBvYmplY3RzIOKAlCBhIHNldCBvZiBwcmltaXRpdmVzICh0aGUgY29tbW9uIHNoYXBlKSBpcyBvbmUgYGhhc2AgcGVyIG1lbWJlci5cbiAqL1xuZnVuY3Rpb24gZXF1YWxTZXRzKGE6IFNldDx1bmtub3duPiwgYjogU2V0PHVua25vd24+LCBzZWVuOiBTZWVuUGFpcnMsIG9wYXF1ZTogT3BhcXVlUnVsZSk6IGJvb2xlYW4ge1xuICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdW5tYXRjaGVkID0gWy4uLmJdO1xuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBhKSB7XG4gICAgLy8gU2FtZVZhbHVlWmVybyBmaXJzdCDigJQgcHJpbWl0aXZlcyBhbmQgc2hhcmVkIHJlZmVyZW5jZXMsIG9uZSBgaGFzYC5cbiAgICAvLyBFYWNoIG1hdGNoIHJldGlyZXMgaXRzIHNsb3Qgc28gdHdvIHN0cnVjdHVyYWxseS1lcXVhbCBtZW1iZXJzIG9mIGBhYFxuICAgIC8vIGNhbm5vdCBib3RoIGNsYWltIHRoZSBzYW1lIG1lbWJlciBvZiBgYmAuXG4gICAgY29uc3QgYXQgPSB1bm1hdGNoZWQuaW5kZXhPZihtZW1iZXIpO1xuICAgIGNvbnN0IGZvdW5kID0gYXQgPj0gMCA/IGF0IDogdW5tYXRjaGVkLmZpbmRJbmRleCgoY2FuZGlkYXRlKSA9PiBlcXVhbFBhaXJzKG1lbWJlciwgY2FuZGlkYXRlLCBzZWVuLCBvcGFxdWUpKTtcbiAgICBpZiAoZm91bmQgPCAwKSByZXR1cm4gZmFsc2U7XG4gICAgdW5tYXRjaGVkLnNwbGljZShmb3VuZCwgMSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
@@ -1,18 +0,0 @@
1
- /** Coordinates of an existing log within a recording/session, not a second event timeline. */
2
- export interface LogAddress {
3
- /** Engine leg that first owned this log; unchanged by a same-executor root resume. */
4
- readonly logRunId: string;
5
- /** Actual mount runtime IDs, outermost first. Root log: []. Never static subflow IDs. */
6
- readonly drillPath: readonly string[];
7
- }
8
- /**
9
- * The committed prefix present when an event was emitted. Does NOT describe
10
- * the emitter's staged writes, first-touch read view, or eventual own commit.
11
- * Several events can share a position; this is not a total event order.
12
- */
13
- export interface EmitSourcePosition extends LogAddress {
14
- /** Engine leg that created the emitting frame (not the scope's memory namespace). */
15
- readonly runId: string;
16
- /** Inclusive index in the addressed log; -1 means only its fold base existed. */
17
- readonly committedThroughIdx: number;
18
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRQb3NpdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2V2ZW50UG9zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb29yZGluYXRlcyBvZiBhbiBleGlzdGluZyBsb2cgd2l0aGluIGEgcmVjb3JkaW5nL3Nlc3Npb24sIG5vdCBhIHNlY29uZCBldmVudCB0aW1lbGluZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQWRkcmVzcyB7XG4gIC8qKiBFbmdpbmUgbGVnIHRoYXQgZmlyc3Qgb3duZWQgdGhpcyBsb2c7IHVuY2hhbmdlZCBieSBhIHNhbWUtZXhlY3V0b3Igcm9vdCByZXN1bWUuICovXG4gIHJlYWRvbmx5IGxvZ1J1bklkOiBzdHJpbmc7XG4gIC8qKiBBY3R1YWwgbW91bnQgcnVudGltZSBJRHMsIG91dGVybW9zdCBmaXJzdC4gUm9vdCBsb2c6IFtdLiBOZXZlciBzdGF0aWMgc3ViZmxvdyBJRHMuICovXG4gIHJlYWRvbmx5IGRyaWxsUGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIGNvbW1pdHRlZCBwcmVmaXggcHJlc2VudCB3aGVuIGFuIGV2ZW50IHdhcyBlbWl0dGVkLiBEb2VzIE5PVCBkZXNjcmliZVxuICogdGhlIGVtaXR0ZXIncyBzdGFnZWQgd3JpdGVzLCBmaXJzdC10b3VjaCByZWFkIHZpZXcsIG9yIGV2ZW50dWFsIG93biBjb21taXQuXG4gKiBTZXZlcmFsIGV2ZW50cyBjYW4gc2hhcmUgYSBwb3NpdGlvbjsgdGhpcyBpcyBub3QgYSB0b3RhbCBldmVudCBvcmRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWl0U291cmNlUG9zaXRpb24gZXh0ZW5kcyBMb2dBZGRyZXNzIHtcbiAgLyoqIEVuZ2luZSBsZWcgdGhhdCBjcmVhdGVkIHRoZSBlbWl0dGluZyBmcmFtZSAobm90IHRoZSBzY29wZSdzIG1lbW9yeSBuYW1lc3BhY2UpLiAqL1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICAvKiogSW5jbHVzaXZlIGluZGV4IGluIHRoZSBhZGRyZXNzZWQgbG9nOyAtMSBtZWFucyBvbmx5IGl0cyBmb2xkIGJhc2UgZXhpc3RlZC4gKi9cbiAgcmVhZG9ubHkgY29tbWl0dGVkVGhyb3VnaElkeDogbnVtYmVyO1xufVxuIl19