Skip to content

Instantly share code, notes, and snippets.

@Loopshape
Created March 26, 2024 15:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Loopshape/4ba8e3eeb1c50ddfac0211c664cb3715 to your computer and use it in GitHub Desktop.
Save Loopshape/4ba8e3eeb1c50ddfac0211c664cb3715 to your computer and use it in GitHub Desktop.
Build a Javascript wrapper for JavaScript to React and from React to NextJS and from VueJS to NuxtJS and from Svelte to Sapper and from Ruby to Ruby on Rails and from PHP to Laravel and from Python to Django and from CSS to Tailwind CSS and build a onefiler NodeJS loader for that.
// Import necessary libraries
const React = require('react');
const ReactDOM = require('react-dom');
const Next = require('next');
const Nuxt = require('nuxt');
const Sapper = require('sapper');
const express = require('express');
const Rails = require('rails');
const Laravel = require('laravel');
const Django = require('django');
const TailwindCSS = require('tailwindcss');
// JavaScript to React wrapper
function jsToReact(component) {
return class extends React.Component {
render() {
return component();
}
};
}
// React to NextJS wrapper
async function reactToNext(reactComponent) {
const app = Next({ dev: process.env.NODE_ENV !== 'production' });
const handle = app.getRequestHandler();
await app.prepare();
const server = express();
server.get('*', (req, res) => {
return handle(req, res);
});
server.listen(3000, (err) => {
if (err) throw err;
console.log('> Ready on http://localhost:3000');
});
return app;
}
// VueJS to NuxtJS wrapper
async function vueToNuxt(vueApp) {
const config = {
dev: process.env.NODE_ENV !== 'production',
};
const nuxt = new Nuxt(config);
const app = express();
if (config.dev) {
const builder = new Builder(nuxt);
await builder.build();
}
app.use(nuxt.render);
app.listen(3000, () => {
console.log('Server listening on http://localhost:3000');
});
return nuxt;
}
// Svelte to Sapper wrapper
function svelteToSapper(svelteApp) {
const { build } = Sapper.export(svelteApp);
const app = express();
app.use(build);
app.listen(3000, () => {
console.log('Server listening on http://localhost:3000');
});
return app;
}
// Ruby to Ruby on Rails wrapper
function rubyToRails(rubyApp) {
const app = new Rails();
app.start();
return app;
}
// PHP to Laravel wrapper
function phpToLaravel(phpApp) {
const app = new Laravel();
app.start();
return app;
}
// Python to Django wrapper
function pythonToDjango(pythonApp) {
const app = new Django();
app.start();
return app;
}
// CSS to Tailwind CSS wrapper
function cssToTailwind(css) {
return TailwindCSS(css);
}
// Example usage
async function main() {
const MyReactComponent = () => <div>Hello React!</div>;
const MyVueApp = {}; // Vue app object
const MySvelteApp = {}; // Svelte app object
const MyRubyApp = {}; // Ruby app object
const MyPHPApp = {}; // PHP app object
const MyPythonApp = {}; // Python app object
const MyCSS = ''; // CSS string
const ReactComponent = jsToReact(MyReactComponent);
const nextApp = await reactToNext(ReactComponent);
const nuxtApp = await vueToNuxt(MyVueApp);
const sapperApp = svelteToSapper(MySvelteApp);
const railsApp = rubyToRails(MyRubyApp);
const laravelApp = phpToLaravel(MyPHPApp);
const djangoApp = pythonToDjango(MyPythonApp);
const tailwindCSS = cssToTailwind(MyCSS);
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment