Search code examples
node.jsdartdart-polymer

custom_element_apigen: gives an error importing paper-datatable to Dart


I following the steps, accord to https://github.com/dart-lang/custom-element-apigen:

  1. node/npm (v3.5.3) installed
  2. bower (v1.7.2) installed
  3. hydrolysis (v1.21.4) installed
  4. .bowerrc created with following content

{ "directory": "lib/src" }

  1. bower install --save paper-datatable (https://github.com/David-Mulder/paper-datatable) executed

  2. apigen.yaml created with following content

files_to_generate: - paper-datatable\paper-datatable.html

  1. custom_element_apigen library add on pubspec.yaml

dependencies: custom_element_apigen: ^0.2.1+1

  1. pub run custom_element_apigen:update apigen.yaml command executed.

ERROR IN THIS COMMAND

First error: On Windows did not work. Details on https://github.com/dart-lang/custom-element-apigen/issues/43.

As a workaround I create process_elements.bat (instead process_elements.sh) with following content:

node packages\custom_element_apigen\src\js\analyze.js %1

I edit generate_dart_api.dart and changed the call .bat instead .sh to:

'D:/Users/Administrador/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/custom_element_apigen-0.2.1+1/lib/src/js/process_elements.bat', [inputPath]);

Then, I got a workarround!

Second error, I did not resolve!

Now, occur the following problem when the command c:\dart-sdk\bin\pub run custom_element_apigen:update apigen.yaml is executed:

