Giter Club home page Giter Club logo

define-function's Introduction

About

quick.js based sandbox

npm install define-function

works in any WebAssembly environment

  • node
  • browser
  • wechat miniprogram

Usage

define a function dynamically with javascript source code

const def = require('define-function')
const f = await def(`
    return 'hello';
`)
f() // 'hello'

function can have argument

const def = require('define-function')
const f = await def(`
    const [hello, world] = arguments;
    return hello + ' ' + world;
`)
f('hello', 'world') // 'hello world'

argument can be function

const def = require('define-function')
const f = await def(`
    const [print] = arguments;
    print('hello')
`)
f((msg) => {
    console.log(msg)
}) // 'hello'

argument can be async function

const def = require('define-function')
const f = await def(`
    const [print, sleep] = arguments;
    (async() => {
        print('hello')
        await sleep(1000);
        print('world')
    })();
`)
f(
    msg => console.log(msg),
    milliseconds => new Promise(resolve => setTimeout(resolve, milliseconds))
) 
// hello
// world

can return promise back to host

const def = require('define-function')
const f = await def(`
    const [print, sleep] = arguments;
    return (async() => {
        print('hello')
        await sleep(1000);
        print('world')
    })();
`)
await f(
    msg => console.log(msg),
    milliseconds => new Promise(resolve => setTimeout(resolve, milliseconds))
)
console.log('done')
// hello
// world
// done

share context between multiple invocations

const { context } = require('define-function')
const ctx = await context()
const f = await ctx.def(`
    global.counter = (global.counter || 0)+1;
    return counter; // counter can be referenced globally
`)
f() // 1
f() // 2
f() // 3
ctx.dispose()

inject value and callbacks into global

const { context } = require('define-function')
const ctx = await context({ global: { 
    console,
    anwerOfEverything() {
        return 42;
    }
} }) // inject console and anwerOfEverything to global
const f = await ctx.def(`
    console.log(anwerOfEverything());
`)
f() // 42
ctx.dispose();

import and export es module

const { context } = require('define-function')
const ctx = await context({ 
    loadModuleContent(moduleName) {
        if (moduleName !== 'xxx') {
            throw new Error('expect xxx');
        }
        return `export function sayHello() { return 'hello' }`
    }
});
const { hello } = await ctx.load(`
    import { sayHello } from 'xxx';
    export const hello = sayHello();
`)
console.log(hello) // hello
ctx.dispose();

Limit

  • function argument does not support Set/Map/Class or anything that can not survive JSON.parse(JSON.stringify), except the argument is a function
  • function return value does not support Set/Map/Class or anything that can not survive JSON.parse(JSON.stringify), except promise object
  • JSON.stringify and JSON.parse takes time, so the arguments and return value should be as small as possible for best performance

Similar projects

define-function has a simpler API and support async/await

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.