@@ -71,37 +71,45 @@ export default {
71
71
type,
72
72
module : ( version = '0.27.7' ) =>
73
73
`https://cdn.jsdelivr.net/pyodide/v${ version } /full/pyodide.mjs` ,
74
- async engine ( { loadPyodide } , config , url , baseURL ) {
74
+ async engine ( { loadPyodide, version } , config , url , baseURL ) {
75
75
progress ( 'Loading Pyodide' ) ;
76
76
let { packages, index_urls } = config ;
77
77
if ( packages ) packages = packages . map ( fixedRelative , baseURL ) ;
78
78
progress ( 'Loading Storage' ) ;
79
79
const indexURL = url . slice ( 0 , url . lastIndexOf ( '/' ) ) ;
80
80
// each pyodide version shares its own cache
81
- const storage = new IDBMapSync ( indexURL ) ;
81
+ const storage = new IDBMapSync ( ` ${ indexURL } @ ${ version } ` ) ;
82
82
const options = { indexURL } ;
83
83
const save = config . packages_cache !== 'never' ;
84
84
await storage . sync ( ) ;
85
85
// packages_cache = 'never' means: erase the whole DB
86
86
if ( ! save ) storage . clear ( ) ;
87
87
// otherwise check if cache is known
88
88
else if ( packages ) {
89
- packages = packages . sort ( ) ;
90
- // packages are uniquely stored as JSON key
91
- const key = stringify ( packages ) ;
92
- if ( storage . has ( key ) ) {
93
- const blob = new Blob (
94
- [ storage . get ( key ) ] ,
95
- { type : 'application/json' } ,
96
- ) ;
97
- // this should be used to bootstrap loadPyodide
98
- options . lockFileURL = URL . createObjectURL ( blob ) ;
99
- // versions are not currently understood by pyodide when
100
- // a lockFileURL is used instead of micropip.install(packages)
101
- // https://github.com/pyodide/pyodide/issues/5135#issuecomment-2441038644
102
- // https://github.com/pyscript/pyscript/issues/2245
103
- options . packages = packages . map ( name => name . split ( / [ > = < ] = / ) [ 0 ] ) ;
89
+ // packages_cache = 'passthrough' means: do not use micropip.install
90
+ if ( config . packages_cache === 'passthrough' ) {
91
+ options . packages = packages ;
104
92
packages = null ;
93
+ storage . clear ( ) ;
94
+ }
95
+ else {
96
+ packages = packages . sort ( ) ;
97
+ // packages are uniquely stored as JSON key
98
+ const key = stringify ( packages ) ;
99
+ if ( storage . has ( key ) ) {
100
+ const blob = new Blob (
101
+ [ storage . get ( key ) ] ,
102
+ { type : 'application/json' } ,
103
+ ) ;
104
+ // this should be used to bootstrap loadPyodide
105
+ options . lockFileURL = URL . createObjectURL ( blob ) ;
106
+ // versions are not currently understood by pyodide when
107
+ // a lockFileURL is used instead of micropip.install(packages)
108
+ // https://github.com/pyodide/pyodide/issues/5135#issuecomment-2441038644
109
+ // https://github.com/pyscript/pyscript/issues/2245
110
+ options . packages = packages . map ( name => name . split ( / [ > = < ] = / ) [ 0 ] ) ;
111
+ packages = null ;
112
+ }
105
113
}
106
114
}
107
115
progress ( 'Loaded Storage' ) ;
0 commit comments