D:\Users\Administrador\WebstormProjects\Facilis>c:\dart-sdk\bin\pub run custom_e
lement_apigen:update apigen.yaml
←[32m1 of 1: lib\src\paper-datatable\paper-datatable.html←[0mUnhandled exception
:
Failed to parse element files!

exit code: 0
stderr:
stdout:
D:\Users\Administrador\WebstormProjects\Facilis>node packages\custom_element_api
gen\src\js\analyze.js lib\src\paper-datatable\paper-datatable.html
{"imports":["lib/src/polymer/polymer.html","lib/src/paper-datatable/paper-datata
ble-column.html","lib/src/paper-datatable/paper-datatable-edit-dialog.html","lib
/src/paper-datatable/datatable-icons.html","lib/src/paper-checkbox/paper-checkbo
x.html","lib/src/paper-tooltip/paper-tooltip.html"],"elements":{"PaperDatatable"
:{"name":"paper-datatable","properties":{"data":{"hasGetter":true,"hasSetter":tr
ue,"name":"data","type":"Array","description":"\nArray of objects containing the
 data to be shown in the table.\n\n"},"multiSelection":{"hasGetter":true,"hasSet
ter":true,"name":"multiSelection","type":"Boolean","description":"\nWhether to a
llow selection of more than one row.\n\n"},"progress":{"hasGetter":true,"hasSett
er":true,"name":"progress","type":"Boolean","description":"\nWhether to show the
 progress bar. As the progress bar is often not used in standalone\n`<paper-data
table>'s the `<paper-progress>` element isn't included by default and needs to b
e\nmanually imported.\n\n"},"resizeBehavior":{"hasGetter":true,"hasSetter":true,
"name":"resizeBehavior","type":"String","description":"\nOverflow, fixed or 'dyn
amic-columns'\n\n"},"selectable":{"hasGetter":true,"hasSetter":true,"name":"sele
ctable","type":"Boolean","description":"\nWhether to show checkboxes on the left
 to allow row selection.\n\n"},"selectedItem":{"hasGetter":true,"hasSetter":true
,"name":"selectedItem","type":"Object","description":"\nIf `multi-selection` is
off then this contains the selected row.\n\n"},"selectedItems":{"hasGetter":true
,"hasSetter":true,"name":"selectedItems","type":"Array","description":"\nIf `mul
ti-selection` is on then this contains an array of the selected rows.\n\n"},"sel
ectedKey":{"hasGetter":true,"hasSetter":true,"name":"selectedKey","type":"Object
","description":"\nIf `multi-selection` is off then this contains the key of the
 selected row.\n\n"},"selectedKeys":{"hasGetter":true,"hasSetter":true,"name":"s
electedKeys","type":"Array","description":"\nIf `multi-selection` then this cont
ains an array of selected row keys.\n\n"},"listeners":{"hasGetter":true,"hasSett
er":true,"name":"listeners","type":"Object","description":""},"observers":{"hasG
etter":true,"hasSetter":true,"name":"observers","type":"Array","description":""}
},"methods":{"customRowStyle":{"name":"customRowStyle","type":null,"description"
:"\nMethod that can be overwritten to apply a custom style to specific rows.\n\n
IMPORTANT: This is a property, not a method you should call directly.\n\t\t\t\t
","isVoid":true,"args":[{"name":"rowItem","description":""}]},"deselect":{"name"
:"deselect","type":null,"description":"\nDeselect the specified item. Ignore the
 `notify` parameter.\n\n","isVoid":true,"args":[{"name":"item","description":""}
,{"name":"notify","description":""}]},"deselectAll":{"name":"deselectAll","type"
:null,"description":"\nDeselect all currently selected items. Ignore the `notify
` parameter.\n\t\t\t\t ","isVoid":true,"args":[{"name":"notify","description":""
}]},"filter":{"name":"filter","type":null,"description":"\nThe filter attribute
can be used to specify a filter which will be applied to the `data`.\nNote that
selections should fully ignore filtering, and a filter only affects which data i
s\nvisible.\n\nThe function takes three arguments: `item`, `key` and `items` per
 the JS filter function.\n\nFor a demo please see [here](demo/filter.html).\n\nI
MPORTANT: This is a property, not a method you should call directly.\n\n","isVoi
d":true,"args":[]},"reload":{"name":"reload","type":null,"description":"\nIf you
 have been changing data on the `data` property outside of the official Polymer
functions\ncalling this function *may* get you the updates you want.\n\t\t\t\t "
,"isVoid":true,"args":[]},"reset":{"name":"reset","type":null,"description":"\nH
ardcore reset of the entire element. Sets `data` to `[]` and resets all cells.\n
\t\t\t\t ","isVoid":true,"args":[]},"select":{"name":"select","type":null,"descr
iption":"\nSelect the specified item. Ignore the `notify` parameter.\n\n","isVoi
d":true,"args":[{"name":"item","description":""},{"name":"notify","description":
""}]},"sort":{"name":"sort","type":null,"description":"\nSort the specified colu
mn, where `column` is a reference to the actual `<paper-datatable-column>`\nelem
ent.\n\t\t\t\t ","isVoid":true,"args":[{"name":"column","description":""}]},"tog
gleAll":{"name":"toggleAll","type":null,"description":"\nTriggered by clicking t
he top left checkmark. If all are checked it will deselect all checked items.\nI
f some or none are checked it will select all items\n\t\t\t\t ","isVoid":true,"a
rgs":[]},"ready":{"name":"ready","type":null,"description":"","isVoid":true,"arg
s":[]}},"description":"\n# Paper Datatable\n\nA [material design implementation
of a data table](https://www.google.com/design/spec/components/data-tables.html)
.\n\n","behaviors":["Polymer.IronResizableBehavior"]}},"behaviors":{},"path":"li
b\\src\\paper-datatable\\paper-datatable.html"}


#0      _parseError (package:custom_element_apigen/generate_dart_api.dart:202:3)

#1      _parseFile.<_parseFile_async_body> (package:custom_element_apigen/genera
te_dart_api.dart:160:5)
#2      _RootZone.runUnary (dart:async/zone.dart:1149)
#3      _Future._propagateToListeners.handleValueCallback (dart:async/future_imp
l.dart:502)
#4      _Future._propagateToListeners (dart:async/future_impl.dart:585)
#5      _Future._completeWithValue (dart:async/future_impl.dart:376)
#6      Future.wait.<anonymous closure> (dart:async/future.dart:299)
#7      _RootZone.runUnary (dart:async/zone.dart:1149)
#8      _Future._propagateToListeners.handleValueCallback (dart:async/future_imp
l.dart:502)
#9      _Future._propagateToListeners (dart:async/future_impl.dart:585)
#10     _Future._completeWithValue (dart:async/future_impl.dart:376)
#11     _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:
430)
#12     _microtaskLoop (dart:async/schedule_microtask.dart:43)
#13     _microtaskLoopEntry (dart:async/schedule_microtask.dart:52)
#14     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:96)
#15     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dar
t:151)

Am I doing something wrong? or Is this a bug?

Thanks!


Solution

  • This is a bug, the package is untested on windows as it has primarily just been used by the polymer dart team.

    It looks in general like the the fix just needs to be loading the .bat file as you already did and then also adjusting the paths to use the correct directory separator.

    See https://github.com/dart-lang/custom-element-apigen/issues/43.