es-modular
v0.3.0
Published
A universal library for converting server-side functions into ES Modules.
Downloads
11
Readme
ES-Modular
A universal library for converting server-side functions into ES Modules.
server:
// https://au215ybu51.us.aircode.run/index
import {config, modular} from 'es-modular';
function add(x, y) {
return x + y;
}
function getUrl(context) {
const {url} = context;
return url;
}
export default modular({
add,
getUrl,
}, config.aircode);
client
import {add, getUrl} from 'https://au215ybu51.us.aircode.run/index';
console.log(await add(1, 2)); // => 3
console.log(await getUrl()); // => /index
Online example
Server: https://runkit.com/akira-cn/es-modular-with-koa
Client:
Features
🧸 Tiny and easy to use.
🌎 Works in any where, almost in all Node.js HTTP servers or cloud environments.
ES-Modular inherently supports the following environments through corresponding configurations:
🧩 Esay to extends.
You can extend ES-Modular to other environments such as Deno, Edge Runtime, or Ben by creating your own configurations.
Usage
- Work with Koa:
import Koa from "koa";
import { bodyParser } from "@koa/bodyparser";
import { modular, config } from "../src/index.js";
function add(x, y) {
return x + y;
}
function getHost($context) {
return $context.request.hostname;
}
const app = new Koa();
app.use(bodyParser());
// response
app.use(modular({ add, getHost }, config.koa));
app.listen(3000);
- Work with Express:
import express from "express";
import bodyParser from 'body-parser';
import { modular, config } from "../src/index.js";
const app = express();
app.use(bodyParser.json({
limit: '4.5mb',
type: '*/*',
}));
function add(x, y) {
return x + y;
}
function getHost($context) {
return $context.request.hostname;
}
function getMessage() {
return {hi: 'there'};
}
app.all('/', modular({ add, getHost, getMessage }, config.express));
app.listen(3000);
- Work with Fastify:
import Fastify from 'fastify';
import { modular, config } from "../src/index.js";
const fastify = Fastify({
logger: true
});
function add(x, y) {
return x + y;
}
function getHost($context) {
return $context.request.hostname;
}
function getMessage() {
return {hi: 'there'};
}
// Declare a route
fastify.all('/', modular({add, getHost, getMessage}, config.fastify));
// Run the server!
fastify.listen({ port: 3000 }, function (err, address) {
if (err) {
fastify.log.error(err);
process.exit(1);
}
// Server is now listening on ${address}
});
- Work with Nitro
import { modular, config } from "es-modular";
function add(x, y) {
return x + y;
}
async function echo(...args) {
const $context = args.pop();
return await readBody($context);
}
function getMessage() {
return {hi: 'there'};
}
export default eventHandler(
modular({add, echo, getMessage}, config.nitro)
);
- Work with Vercel api function:
import { modular, config } from "../../../src/index.js";
function add(x, y) {
return x + y;
}
function echo($context) {
return $context.request.body;
}
function getMessage() {
return {hi: 'there'};
}
export default modular({add, echo, getMessage}, config.vercel);
- Work with AirCode cloud function:
import {config, modular} from 'es-modular';
function add(x, y) {
return x + y;
}
function getUrl(context) {
const {url} = context;
return url;
}
export default modular({
add,
getUrl,
}, config.aircode);