Skip to content

Instantly share code, notes, and snippets.

@Loopshape
Created March 26, 2024 15:25
Show Gist options
  • Save Loopshape/4ba8e3eeb1c50ddfac0211c664cb3715 to your computer and use it in GitHub Desktop.
Save Loopshape/4ba8e3eeb1c50ddfac0211c664cb3715 to your computer and use it in GitHub Desktop.

Revisions

  1. Loopshape created this gist Mar 26, 2024.
    129 changes: 129 additions & 0 deletions polywrapper.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,129 @@
    // 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();