@@ -3,84 +3,61 @@ import { fetchFiles, fetchPaths, io, stdio, writeFileShim } from './_utils.js';
33
44const type = 'php-wasm' ;
55
6+ // TODO: almost nothing is implemented
7+
68// REQUIRES INTEGRATION TEST
79/* c8 ignore start */
810export default {
911 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 ) {
1714 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);
3930 return interpreter ;
4031 } ,
4132 // Fallback to globally defined module fields
42- registerJSModule : ( interpreter , name , value ) => {
43- // interpreter.global.set(name, value);
33+ registerJSModule : ( ) => {
34+ // TODO: to be implemented
4435 } ,
4536 run : ( interpreter , code , ...args ) => {
37+ // TODO: this is always async
4638 try {
47- // return interpreter.run(dedent(code), ...args);
39+ return interpreter . run ( `<?php ${ dedent ( code ) } ?>` , ...args ) ;
4840 }
4941 catch ( error ) {
5042 io . get ( interpreter ) . stderr ( error ) ;
5143 }
5244 } ,
5345 runAsync : async ( interpreter , code , ...args ) => {
5446 try {
55- return await interpreter . run ( dedent ( code ) , ...args ) ;
47+ return await interpreter . run ( `<?php ${ dedent ( code ) } ?>` , ...args ) ;
5648 }
5749 catch ( error ) {
5850 io . get ( interpreter ) . stderr ( error ) ;
5951 }
6052 } ,
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' ) ;
7456 } ,
7557 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+ } ,
8562} ;
8663/* c8 ignore stop */
0 commit comments