Skip to content

Commit 3ef41ed

Browse files
committed
WIP: php-wasm
1 parent 702d6d4 commit 3ef41ed

File tree

2 files changed

+33
-55
lines changed

2 files changed

+33
-55
lines changed

esm/interpreter/php-wasm.js

Lines changed: 31 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,84 +3,61 @@ import { fetchFiles, fetchPaths, io, stdio, writeFileShim } from './_utils.js';
33

44
const type = 'php-wasm';
55

6+
// TODO: almost nothing is implemented
7+
68
// REQUIRES INTEGRATION TEST
79
/* c8 ignore start */
810
export 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 */

test/php-wasm.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
</head>
1010
<body>
1111
<script type="php-wasm">
12-
echo 'Hello PHP'
12+
echo 'Hello PHP';
13+
vrzno_run('alert', ['Hello, World!']);
1314
</script>
1415
</body>
1516
</html>

0 commit comments

Comments
 (0)