You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.3 KiB
42 lines
1.3 KiB
6 years ago
|
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;'))
|