js_mimicry 2.0.0+2

  • README.md
  • CHANGELOG.md
  • Installing
  • Versions
  • 70

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

2.0.0

  • Dart 2.0

1.0.1

  • Dart 1.24, strong mode workaround

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.

Use this package as a library

1. Depend on it

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


dependencies:
  js_mimicry: ^2.0.0+2

2. Install it

You can install packages from the command line:

with pub:


$ pub get

with Flutter:


$ flutter packages get

Alternatively, your editor might support pub get or flutter packages 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';
  
Version Uploaded Documentation Archive
2.0.0+2 Oct 17, 2018 Go to the documentation of js_mimicry 2.0.0+2 Download js_mimicry 2.0.0+2 archive
2.0.0+1 Sep 24, 2018 Go to the documentation of js_mimicry 2.0.0+1 Download js_mimicry 2.0.0+1 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

All 19 versions...

Popularity:
Describes how popular the package is relative to other packages. [more]
46
Health:
Code health derived from static analysis. [more]
96
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
90
Overall:
Weighted score of the above. [more]
70
Learn more about scoring.

We analyzed this package on Oct 17, 2018, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.0.0
  • pana: 0.12.4

Platforms

Detected platforms: Flutter, other

Platform components identified in package: build, io, isolate.

Health suggestions

Fix lib/src/generator_js_mimicry.dart. (-1.49 points)

Analysis of lib/src/generator_js_mimicry.dart reported 3 hints:

line 141 col 50: 'element' is deprecated and shouldn't be used.

line 142 col 93: 'element' is deprecated and shouldn't be used.

line 146 col 97: 'element' is deprecated and shouldn't be used.

Fix lib/generator.dart. (-1 points)

Analysis of lib/generator.dart reported 2 hints:

line 5 col 1: 'analyzer.src.generated.ast' is deprecated and shouldn't be used.

line 6 col 1: 'analyzer.src.generated.element' is deprecated and shouldn't be used.

Fix lib/src/dart_class_info.dart. (-1 points)

Analysis of lib/src/dart_class_info.dart reported 2 hints:

line 74 col 48: 'element' is deprecated and shouldn't be used.

line 78 col 59: 'element' is deprecated and shouldn't be used.

Fix additional 8 files with analysis or formatting issues. (-0.50 points)

Additional issues in the following files:

  • lib/src/dart_method_info.dart (1 hint)
  • lib/annotation.dart (Run dartfmt to format lib/annotation.dart.)
  • lib/src/dart_class_visitor.dart (Run dartfmt to format lib/src/dart_class_visitor.dart.)
  • lib/src/dart_method_mutator.dart (Run dartfmt to format lib/src/dart_method_mutator.dart.)
  • lib/src/dart_property_info.dart (Run dartfmt to format lib/src/dart_property_info.dart.)
  • lib/src/metadata.dart (Run dartfmt to format lib/src/metadata.dart.)
  • lib/src/mimicry_resolver.dart (Run dartfmt to format lib/src/mimicry_resolver.dart.)
  • lib/src/type_provider_helper.dart (Run dartfmt to format lib/src/type_provider_helper.dart.)

Maintenance suggestions

Maintain an example. (-10 points)

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 >=2.0.0 <3.0.0
build ^1.0.0 1.0.1
build_resolvers ^0.2.1 0.2.2+6
build_runner ^1.0.0 1.0.0
build_test >=0.10.0 <2.0.0 0.10.3+3
path >=1.3.5 <2.0.0 1.6.2
Transitive dependencies
analyzer 0.33.0
args 1.5.0
async 2.0.8
boolean_selector 1.0.4
build_config 0.3.1+3
build_runner_core 1.0.1
built_collection 4.0.0
built_value 6.1.4
charcode 1.1.2
code_builder 3.1.3
collection 1.14.11
convert 2.0.2
crypto 2.0.6
csslib 0.14.6
dart_style 1.2.0
fixnum 0.10.8
front_end 0.1.6
glob 1.1.7
graphs 0.1.2+1
html 0.13.3+3
http 0.12.0
http_multi_server 2.0.5
http_parser 3.1.3
io 0.3.3
js 0.6.1+1
json_annotation 1.2.0
json_rpc_2 2.0.9
kernel 0.3.6
logging 0.11.3+2
matcher 0.12.3+1 0.12.4
meta 1.1.6
mime 0.9.6+2
multi_server_socket 1.0.2
node_preamble 1.4.4
package_config 1.0.5
package_resolver 1.0.6
pedantic 1.2.0
plugin 0.2.0+3
pool 1.3.6
pub_semver 1.4.2
pubspec_parse 0.1.2+2
quiver 2.0.0+1
shelf 0.7.3+3
shelf_packages_handler 1.0.4
shelf_static 0.2.8
shelf_web_socket 0.2.2+4
source_map_stack_trace 1.1.5
source_maps 0.10.8
source_span 1.4.1
stack_trace 1.9.3
stream_channel 1.6.8
stream_transform 0.0.14+1
string_scanner 1.0.4
term_glyph 1.0.1
timing 0.1.1
typed_data 1.1.6
utf 0.9.0+5
vm_service_client 0.2.6
watcher 0.9.7+10
web_socket_channel 1.0.9
yaml 2.1.15
Dev dependencies
test 1.3.0 1.3.4