@@ -3,84 +3,61 @@ import { fetchFiles, fetchPaths, io, stdio, writeFileShim } from './_utils.js';
3
3
4
4
const type = 'php-wasm' ;
5
5
6
+ // TODO: almost nothing is implemented
7
+
6
8
// REQUIRES INTEGRATION TEST
7
9
/* c8 ignore start */
8
10
export default {
9
11
type,
10
- module : ( version = '0.0.7' ) => {
11
- globalThis . exports = { } ;
12
- return `https://cdn.jsdelivr.net/npm/php-wasm@${ version } /php-worker.js` ;
13
- } ,
14
- async engine ( _ , config , url ) {
15
- const { PHP } = globalThis . exports ;
16
- delete globalThis . exports ;
12
+ module : ( version = '0.0.3' ) => `https://cdn.jsdelivr.net/npm/@webreflection/php@${ version } /es.js` ,
13
+ async engine ( { PhpWeb } , _ , url ) {
17
14
const { stderr, stdout, get } = stdio ( ) ;
18
- debugger ;
19
- const interpreter = await get ( PHP ( {
20
- print : stdout ,
21
- printErr : stderr ,
22
- noInitialRun : true ,
23
- locateFile : ( ) => `${ url . slice ( 0 , url . lastIndexOf ( '/' ) ) } /php-worker.wasm`
24
- } ) ) ;
25
- interpreter . calledRun = false ;
26
- interpreter . run ( [ '<?php echo 123;' ] ) ;
27
- // interpreter.addEventListener('output', (event) => {
28
- // io.get(interpreter).stdout(event.detail);
29
- // });
30
- // interpreter.addEventListener('error', (event) => {
31
- // io.get(interpreter).stderr(event.detail);
32
- // });
33
- // interpreter.global.getTable(LuaLibraries.Base, (index) => {
34
- // interpreter.global.setField(index, 'print', stdout);
35
- // interpreter.global.setField(index, 'printErr', stderr);
36
- // });
37
- if ( config . files ) await fetchFiles ( this , interpreter , config . files ) ;
38
- if ( config . fetch ) await fetchPaths ( this , interpreter , config . fetch ) ;
15
+ const interpreter = await new Promise ( resolve => {
16
+ const php = new PhpWeb ( {
17
+ print : stdout ,
18
+ printErr : ( message ) => {
19
+ if ( message ) stderr ( message ) ;
20
+ } ,
21
+ locateFile : ( ) => `${ url . slice ( 0 , url . lastIndexOf ( '/' ) ) } /php-web.wasm`
22
+ } ) ;
23
+ php . addEventListener ( 'ready' , ( ) => {
24
+ resolve ( get ( php ) ) ;
25
+ } ) ;
26
+ } ) ;
27
+ // TODO: to be implemented
28
+ // if (config.files) await fetchFiles(this, interpreter, config.files);
29
+ // if (config.fetch) await fetchPaths(this, interpreter, config.fetch);
39
30
return interpreter ;
40
31
} ,
41
32
// Fallback to globally defined module fields
42
- registerJSModule : ( interpreter , name , value ) => {
43
- // interpreter.global.set(name, value);
33
+ registerJSModule : ( ) => {
34
+ // TODO: to be implemented
44
35
} ,
45
36
run : ( interpreter , code , ...args ) => {
37
+ // TODO: this is always async
46
38
try {
47
- // return interpreter.run(dedent(code), ...args);
39
+ return interpreter . run ( `<?php ${ dedent ( code ) } ?>` , ...args ) ;
48
40
}
49
41
catch ( error ) {
50
42
io . get ( interpreter ) . stderr ( error ) ;
51
43
}
52
44
} ,
53
45
runAsync : async ( interpreter , code , ...args ) => {
54
46
try {
55
- return await interpreter . run ( dedent ( code ) , ...args ) ;
47
+ return await interpreter . run ( `<?php ${ dedent ( code ) } ?>` , ...args ) ;
56
48
}
57
49
catch ( error ) {
58
50
io . get ( interpreter ) . stderr ( error ) ;
59
51
}
60
52
} ,
61
- runEvent : async ( interpreter , code , event ) => {
62
- // allows method(event) as well as namespace.method(event)
63
- // it does not allow fancy brackets names for now
64
- const [ name , ...keys ] = code . split ( '.' ) ;
65
- let target = interpreter . global . get ( name ) ;
66
- let context ;
67
- for ( const key of keys ) [ context , target ] = [ target , target [ key ] ] ;
68
- try {
69
- await target . call ( context , event ) ;
70
- }
71
- catch ( error ) {
72
- io . get ( interpreter ) . stderr ( error ) ;
73
- }
53
+ runEvent : async ( ) => {
54
+ // TODO: to be implemented
55
+ throw new SyntaxError ( 'runEvent are not implemented' ) ;
74
56
} ,
75
57
transform : ( _ , value ) => value ,
76
- writeFile : (
77
- {
78
- cmodule : {
79
- module : { FS } ,
80
- } ,
81
- } ,
82
- path ,
83
- buffer ,
84
- ) => writeFileShim ( FS , path , buffer ) ,
58
+ writeFile : ( ) => {
59
+ // TODO: to be implemented
60
+ throw new SyntaxError ( 'writeFile is not implemented' ) ;
61
+ } ,
85
62
} ;
86
63
/* c8 ignore stop */
0 commit comments