408
408
exports . default = generate ;
409
409
} ) ;
410
410
411
- const prelude = `declare type bool = boolean;
412
- declare type i8 = number;
413
- declare type i16 = number;
414
- declare type i32 = number;
415
- declare type isize = number;
416
- declare type u8 = number;
417
- declare type u16 = number;
418
- declare type u32 = number;
419
- declare type usize = number;
420
- declare type f32 = number;
421
- declare type f64 = number;
422
- declare module 'assemblyscript' {
423
- export * from 'assemblyscript/src/index';
411
+ const path = require ( "path" ) ;
412
+ const fs = require ( "fs" ) ;
413
+ const stream = require ( "stream" ) ;
414
+ const util = require ( "util" ) ;
415
+
416
+ function OutputStream ( options ) {
417
+ stream . Writable . call ( this , options ) ;
418
+ this . chunks = [ ] ;
424
419
}
425
- ` ;
420
+ util . inherits ( OutputStream , stream . Writable ) ;
421
+ OutputStream . prototype . _write = function ( chunk , enc , cb ) {
422
+ this . chunks . push ( chunk ) ;
423
+ cb ( ) ;
424
+ } ;
425
+ OutputStream . prototype . toBuffer = function ( ) {
426
+ return Buffer . concat ( this . chunks ) ;
427
+ } ;
428
+ OutputStream . prototype . toString = function ( ) {
429
+ return this . toBuffer ( ) . toString ( "utf8" ) ;
430
+ } ;
426
431
427
- var path = require ( "path" ) ;
428
- var fs = require ( "fs" ) ;
429
- var stdout = fs . createWriteStream ( path . resolve ( __dirname , ".." , "dist" , "assemblyscript.d.ts" ) ) ;
430
- stdout . write ( prelude ) ;
431
- stdout . write = ( function ( _write ) {
432
- return function ( ...args ) {
433
- if ( typeof args [ 0 ] === "string" ) {
434
- args [ 0 ] = args [ 0 ] . replace ( / \/ \/ \/ < r e f e r e n c e [ ^ > ] * > \r ? \n / g, "" ) ;
435
- }
436
- return _write . apply ( stdout , args ) ;
437
- } ;
438
- } ) ( stdout . write ) ;
432
+ const stdout = new OutputStream ( ) ;
433
+ stdout . write ( `declare module 'assemblyscript' {
434
+ export * from 'assemblyscript/src/index';
435
+ }
436
+ ` ) ;
439
437
440
438
module . exports . default ( {
441
439
project : path . resolve ( __dirname , ".." , "src" ) ,
442
440
prefix : "assemblyscript" ,
443
441
exclude : [
444
442
"glue/js/index.ts" ,
445
- "glue/js/node.d.ts"
443
+ "glue/js/node.d.ts" ,
444
+ "glue/binaryen.d.ts"
446
445
] ,
447
446
verbose : true ,
448
447
sendMessage : console . log ,
@@ -459,3 +458,38 @@ module.exports.default({
459
458
sendMessage : console . log ,
460
459
stdout : stdout
461
460
} ) ;
461
+
462
+ var source = stdout . toString ( ) . replace ( / \/ \/ \/ < r e f e r e n c e [ ^ > ] * > \r ? \n / g, "" ) ;
463
+
464
+ const ts = require ( "typescript" ) ;
465
+ const sourceFile = ts . createSourceFile ( "assemblyscript.d.ts" , source , ts . ScriptTarget . ESNext , false , ts . ScriptKind . TS ) ;
466
+
467
+ console . log ( "transforming:" ) ;
468
+ var numReplaced = 0 ;
469
+ const result = ts . transform ( sourceFile , [
470
+ function ( context ) {
471
+ const visit = node => {
472
+ node = ts . visitEachChild ( node , visit , context ) ;
473
+ if ( ts . isTypeNode ( node ) ) {
474
+ const name = node . getText ( sourceFile ) ;
475
+ switch ( name ) {
476
+ // this is wrong, but works
477
+ case "bool" : ++ numReplaced ; return ts . createIdentifier ( "boolean" ) ;
478
+ default : if ( ! / ^ (?: B i n a r y e n | R e l o o p e r ) / . test ( name ) ) break ;
479
+ case "i8" : case "i16" : case "i32" : case "isize" :
480
+ case "u8" : case "u16" : case "u32" : case "usize" :
481
+ case "f32" : case "f64" : ++ numReplaced ; return ts . createIdentifier ( "number" ) ;
482
+ }
483
+ }
484
+ return node ;
485
+ } ;
486
+ return node => ts . visitNode ( node , visit ) ;
487
+ }
488
+ ] ) ;
489
+ console . log ( " replaced " + numReplaced + " AS types with JS types" ) ;
490
+
491
+ fs . writeFileSync (
492
+ path . resolve ( __dirname , ".." , "dist" , "assemblyscript.d.ts" ) ,
493
+ ts . createPrinter ( ) . printFile ( result . transformed [ 0 ] ) ,
494
+ "utf8"
495
+ ) ;
0 commit comments