1.1.31 • Published 1 year ago

@johnbrandle/as3-js v1.1.31

Weekly downloads
3
License
SEE LICENSE IN NO...
Repository
github
Last release
1 year ago

as3-js

Build Status Dependency Status Known Vulnerabilities contributions welcome

as3-js is an ActionScript 3 to JavaScript compiler, with both browser and Node.js support.

  • IE11, Edge, Chrome, Firefox, Safari (iOS9+)
  • Node.js 10.15.3+

Supports:

  • Run-time compilation
  • SWC files
  • flash.* API
  • XML, XMLList, Proxy, Dictionary, and E4X (see docs*)
  • Almost all AS3 language features

Does not support:

  • with
  • package-level static initializers (class-level supported)
  • lazy initialization of non-static property values:
private var foo1:* = foo2; //undefined, not 5
private var foo2:* = 5;
  • weak references
  • named closures in conditionals:
    if (false) function foo() {} //compilation error
  - non-unique custom namespace identifiers:
 ```actionscript3
public var myNamespace;
namespace myNamespace = 'foo'; //conflict

Install:

npm install @johnbrandle/as3-js

Basic Usage:

Browser
/* c:/projects/hello/source/com/foo/Hello.as */

package com.foo
{
    public class Hello
    {
        public function say():String
        {
            return document.getElementById('hello_world').innerHTML;
        }
    }
}
/* node compilation script */

const as3_js = require('@johnbrandle/as3-js');

let props =
{
	srcDir:'c:/projects/hello/source', //where *.as files are located
	mainFile:'/com/foo/Hello.as', //main class file relative location to srcDir
	expose:'hello', //what variable name to set main class instance to
	platform:'browser' //environment where compiled js will run, options: "node|browser|player"
}

let result = as3_js.compile(props);

fs.writeFileSync('c:/projects/hello/build/js/hello.js', result.js, 'utf8');
<!-- c:/projects/hello/build/index.html -->

<div id="hello_world">hello world</div>

<script src="js/hello.js"></script>
<script>
    trace(hello.say()); //outputs hello world to console
</script>  
Browser (Runtime)
<script src="node_modules/@johnbrandle/as3-js/_excluded/_generated/as3_js.browser.3.js"></script>
<script>
    let request = new XMLHttpRequest();
    request.open('GET', 'node_modules/@johnbrandle/as3-js/_excluded/_generated/builtin.browser.swc', false); //recommend changing this to asynch
    request.send(null);

    let constructs = as3_js.getSwcUtil().parseSWCString(request.responseText); //recommend caching result

    let script = 'trace("hello world");';
    let code = 'package { public function actionScript(scope:Object, args:*):* { return (function() {' + script + '\n\n}).apply(scope, args || []); } }';  

    let construct = as3_js.getAnalyzer().analyze(as3_js.getParser().parse(as3_js.getLexer().lex(code).tokens), constructs, 3, true, true);  
    let result = as3_js.getTranslator().translate(construct, constructs, true, false, false);  

    let value = '(function() { var $window = this; var window = $window.parent || $window; var document = window.document; var $es4 = window.$es4 || (window.$es4 = {}); var _ = window._; var $ = window.$;\n\n' + result + '\n\n})();';  

    eval(value); //outputs hello world to console
</script>
Node
/* c:/projects/hello/source/com/foo/Hello.as */

package com.foo
{
    public class Hello
    {
        public function say():String
        {
            const os = require('os');

            return os.platform() == 'aix' ? global.Buffer.from('hello world').toString() : 'hello world';
        }
    }
}
/* node compilation script */

const as3_js = require('@johnbrandle/as3-js');

let props =
{
	srcDir:'c:/projects/hello/source', //where *.as files are located
	mainFile:'/com/foo/Hello.as', //main class file relative location to srcDir
	expose:'hello', //module export name
	platform:'node' //environment where compiled js will run, options: "node|browser|player"
}

let result = as3_js.compile(props);

fs.writeFileSync('c:/projects/hello/tools/modules/hello/index.js', result.js, 'utf8');
/* node test module script */

const hello = require('./modules/hello');

trace(hello.say()); //outputs hello world to console

Advanced Usage:

see docs

Notes:

1.1.29

1 year ago

1.1.30

1 year ago

1.1.31

1 year ago

1.1.28

3 years ago

1.1.27

3 years ago

1.1.26

3 years ago

1.1.23

3 years ago

1.1.25

3 years ago

1.1.24

3 years ago

1.1.22

4 years ago

1.1.21

4 years ago

1.1.20

5 years ago

1.1.19

5 years ago

1.1.18

5 years ago

1.1.17

5 years ago

1.1.16

5 years ago

1.1.15

5 years ago

1.1.14

5 years ago

1.1.13

5 years ago

1.1.12

5 years ago

1.1.11

5 years ago

1.1.10

5 years ago

1.1.9

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago