INITIALISED = False babel = None babelPresetEs2015 = None def js6_to_js5(code): global INITIALISED, babel, babelPresetEs2015 if not INITIALISED: import signal, warnings, time warnings.warn( '\nImporting babel.py for the first time - this can take some time. \nPlease note that currently Javascript 6 in Js2Py is unstable and slow. Use only for tiny scripts!' ) from .babel import babel as _babel babel = _babel.Object.babel babelPresetEs2015 = _babel.Object.babelPresetEs2015 # very weird hack. Somehow this helps babel to initialise properly! try: babel.transform('warmup', {'presets': {}}) signal.alarm(2) def kill_it(a, b): raise KeyboardInterrupt('Better work next time!') signal.signal(signal.SIGALRM, kill_it) babel.transform('stuckInALoop', { 'presets': babelPresetEs2015 }).code for n in range(3): time.sleep(1) except: print("Initialised babel!") INITIALISED = True return babel.transform(code, {'presets': babelPresetEs2015}).code if __name__ == '__main__': print(js6_to_js5('obj={}; obj.x = function() {return () => this}')) print() print(js6_to_js5('const a = 1;'))