js_script 0.1.2 copy "js_script: ^0.1.2" to clipboard
js_script: ^0.1.2 copied to clipboard

Run JS script.

js_script #

Run JS script.

Usage #

// Create a JS context.
JsScript script = JsScript();
// Define a class.
var classInfo = ClassInfo<TestClass>(
    newInstance: (_) => TestClass(),
    fields: {
        "field": JsField.ins(
            get: (obj) => obj.field,
            set: (obj, val) => obj.field=val,
        ),
    },
    functions: {
        "method": JsFunction.ins((obj, argv) => obj.method()),
        "wait": JsFunction.ins((obj, argv) => obj.wait(argv[0])),
    }
);
// Send the class info to JS context.
script.addClass(classInfo);

// Have some test.
script.eval("var obj = new TestClass()");
test("[JS] obj.field == 1", script.eval("obj.field") == 1);
test("[JS] obj.method() == 3", script.eval("obj.method()") == 3);

JsValue jsValue = script.eval("obj");
script.eval("obj.field = 3;");
test("[Dart] obj.field == 3", jsValue.dartObject.field == 3);
test("[Dart] obj.method() == 9", jsValue.dartObject.method() == 9);

{
    // Send a dart object to JS context.
    TestClass obj2 = TestClass();
    obj2.field = 4;
    JsValue jsValue = script.bind(obj2, classInfo: classInfo);
    test("[JS] obj2.field == 4", jsValue["field"] == 4);
}

{
    // Send a dart function to JS context.
    JsValue func = script.function((argv) => "hello" + argv[0]);
    test("[JS] call function", func.call(["world"]) == "helloworld");
}

{
    // Using the Future as Promise in JS.
    // And using the Promise as a Future.
    JsValue jsPromise = script.eval("""
    new Promise(async function(resolve, reject) {
        await obj.wait(3);
        resolve("over");
    });
    """);
    jsPromise.retain();
    var time = DateTime.now();
    var res = await jsPromise.asFuture;
    jsPromise.release();
    test("[JS] wait for ${DateTime.now().difference(time).inMilliseconds}ms", res == "over");
}

FileSystem #

JsScript script = JsScript(
    fileSystems: [
        // Add a asar file.
        AsarFileSystem(await data),
        // Add memory files.
        MemoryFileSystem({
            "/test.js": """
            const md5 = require('md5');
            module.exports = md5('hello');
            """
        })
    ]
);
var ret = script.run("test.js");

For supporting npm pack, you can import it via a asar file.

Auto convert #

Any dart object could be auto convert to JS object.

JsValue func = script.eval("""
(function (func, map) {
    return func(map["test"])
})
""");
test("[JS] test auto convert ", func.call([(content) {
    return content;
}, {"test": 26}]) == 26);
3
likes
70
points
136
downloads

Publisher

unverified uploader

Weekly Downloads

Run JS script.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

ffi, flutter, path

More

Packages that depend on js_script