@@ -582,15 +582,25 @@ async function importJsModulesFromSnapshot(
582582
583583type CustomSerialized =
584584 | { pyodide_entrypoint_helper : true }
585+ | { cloudflare_compat_flags : true }
585586 | SerializedJsModule ;
587+ /**
588+ * Global objects that need a custom serializer
589+ */
590+ export type CustomSerializedObjects = {
591+ pyodide_entrypoint_helper : PyodideEntrypointHelper ;
592+ cloudflare_compat_flags : CompatibilityFlags ;
593+ } ;
586594
587595function getHiwireSerializer (
588- pyodide_entrypoint_helper : PyodideEntrypointHelper ,
596+ globalObj : CustomSerializedObjects ,
589597 modules : Set < string >
590598) : ( obj : any ) => CustomSerialized {
591599 return function serializer ( obj : any ) : CustomSerialized {
592- if ( obj === pyodide_entrypoint_helper ) {
600+ if ( obj === globalObj . pyodide_entrypoint_helper ) {
593601 return { pyodide_entrypoint_helper : true } ;
602+ } else if ( obj === globalObj . cloudflare_compat_flags ) {
603+ return { cloudflare_compat_flags : true } ;
594604 }
595605 const serializedModule = maybeSerializeJsModule ( obj , modules ) ;
596606 if ( serializedModule ) {
@@ -601,11 +611,13 @@ function getHiwireSerializer(
601611}
602612
603613function getHiwireDeserializer (
604- pyodide_entrypoint_helper : PyodideEntrypointHelper
614+ globalObj : CustomSerializedObjects
605615) : ( obj : CustomSerialized ) => any {
606616 return function deserializer ( obj ) {
607617 if ( 'pyodide_entrypoint_helper' in obj ) {
608- return pyodide_entrypoint_helper ;
618+ return globalObj . pyodide_entrypoint_helper ;
619+ } else if ( 'cloudflare_compat_flags' in obj ) {
620+ return globalObj . cloudflare_compat_flags ;
609621 }
610622 if ( 'jsModule' in obj ) {
611623 return deserializeJsModule ( obj , JS_MODULES ) ;
@@ -622,15 +634,15 @@ function getHiwireDeserializer(
622634function makeLinearMemorySnapshot (
623635 Module : Module ,
624636 importedModulesList : string [ ] ,
625- pyodide_entrypoint_helper : PyodideEntrypointHelper ,
637+ customSerializedObjects : CustomSerializedObjects ,
626638 snapshotType : ArtifactBundler . SnapshotType
627639) : Uint8Array {
628640 const dsoHandles = recordDsoHandles ( Module ) ;
629641 let hiwire : SnapshotConfig | undefined ;
630642 const jsModuleNames : Set < string > = new Set ( ) ;
631643 if ( Module . API . version !== '0.26.0a2' ) {
632644 hiwire = Module . API . serializeHiwireState (
633- getHiwireSerializer ( pyodide_entrypoint_helper , jsModuleNames )
645+ getHiwireSerializer ( customSerializedObjects , jsModuleNames )
634646 ) ;
635647 }
636648 const settings : SnapshotSettings = {
@@ -807,7 +819,7 @@ export function maybeRestoreSnapshot(Module: Module): void {
807819function collectSnapshot (
808820 Module : Module ,
809821 importedModulesList : string [ ] ,
810- pyodide_entrypoint_helper : PyodideEntrypointHelper ,
822+ customSerializedObjects : CustomSerializedObjects ,
811823 snapshotType : ArtifactBundler . SnapshotType
812824) : void {
813825 if ( ! IS_EW_VALIDATING && ! SHOULD_SNAPSHOT_TO_DISK ) {
@@ -818,7 +830,7 @@ function collectSnapshot(
818830 const snapshot = makeLinearMemorySnapshot (
819831 Module ,
820832 importedModulesList ,
821- pyodide_entrypoint_helper ,
833+ customSerializedObjects ,
822834 snapshotType
823835 ) ;
824836 entropyAfterSnapshot ( Module ) ;
@@ -841,7 +853,7 @@ function collectSnapshot(
841853 */
842854export function maybeCollectDedicatedSnapshot (
843855 Module : Module ,
844- pyodide_entrypoint_helper : PyodideEntrypointHelper | null
856+ customSerializedObjects : CustomSerializedObjects | null
845857) : void {
846858 if ( ! IS_CREATING_SNAPSHOT ) {
847859 return ;
@@ -859,12 +871,12 @@ export function maybeCollectDedicatedSnapshot(
859871 ) ;
860872 }
861873
862- if ( ! pyodide_entrypoint_helper ) {
874+ if ( ! customSerializedObjects ) {
863875 throw new PythonWorkersInternalError (
864- 'pyodide_entrypoint_helper is required for dedicated snapshot'
876+ 'customSerializedObjects is required for dedicated snapshot'
865877 ) ;
866878 }
867- collectSnapshot ( Module , [ ] , pyodide_entrypoint_helper , 'dedicated' ) ;
879+ collectSnapshot ( Module , [ ] , customSerializedObjects , 'dedicated' ) ;
868880}
869881
870882/**
@@ -875,7 +887,7 @@ export function maybeCollectDedicatedSnapshot(
875887 */
876888export function maybeCollectSnapshot (
877889 Module : Module ,
878- pyodide_entrypoint_helper : PyodideEntrypointHelper
890+ customSerializedObjects : CustomSerializedObjects
879891) : void {
880892 // In order to surface any problems that occur in `memorySnapshotDoImports` to
881893 // users in local development, always call it even if we aren't actually
@@ -893,21 +905,21 @@ export function maybeCollectSnapshot(
893905 collectSnapshot (
894906 Module ,
895907 importedModulesList ,
896- pyodide_entrypoint_helper ,
908+ customSerializedObjects ,
897909 IS_CREATING_BASELINE_SNAPSHOT ? 'baseline' : 'package'
898910 ) ;
899911}
900912
901913export function finalizeBootstrap (
902914 Module : Module ,
903- pyodide_entrypoint_helper : PyodideEntrypointHelper
915+ customSerializedObjects : CustomSerializedObjects
904916) : void {
905917 Module . API . config . _makeSnapshot =
906918 IS_CREATING_SNAPSHOT && Module . API . version !== '0.26.0a2' ;
907919 enterJaegerSpan ( 'finalize_bootstrap' , ( ) => {
908920 Module . API . finalizeBootstrap (
909921 LOADED_SNAPSHOT_META ?. hiwire ,
910- getHiwireDeserializer ( pyodide_entrypoint_helper )
922+ getHiwireDeserializer ( customSerializedObjects )
911923 ) ;
912924 } ) ;
913925 // finalizeBootstrap overrides LD_LIBRARY_PATH. Restore it.
0 commit comments