js_mimicry 1.0.0

  • README.md
  • CHANGELOG.md
  • Installing
  • Versions
  • 67

JsMimicry

Allows the use of Dart classes and objects in javascript. Generates a special proxy classes.

Create javascript API for Dart become easier.

Support:

  • Class inheritance ( with @JsProxy )
  • Named constructors
  • Method
  • Optional positional parameters
  • Optional named parameters
  • Input parameter transform
  • Result mutation
  • Future (via result mutator)
  • Field
  • Getter/Setter

Not support:

  • Factory
  • Operator

Try It Now

Add the js_mimicry package to your pubspec.yaml file:

dependencies:
  js_mimicry: ">=0.2.0 <0.3.0"

Building and Deploying

To build a deployable version of your app, add the js_mimicry transformers to your pubspec.yaml file:

transformers:
- js_mimicry

Sample

##Dart code

    class Test1{
      method1(p1,[p2]){/* code */}
      method2(p1,p2){/* code */}
    }
    
    class Test2 extends Test1{
      int method2(p1,p2){/* new logic */}
      String method3(Test1 obj){/* code */}
      Future<int> method4(){/* code */}
      Test1 method5({namedP1, namedP2}){/* code */}
      String method6(int value){/* code */}
    }

##Add annotation for class

    @JsProxy()
    class Test1{  // ... cut ...
    }

    @JsProxy()
    class Test2 extends Test1{ // ... cut ...
    }

##Add annotation for transform input parameter

    String method6(@JsTransform(ANY_TO_INT) int value){/* code */}

    static int ANY_TO_INT(Object v){
        if (v is String){
         return int.parse(v);
        }
        return v as int;
    }

##Add annotation for mutation result Future

    @JsMutator(insertParams:const ["resultCb","errorCb"],result:Test2.futureToCallbacks)
    Future<int> method4(){/* code */}
    
    static futureToCallbacks(Future result,js.JsFunction resultCb,[js.JsFunction errorCb]){
        if (errorCb!=null){
            result = result.catchError((err)=>errorCb.apply([err]));
        }
        result.then((o)=>resultCb.apply([o]));
        return result;
    }

##Add annotation for mutation result

    @JsMutator(result:ANY_TO_STRING)
    Test1 method5(){/* code */}

    static ANY_TO_STRING(v)=>v.toString();

Import to javascript

    import 'dart:js' as js;
    import 'package:js_mimicry/annotation.dart';
    main(){
      // Create instance Test1
      js.context["dartInstanceTest1"] = JsProxyFactory.toJs(new Test1());
    }

Uses in javascript

    // Create Test2 instance, call method5 with named parameters
    new Test2().method5({namedP1:"123"});
    // call Test1.method1 with optional parameters
    dartInstanceTest1.method1("1");

JsProxyFactory methods

###JsObject toJs(DartClass obj) Create proxy object for Test2 object. ###DartClass toDart(Type dartType, JsObject obj) Convert javascript proxy to real Dart object.

Changelog

1.0.0

  • upgrade code_transformers: ^0.5.0

0.2.3

  • disable js_mimicry transformer

0.2.2

  • useSharedSources mode enabled in the resolver
  • fix analyzer: '>=0.23.0 <0.26.1+15'

0.2.1+3

  • reduced memory consumption

0.2.1+2

  • upgrade analyzer: '>=0.23.0 <0.27.0'

0.2.1+1

  • Fix: JsTransform for optional and named param

0.2.1

  • Support JsIgnore

0.2.0+4

  • Support abstract class

0.2.0+3

  • Added tests
  • Fix: source shift
  • Fix: skip not jsProxy parent

0.2.0

  • Initial transformer release.

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  js_mimicry: "^1.0.0"

2. Install it

You can install packages from the command line:

with pub:


$ pub get

Alternatively, your editor might support pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:js_mimicry/annotation.dart';

import 'package:js_mimicry/generator.dart';

import 'package:js_mimicry/instance_transformer.dart';

import 'package:js_mimicry/resolver_transformer.dart';

import 'package:js_mimicry/transformer.dart';
        
