js_mimicry 1.0.0

  • README.md
  • CHANGELOG.md
  • Installing
  • Versions
  • 54

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

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

  • Dart: 2.0.0-dev.49.0
  • pana: 0.10.6

Scores

Popularity:
Describes how popular the package is relative to other packages. [more]
30 / 100
Health:
Code health derived from static analysis. [more]
83 / 100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
72 / 100
Overall score:
Weighted score of the above. [more]
54
Learn more about scoring.

Platforms

Detected platforms: unsure

Error(s) prevent platform classification:

Error(s) in lib/test/test_lib1.dart: The literal '"GenericClass1_field1"' with type 'String' isn't of expected type 'T'.

Suggestions

  • Fix platform conflicts.

    Error(s) prevent platform classification:

    Error(s) in lib/test/test_lib1.dart: The literal '"GenericClass1_field1"' with type 'String' isn't of expected type 'T'.

  • Fix analysis and formatting issues.

    Analysis or formatting checks reported 6 errors 34 hints.

    Make sure that the imported libraries are not in conflict. Error(s) in lib/test/test_lib1.dart: The literal '"GenericClass1_field1"' with type 'String' isn't of expected type 'T'.

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

    line: 45 col: 59
    The getter 'id' isn't defined for the class 'AssetId'.

    Similar analysis of the following files failed:

    • lib/src/dart_class_info.dart (error)
    • lib/src/dart_class_visitor.dart (error)
    • lib/annotation.dart (hint)
    • lib/generator.dart (hint)
    • lib/resolver_transformer.dart (hint)
    • lib/src/dart_method_info.dart (hint)
    • lib/src/dart_property_info.dart (hint)
    • lib/src/generator_js_mimicry.dart (hint)
    • lib/src/metadata.dart (hint)
    • lib/test/test1.dart (hint)
    • lib/test/test11.dart (hint)
    • lib/test/test2.dart (hint)
    • lib/test/test22.dart (hint)
    • lib/test/test3.dart (hint)
    • lib/test/test4.dart (hint)
    • lib/test/test5.dart (hint)
    • lib/test/test_mimicry1.dart (hint)
    • lib/transformer.dart (hint)
  • 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.1
args 1.4.2
async 2.0.6
charcode 1.1.1
cli_util 0.1.2+1
collection 1.14.9
convert 2.0.1
crypto 2.0.2+1
csslib 0.14.1
front_end 0.1.0-alpha.9 0.1.0-alpha.11
glob 1.1.5
html 0.13.3
isolate 1.1.0 2.0.0
kernel 0.3.0-alpha.9 0.3.0-alpha.11
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+15
browser any
test >=0.12.0 <0.13.0