impl #507 export takeFullSnapshot as a public API

This commit is contained in:
Yanzhen Yu
2026-04-01 12:00:00 +08:00
parent 4a2eae6a44
commit 5e42ddc1cb

View File

@@ -28,6 +28,8 @@ function wrapEvent(e: event): eventWithTime {
let wrappedEmit!: (e: eventWithTime, isCheckout?: boolean) => void; let wrappedEmit!: (e: eventWithTime, isCheckout?: boolean) => void;
let takeFullSnapshot!: (isCheckout?: boolean) => void;
function record<T = eventWithTime>( function record<T = eventWithTime>(
options: recordOptions<T> = {}, options: recordOptions<T> = {},
): listenerHandler | undefined { ): listenerHandler | undefined {
@@ -190,7 +192,7 @@ function record<T = eventWithTime>(
), ),
}); });
function takeFullSnapshot(isCheckout = false) { takeFullSnapshot = (isCheckout = false) => {
wrappedEmit( wrappedEmit(
wrapEvent({ wrapEvent({
type: EventType.Meta, type: EventType.Meta,
@@ -251,7 +253,7 @@ function record<T = eventWithTime>(
}), }),
); );
mutationBuffers.forEach((buf) => buf.unlock()); // generate & emit any mutations that happened during snapshotting, as can now apply against the newly built mirror mutationBuffers.forEach((buf) => buf.unlock()); // generate & emit any mutations that happened during snapshotting, as can now apply against the newly built mirror
} };
try { try {
const handlers: listenerHandler[] = []; const handlers: listenerHandler[] = [];
@@ -455,4 +457,11 @@ record.freezePage = () => {
mutationBuffers.forEach((buf) => buf.freeze()); mutationBuffers.forEach((buf) => buf.freeze());
}; };
record.takeFullSnapshot = (isCheckout?: boolean) => {
if (!takeFullSnapshot) {
throw new Error('please take full snapshot after start recording');
}
takeFullSnapshot(isCheckout);
};
export default record; export default record;