add quickjs eval engine for macros

This commit is contained in:
Stewart Allen 2025-12-24 14:15:47 -05:00
commit 209f5cae9c
9 changed files with 404 additions and 10 deletions

View file

@ -0,0 +1,28 @@
import * as QuickJSModule from "../node_modules/quickjs-emscripten/dist/index.js";
// Re-export all the named exports
export const getQuickJS = QuickJSModule.getQuickJS;
export const getQuickJSSync = QuickJSModule.getQuickJSSync;
export const newQuickJSWASMModule = QuickJSModule.newQuickJSWASMModule;
export const newQuickJSAsyncWASMModule = QuickJSModule.newQuickJSAsyncWASMModule;
export const newAsyncRuntime = QuickJSModule.newAsyncRuntime;
export const newAsyncContext = QuickJSModule.newAsyncContext;
export const DEBUG_SYNC = QuickJSModule.DEBUG_SYNC;
export const DEBUG_ASYNC = QuickJSModule.DEBUG_ASYNC;
export const RELEASE_SYNC = QuickJSModule.RELEASE_SYNC;
export const RELEASE_ASYNC = QuickJSModule.RELEASE_ASYNC;
export const errors = QuickJSModule.errors;
export const memoizePromiseFactory = QuickJSModule.memoizePromiseFactory;
export const Lifetime = QuickJSModule.Lifetime;
export const Scope = QuickJSModule.Scope;
export const WeakLifetime = QuickJSModule.WeakLifetime;
export const StaticLifetime = QuickJSModule.StaticLifetime;
export const TestQuickJSWASMModule = QuickJSModule.TestQuickJSWASMModule;
export const isFail = QuickJSModule.isFail;
export const isSuccess = QuickJSModule.isSuccess;
export const assertSync = QuickJSModule.assertSync;
export const DeferredPromise = QuickJSModule.DeferredPromise;
export const shouldInterruptAfterDeadline = QuickJSModule.shouldInterruptAfterDeadline;
// Default export
export default QuickJSModule;

View file

@ -0,0 +1,50 @@
const path = require('path');
const webpack = require('webpack');
module.exports = {
mode: 'production',
entry: path.resolve(__dirname, './webpack-quickjs-bundle.js'),
output: {
path: path.resolve(__dirname, '../src/ext'),
filename: 'quickjs.js',
library: {
type: 'module'
},
module: true
},
experiments: {
outputModule: true
},
resolve: {
extensions: ['.mjs', '.js'],
fallback: {
'path': false,
'fs': false,
'crypto': false
}
},
plugins: [
new webpack.DefinePlugin({
'process.env.QTS_DEBUG': JSON.stringify(false),
'process.env.NODE_ENV': JSON.stringify('production')
})
],
module: {
rules: [
{
test: /\.m?js$/,
resolve: {
fullySpecified: false,
},
},
],
},
optimization: {
minimize: false
},
performance: {
hints: false,
maxAssetSize: 2 * 1024 * 1024,
maxEntrypointSize: 2 * 1024 * 1024,
},
};