408408 exports . default = generate ;
409409} ) ;
410410
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 = [ ] ;
424419}
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+ } ;
426431
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+ ` ) ;
439437
440438module . exports . default ( {
441439 project : path . resolve ( __dirname , ".." , "src" ) ,
442440 prefix : "assemblyscript" ,
443441 exclude : [
444442 "glue/js/index.ts" ,
445- "glue/js/node.d.ts"
443+ "glue/js/node.d.ts" ,
444+ "glue/binaryen.d.ts"
446445 ] ,
447446 verbose : true ,
448447 sendMessage : console . log ,
@@ -459,3 +458,38 @@ module.exports.default({
459458 sendMessage : console . log ,
460459 stdout : stdout
461460} ) ;
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