99 */
1010// Requires node >= 7.6
1111
12- import { Analyzer , Feature , Element , Package , FSUrlLoader , PackageUrlResolver , Property , ElementMixin , Method } from 'polymer-analyzer' ;
12+ import { Analyzer , Feature , Element , Analysis , FSUrlLoader , PackageUrlResolver , Property , ElementMixin , Method } from 'polymer-analyzer' ;
1313import { Function as ResolvedFunction } from 'polymer-analyzer/lib/javascript/function' ;
1414import { generate } from 'escodegen' ;
1515
@@ -24,16 +24,16 @@ const header = `declare namespace Polymer {
2424` ;
2525const footer = `}` ;
2626
27- export function generateDeclarations ( ) {
27+ export function generateDeclarations ( ) : Promise < string > {
2828 const analyzer = new Analyzer ( {
2929 urlLoader : new FSUrlLoader ( ) ,
3030 urlResolver : new PackageUrlResolver ( ) ,
3131 } ) ;
3232
33- analyzer . analyzePackage ( ) . then ( generatePackage ) ;
33+ return analyzer . analyzePackage ( ) . then ( generatePackage ) ;
3434}
3535
36- function generatePackage ( pkg : Package ) {
36+ function generatePackage ( pkg : Analysis ) : Promise < string > {
3737 const declarations = [ header ] ;
3838
3939 for ( const feature of pkg . getFeatures ( ) ) {
@@ -57,7 +57,7 @@ function generatePackage(pkg: Package) {
5757
5858 declarations . push ( footer ) ;
5959
60- process . stdout . write ( declarations . join ( '\n' ) ) ;
60+ return Promise . resolve ( declarations . join ( '\n' ) ) ;
6161}
6262
6363function genElementDeclaration ( element : Element , declarations : string [ ] , indent : number = 0 ) {
@@ -236,6 +236,7 @@ const typeMap = new Map([
236236 [ 'String' , 'string' ] ,
237237 [ 'Number' , 'number' ] ,
238238 [ 'Boolean' , 'boolean' ] ,
239+ [ '*' , 'any' ] ,
239240 [ 'Array' , 'any[]' ] ,
240241] ) ;
241242
@@ -247,7 +248,6 @@ interface TsType {
247248function getTsType ( type ?: string ) : TsType {
248249 let optional = false ;
249250
250- // default to 'any'
251251 type = type || 'any' ;
252252
253253 // handle Closure optionals
@@ -256,6 +256,11 @@ function getTsType(type?: string): TsType {
256256 type = type . substring ( 0 , type . length - 1 ) ;
257257 }
258258
259+ // handle Closure unknown type
260+ if ( type . startsWith ( '?' ) ) {
261+ type = type + '|null' ;
262+ }
263+
259264 // convert from Closure
260265 if ( typeMap . has ( type ) ) {
261266 type = typeMap . get ( type ) ! ;
0 commit comments