@@ -319,19 +319,25 @@ struct ArtifactBundler_State {
319319 // to store a memory snapshot.
320320 bool isValidating;
321321
322+ // Set when the worker is a dynamically-loaded worker. Dynamic workers don't support dedicated
323+ // snapshots yet, so the Python runtime uses this to skip snapshot type validation.
324+ bool isDynamicWorkerFlag;
325+
322326 ArtifactBundler_State (kj::Maybe<const PyodidePackageManager&> packageManager,
323327 kj::Maybe<kj::Array<const kj::byte>> existingSnapshot,
324- bool isValidating = false )
328+ bool isValidating = false ,
329+ bool isDynamicWorker = false )
325330 : packageManager(packageManager),
326331 storedSnapshot (kj::none),
327332 existingSnapshot(kj::mv(existingSnapshot)),
328- isValidating(isValidating) {};
333+ isValidating(isValidating),
334+ isDynamicWorkerFlag(isDynamicWorker) {};
329335
330336 kj::Own<ArtifactBundler_State> clone () {
331337 return kj::heap<ArtifactBundler_State>(packageManager,
332338 existingSnapshot.map (
333339 [](kj::Array<const kj::byte>& data) { return kj::heapArray<const kj::byte>(data); }),
334- isValidating);
340+ isValidating, isDynamicWorkerFlag );
335341 }
336342};
337343
@@ -369,6 +375,11 @@ class ArtifactBundler: public jsg::Object {
369375 return inner->isValidating ;
370376 }
371377
378+ // Determines whether this ArtifactBundler belongs to a dynamically-loaded worker.
379+ bool isDynamicWorker () {
380+ return inner->isDynamicWorkerFlag ;
381+ }
382+
372383 static kj::Own<State> makeDisabledBundler () {
373384 return kj::heap<State>(kj::none, kj::none);
374385 }
@@ -404,6 +415,7 @@ class ArtifactBundler: public jsg::Object {
404415 JSG_METHOD (readMemorySnapshot);
405416 JSG_METHOD (disposeMemorySnapshot);
406417 JSG_METHOD (isEwValidating);
418+ JSG_METHOD (isDynamicWorker);
407419 JSG_METHOD (storeMemorySnapshot);
408420 JSG_METHOD (isEnabled);
409421 JSG_METHOD (getPackage);
0 commit comments