Version Uploaded Documentation Archive
1.0.0 Mar 31, 2017 Go to the documentation of js_mimicry 1.0.0 Download js_mimicry 1.0.0 archive
0.2.2 Apr 1, 2016 Go to the documentation of js_mimicry 0.2.2 Download js_mimicry 0.2.2 archive
0.2.1+4 Nov 30, 2015 Go to the documentation of js_mimicry 0.2.1+4 Download js_mimicry 0.2.1+4 archive
0.2.1+3 Nov 27, 2015 Go to the documentation of js_mimicry 0.2.1+3 Download js_mimicry 0.2.1+3 archive
0.2.1+2 Nov 23, 2015 Go to the documentation of js_mimicry 0.2.1+2 Download js_mimicry 0.2.1+2 archive
0.2.1+1 Jun 29, 2015 Go to the documentation of js_mimicry 0.2.1+1 Download js_mimicry 0.2.1+1 archive
0.2.1 Jun 25, 2015 Go to the documentation of js_mimicry 0.2.1 Download js_mimicry 0.2.1 archive
0.2.0+4 Jun 21, 2015 Go to the documentation of js_mimicry 0.2.0+4 Download js_mimicry 0.2.0+4 archive
0.2.0+3 Jun 21, 2015 Go to the documentation of js_mimicry 0.2.0+3 Download js_mimicry 0.2.0+3 archive
0.2.0+2 Jun 16, 2015 Go to the documentation of js_mimicry 0.2.0+2 Download js_mimicry 0.2.0+2 archive

All 17 versions...

Analysis

This feature is new.
We welcome feedback.
More details: scoring.

We analyzed this package, and provided a score, details, and suggestions below.

  • tool failures on Feb 16, 2018
  • Dart: 2.0.0-dev.20.0
  • pana: 0.10.1

Scores

Popularity:
Describes how popular the package is relative to other packages. [more]
57 / 100
Health:
Code health derived from static analysis. [more]
84 / 100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
68 / 100
Overall score:
Weighted score of the above. [more]
67

Platforms

Detected platforms: unsure

Error(s) prevent platform classification.

Suggestions

  • Fix lib/src/dart_class_visitor.dart.

    Strong-mode analysis of lib/src/dart_class_visitor.dart failed with the following error:

    line: 19 col: 33
    The getter 'value' isn't defined for the class 'Expression'.

  • Fix lib/src/dart_class_info.dart.

    Strong-mode analysis of lib/src/dart_class_info.dart failed with the following error:

    line: 61 col: 42
    The getter 'value' isn't defined for the class 'Expression'.

  • Fix further 2 Dart files.

    Similar analysis of the following files failed:

    • lib/test/test_lib1.dart
    • lib/instance_transformer.dart
  • Fix platform conflicts.

    Make sure none of the libraries use mutually exclusive dependendencies.

  • Fix issues reported by dartanalyzer.

    dartanalyzer reported 3 error(s) and 0 warning(s).

  • Maintain an example.

    Create a short demo in the example/ directory to show how to use this package. Common file name patterns include: main.dart, example.dart or you could also use js_mimicry.dart.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=1.14.0
code_transformers ^0.5.0 0.5.1+4
path >=1.3.5 <2.0.0 1.5.1
Transitive dependencies
analyzer 0.31.1 0.31.2-alpha.0
args 1.3.0
async 2.0.3 2.0.4
charcode 1.1.1
cli_util 0.1.2+1
collection 1.14.5
convert 2.0.1
crypto 2.0.2+1
csslib 0.14.1
front_end 0.1.0-alpha.9 0.1.0-alpha.10
glob 1.1.5
html 0.13.2+2
isolate 1.1.0
kernel 0.3.0-alpha.9 0.3.0-alpha.10
logging 0.11.3+1
meta 1.1.2
package_config 1.0.3
plugin 0.2.0+2
pool 1.3.4
source_maps 0.10.4
source_span 1.4.0
stack_trace 1.9.2
string_scanner 1.0.2
typed_data 1.1.5
utf 0.9.0+4
watcher 0.9.7+7
yaml 2.1.13
Dev dependencies
barback any 0.15.2+14
browser any
test >=0.12.0 <0.13.0