rapydscript-ns 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agignore +1 -1
- package/.github/workflows/ci.yml +38 -38
- package/=template.pyj +5 -5
- package/CHANGELOG.md +10 -0
- package/HACKING.md +103 -103
- package/LICENSE +24 -24
- package/README.md +7 -6
- package/TODO.md +116 -1
- package/add-toc-to-readme +2 -2
- package/bin/export +75 -75
- package/bin/rapydscript +70 -70
- package/bin/web-repl-export +102 -102
- package/build +2 -2
- package/language-service/index.js +9 -9
- package/language-service/language-service.d.ts +1 -1
- package/package.json +6 -2
- package/publish.py +37 -37
- package/release/compiler.js +246 -231
- package/release/signatures.json +23 -23
- package/session.vim +4 -4
- package/setup.cfg +2 -2
- package/src/compiler.pyj +36 -36
- package/src/errors.pyj +30 -30
- package/src/lib/aes.pyj +646 -646
- package/src/lib/contextlib.pyj +379 -0
- package/src/lib/copy.pyj +120 -120
- package/src/lib/datetime.pyj +712 -0
- package/src/lib/elementmaker.pyj +83 -83
- package/src/lib/encodings.pyj +126 -126
- package/src/lib/gettext.pyj +569 -569
- package/src/lib/io.pyj +500 -0
- package/src/lib/itertools.pyj +580 -580
- package/src/lib/json.pyj +227 -0
- package/src/lib/math.pyj +193 -193
- package/src/lib/operator.pyj +11 -11
- package/src/lib/pythonize.pyj +20 -20
- package/src/lib/random.pyj +118 -118
- package/src/lib/react.pyj +74 -74
- package/src/lib/traceback.pyj +63 -63
- package/src/lib/uuid.pyj +77 -77
- package/src/monaco-language-service/diagnostics.js +4 -4
- package/src/monaco-language-service/dts.js +550 -550
- package/src/monaco-language-service/index.js +2 -2
- package/src/output/comments.pyj +45 -45
- package/src/output/exceptions.pyj +201 -201
- package/src/output/jsx.pyj +164 -164
- package/src/output/loops.pyj +9 -0
- package/src/output/treeshake.pyj +182 -182
- package/src/output/utils.pyj +72 -72
- package/src/string_interpolation.pyj +72 -72
- package/src/tokenizer.pyj +1 -1
- package/src/unicode_aliases.pyj +576 -576
- package/src/utils.pyj +192 -192
- package/test/_import_one.pyj +37 -37
- package/test/_import_two/__init__.pyj +11 -11
- package/test/_import_two/level2/deep.pyj +4 -4
- package/test/_import_two/other.pyj +6 -6
- package/test/_import_two/sub.pyj +13 -13
- package/test/aes_vectors.pyj +421 -421
- package/test/annotations.pyj +80 -80
- package/test/contextlib.pyj +362 -0
- package/test/datetime.pyj +500 -0
- package/test/debugger_stmt.pyj +41 -0
- package/test/decorators.pyj +77 -77
- package/test/docstrings.pyj +39 -39
- package/test/elementmaker_test.pyj +45 -45
- package/test/functions.pyj +151 -151
- package/test/generators.pyj +41 -41
- package/test/generic.pyj +370 -370
- package/test/imports.pyj +72 -72
- package/test/internationalization.pyj +73 -73
- package/test/io.pyj +316 -0
- package/test/json.pyj +196 -0
- package/test/lint.pyj +164 -164
- package/test/loops.pyj +85 -85
- package/test/numpy.pyj +734 -734
- package/test/omit_function_metadata.pyj +20 -20
- package/test/repl.pyj +121 -121
- package/test/scoped_flags.pyj +76 -76
- package/test/unit/index.js +66 -0
- package/test/unit/language-service-dts.js +543 -543
- package/test/unit/language-service-hover.js +455 -455
- package/test/unit/language-service.js +1 -1
- package/test/unit/web-repl.js +533 -0
- package/tools/compiler.d.ts +367 -0
- package/tools/completer.js +131 -131
- package/tools/gettext.js +185 -185
- package/tools/ini.js +65 -65
- package/tools/msgfmt.js +187 -187
- package/tools/repl.js +223 -223
- package/tools/test.js +118 -118
- package/tools/utils.js +128 -128
- package/tools/web_repl.js +95 -95
- package/try +41 -41
- package/web-repl/env.js +196 -196
- package/web-repl/index.html +163 -163
- package/web-repl/prism.css +139 -139
- package/web-repl/prism.js +113 -113
- package/web-repl/rapydscript.js +224 -224
- package/web-repl/sha1.js +25 -25
package/bin/export
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// vim:ft=javascript:ts=4:et
|
|
3
|
-
|
|
4
|
-
"use strict";
|
|
5
|
-
|
|
6
|
-
var fs = require('fs');
|
|
7
|
-
var path = require('path');
|
|
8
|
-
var crypto = require('crypto');
|
|
9
|
-
|
|
10
|
-
var base = path.join(path.dirname(__dirname));
|
|
11
|
-
var meta = JSON.parse(fs.readFileSync(path.join(base, 'package.json'), {'encoding':'utf-8'}));
|
|
12
|
-
var compiler_dir = path.join(base, 'dev');
|
|
13
|
-
if (!path_exists(path.join(compiler_dir, 'compiler.js'))) compiler_dir = path.join(base, 'release');
|
|
14
|
-
|
|
15
|
-
var manifest = {}, total = 0;
|
|
16
|
-
['compiler.js', 'baselib-plain-pretty.js', 'baselib-plain-ugly.js'].forEach(function(x) {
|
|
17
|
-
manifest[x] = fs.readFileSync(path.join(compiler_dir, x), {'encoding':'utf-8'});
|
|
18
|
-
total += manifest[x].length;
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
['web_repl.js', 'repl.js', 'completer.js', 'utils.js', 'gettext.js', 'msgfmt.js'].forEach(function(x) {
|
|
22
|
-
x = 'tools/' + x;
|
|
23
|
-
manifest[x] = fs.readFileSync(path.join(base, x), {'encoding':'utf-8'});
|
|
24
|
-
total += manifest[x].length;
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var dedup = {};
|
|
29
|
-
|
|
30
|
-
function path_exists(path) {
|
|
31
|
-
try {
|
|
32
|
-
fs.statSync(path);
|
|
33
|
-
return true;
|
|
34
|
-
} catch(e) {
|
|
35
|
-
if (e.code != 'ENOENT') throw e;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function sha1sum(data) {
|
|
40
|
-
var h = crypto.createHash('sha1');
|
|
41
|
-
h.update(data);
|
|
42
|
-
return h.digest('hex');
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function process_dir(name) {
|
|
46
|
-
var dpath = path.join(base, name);
|
|
47
|
-
var items = fs.readdirSync(dpath);
|
|
48
|
-
items.forEach(function (x) {
|
|
49
|
-
var iname = name + '/' + x;
|
|
50
|
-
var ipath = path.join(dpath, x);
|
|
51
|
-
var s = fs.statSync(ipath);
|
|
52
|
-
if (s.isDirectory()) return process_dir(iname);
|
|
53
|
-
var raw = fs.readFileSync(ipath, {'encoding':'utf-8'});
|
|
54
|
-
var sig = sha1sum(raw);
|
|
55
|
-
if (dedup.hasOwnProperty(sig)) {
|
|
56
|
-
manifest[iname] = [dedup[sig]];
|
|
57
|
-
} else {
|
|
58
|
-
manifest[iname] = raw;
|
|
59
|
-
dedup[sig] = iname;
|
|
60
|
-
total += s.size;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
Object.keys(meta.dependencies).forEach(function (x) {
|
|
66
|
-
process_dir('node_modules/' + x);
|
|
67
|
-
});
|
|
68
|
-
console.log('// vim:fileencoding=utf-8');
|
|
69
|
-
console.log('(function() {');
|
|
70
|
-
console.log('var rs_version = ' + JSON.stringify(meta.version) + ';');
|
|
71
|
-
console.log('var data = ' + JSON.stringify(manifest) + ';');
|
|
72
|
-
console.log();
|
|
73
|
-
console.log(fs.readFileSync(path.join(base, 'tools', 'export.js'), {'encoding':'utf-8'}));
|
|
74
|
-
console.log('})()');
|
|
75
|
-
console.error('RapydScript compiler (uncompressed) size: ' + (total/(1024 * 1024)).toFixed(1) + ' MB');
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// vim:ft=javascript:ts=4:et
|
|
3
|
+
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var path = require('path');
|
|
8
|
+
var crypto = require('crypto');
|
|
9
|
+
|
|
10
|
+
var base = path.join(path.dirname(__dirname));
|
|
11
|
+
var meta = JSON.parse(fs.readFileSync(path.join(base, 'package.json'), {'encoding':'utf-8'}));
|
|
12
|
+
var compiler_dir = path.join(base, 'dev');
|
|
13
|
+
if (!path_exists(path.join(compiler_dir, 'compiler.js'))) compiler_dir = path.join(base, 'release');
|
|
14
|
+
|
|
15
|
+
var manifest = {}, total = 0;
|
|
16
|
+
['compiler.js', 'baselib-plain-pretty.js', 'baselib-plain-ugly.js'].forEach(function(x) {
|
|
17
|
+
manifest[x] = fs.readFileSync(path.join(compiler_dir, x), {'encoding':'utf-8'});
|
|
18
|
+
total += manifest[x].length;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
['web_repl.js', 'repl.js', 'completer.js', 'utils.js', 'gettext.js', 'msgfmt.js'].forEach(function(x) {
|
|
22
|
+
x = 'tools/' + x;
|
|
23
|
+
manifest[x] = fs.readFileSync(path.join(base, x), {'encoding':'utf-8'});
|
|
24
|
+
total += manifest[x].length;
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
var dedup = {};
|
|
29
|
+
|
|
30
|
+
function path_exists(path) {
|
|
31
|
+
try {
|
|
32
|
+
fs.statSync(path);
|
|
33
|
+
return true;
|
|
34
|
+
} catch(e) {
|
|
35
|
+
if (e.code != 'ENOENT') throw e;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function sha1sum(data) {
|
|
40
|
+
var h = crypto.createHash('sha1');
|
|
41
|
+
h.update(data);
|
|
42
|
+
return h.digest('hex');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function process_dir(name) {
|
|
46
|
+
var dpath = path.join(base, name);
|
|
47
|
+
var items = fs.readdirSync(dpath);
|
|
48
|
+
items.forEach(function (x) {
|
|
49
|
+
var iname = name + '/' + x;
|
|
50
|
+
var ipath = path.join(dpath, x);
|
|
51
|
+
var s = fs.statSync(ipath);
|
|
52
|
+
if (s.isDirectory()) return process_dir(iname);
|
|
53
|
+
var raw = fs.readFileSync(ipath, {'encoding':'utf-8'});
|
|
54
|
+
var sig = sha1sum(raw);
|
|
55
|
+
if (dedup.hasOwnProperty(sig)) {
|
|
56
|
+
manifest[iname] = [dedup[sig]];
|
|
57
|
+
} else {
|
|
58
|
+
manifest[iname] = raw;
|
|
59
|
+
dedup[sig] = iname;
|
|
60
|
+
total += s.size;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
Object.keys(meta.dependencies).forEach(function (x) {
|
|
66
|
+
process_dir('node_modules/' + x);
|
|
67
|
+
});
|
|
68
|
+
console.log('// vim:fileencoding=utf-8');
|
|
69
|
+
console.log('(function() {');
|
|
70
|
+
console.log('var rs_version = ' + JSON.stringify(meta.version) + ';');
|
|
71
|
+
console.log('var data = ' + JSON.stringify(manifest) + ';');
|
|
72
|
+
console.log();
|
|
73
|
+
console.log(fs.readFileSync(path.join(base, 'tools', 'export.js'), {'encoding':'utf-8'}));
|
|
74
|
+
console.log('})()');
|
|
75
|
+
console.error('RapydScript compiler (uncompressed) size: ' + (total/(1024 * 1024)).toFixed(1) + ' MB');
|
package/bin/rapydscript
CHANGED
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// vim:ft=javascript:ts=4:et
|
|
3
|
-
|
|
4
|
-
"use strict";
|
|
5
|
-
|
|
6
|
-
function load(mod) {
|
|
7
|
-
return require('../tools/' + mod);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
var utils = load('utils');
|
|
11
|
-
|
|
12
|
-
// We need ES 6 generators so relaunch with the --harmony flag
|
|
13
|
-
if (!utils.generators_available()) {
|
|
14
|
-
if (process.execArgv.indexOf('--harmony') != -1) {
|
|
15
|
-
console.error('RapydScript needs ES 6 generators, update your version of nodejs');
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
|
-
var args = ['--harmony', module.filename].concat(process.argv.slice(2));
|
|
19
|
-
require('child_process').spawn(process.execPath, args, {stdio:'inherit'}).on('exit', function(code, signal) {
|
|
20
|
-
process.exit(code);
|
|
21
|
-
});
|
|
22
|
-
} else {
|
|
23
|
-
|
|
24
|
-
var start_time = new Date().getTime();
|
|
25
|
-
var path = require('path');
|
|
26
|
-
|
|
27
|
-
var argv = load('cli').argv;
|
|
28
|
-
|
|
29
|
-
var base_path = path.normalize(path.join(path.dirname(module.filename), ".."));
|
|
30
|
-
var src_path = path.join(base_path, 'src');
|
|
31
|
-
var lib_path = path.join(base_path, 'dev');
|
|
32
|
-
if (!utils.path_exists(path.join(lib_path, 'compiler.js'))) lib_path = path.join(base_path, 'release');
|
|
33
|
-
|
|
34
|
-
if (argv.mode === 'self') {
|
|
35
|
-
if (argv.files.length > 0) {
|
|
36
|
-
console.error("WARN: Ignoring input files since --self was passed");
|
|
37
|
-
}
|
|
38
|
-
load('self')(base_path, src_path, lib_path, argv.complete, argv.profile);
|
|
39
|
-
if (argv.test) {
|
|
40
|
-
console.log('\nRunning test suite...\n');
|
|
41
|
-
argv.files = []; // Ensure all tests are run
|
|
42
|
-
load('test')(argv, base_path, src_path, path.join(base_path, 'dev'));
|
|
43
|
-
}
|
|
44
|
-
process.exit(0);
|
|
45
|
-
} else
|
|
46
|
-
|
|
47
|
-
if (argv.mode === 'test') {
|
|
48
|
-
load('test')(argv, base_path, src_path, lib_path);
|
|
49
|
-
} else
|
|
50
|
-
|
|
51
|
-
if (argv.mode === 'lint') {
|
|
52
|
-
load('lint').cli(argv, base_path, src_path, lib_path);
|
|
53
|
-
} else
|
|
54
|
-
|
|
55
|
-
if (argv.mode === 'repl') {
|
|
56
|
-
load('repl')({'lib_path':lib_path, 'imp_path':path.join(src_path, 'lib'), show_js:!argv.no_js});
|
|
57
|
-
} else
|
|
58
|
-
|
|
59
|
-
if (argv.mode === 'gettext') {
|
|
60
|
-
load('gettext').cli(argv, base_path, src_path, lib_path);
|
|
61
|
-
} else
|
|
62
|
-
|
|
63
|
-
if (argv.mode === 'msgfmt') {
|
|
64
|
-
load('msgfmt').cli(argv, base_path, src_path, lib_path);
|
|
65
|
-
} else
|
|
66
|
-
|
|
67
|
-
{
|
|
68
|
-
load('compile')(start_time, argv, base_path, src_path, lib_path);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// vim:ft=javascript:ts=4:et
|
|
3
|
+
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
function load(mod) {
|
|
7
|
+
return require('../tools/' + mod);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
var utils = load('utils');
|
|
11
|
+
|
|
12
|
+
// We need ES 6 generators so relaunch with the --harmony flag
|
|
13
|
+
if (!utils.generators_available()) {
|
|
14
|
+
if (process.execArgv.indexOf('--harmony') != -1) {
|
|
15
|
+
console.error('RapydScript needs ES 6 generators, update your version of nodejs');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
var args = ['--harmony', module.filename].concat(process.argv.slice(2));
|
|
19
|
+
require('child_process').spawn(process.execPath, args, {stdio:'inherit'}).on('exit', function(code, signal) {
|
|
20
|
+
process.exit(code);
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
|
|
24
|
+
var start_time = new Date().getTime();
|
|
25
|
+
var path = require('path');
|
|
26
|
+
|
|
27
|
+
var argv = load('cli').argv;
|
|
28
|
+
|
|
29
|
+
var base_path = path.normalize(path.join(path.dirname(module.filename), ".."));
|
|
30
|
+
var src_path = path.join(base_path, 'src');
|
|
31
|
+
var lib_path = path.join(base_path, 'dev');
|
|
32
|
+
if (!utils.path_exists(path.join(lib_path, 'compiler.js'))) lib_path = path.join(base_path, 'release');
|
|
33
|
+
|
|
34
|
+
if (argv.mode === 'self') {
|
|
35
|
+
if (argv.files.length > 0) {
|
|
36
|
+
console.error("WARN: Ignoring input files since --self was passed");
|
|
37
|
+
}
|
|
38
|
+
load('self')(base_path, src_path, lib_path, argv.complete, argv.profile);
|
|
39
|
+
if (argv.test) {
|
|
40
|
+
console.log('\nRunning test suite...\n');
|
|
41
|
+
argv.files = []; // Ensure all tests are run
|
|
42
|
+
load('test')(argv, base_path, src_path, path.join(base_path, 'dev'));
|
|
43
|
+
}
|
|
44
|
+
process.exit(0);
|
|
45
|
+
} else
|
|
46
|
+
|
|
47
|
+
if (argv.mode === 'test') {
|
|
48
|
+
load('test')(argv, base_path, src_path, lib_path);
|
|
49
|
+
} else
|
|
50
|
+
|
|
51
|
+
if (argv.mode === 'lint') {
|
|
52
|
+
load('lint').cli(argv, base_path, src_path, lib_path);
|
|
53
|
+
} else
|
|
54
|
+
|
|
55
|
+
if (argv.mode === 'repl') {
|
|
56
|
+
load('repl')({'lib_path':lib_path, 'imp_path':path.join(src_path, 'lib'), show_js:!argv.no_js});
|
|
57
|
+
} else
|
|
58
|
+
|
|
59
|
+
if (argv.mode === 'gettext') {
|
|
60
|
+
load('gettext').cli(argv, base_path, src_path, lib_path);
|
|
61
|
+
} else
|
|
62
|
+
|
|
63
|
+
if (argv.mode === 'msgfmt') {
|
|
64
|
+
load('msgfmt').cli(argv, base_path, src_path, lib_path);
|
|
65
|
+
} else
|
|
66
|
+
|
|
67
|
+
{
|
|
68
|
+
load('compile')(start_time, argv, base_path, src_path, lib_path);
|
|
69
|
+
}
|
|
70
|
+
}
|
package/bin/web-repl-export
CHANGED
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// vim:ft=javascript:ts=4:et
|
|
3
|
-
|
|
4
|
-
"use strict";
|
|
5
|
-
|
|
6
|
-
var fs = require('fs');
|
|
7
|
-
var path = require('path');
|
|
8
|
-
|
|
9
|
-
var base = path.normalize(path.resolve(path.join(path.dirname(__dirname))));
|
|
10
|
-
var meta = JSON.parse(fs.readFileSync(path.join(base, 'package.json'), {'encoding':'utf-8'}));
|
|
11
|
-
var commit_sha = fs.readFileSync(path.join(base, '.git', 'refs', 'heads', 'master'), {'encoding':'utf-8'}).trim();
|
|
12
|
-
var compiler_dir = path.join(base, 'dev');
|
|
13
|
-
if (!path_exists(path.join(compiler_dir, 'compiler.js'))) compiler_dir = path.join(base, 'release');
|
|
14
|
-
|
|
15
|
-
var manifest = {}, total = 0;
|
|
16
|
-
['compiler.js', 'baselib-plain-pretty.js'].forEach(function(x) {
|
|
17
|
-
manifest[x] = fs.readFileSync(path.join(compiler_dir, x), {'encoding':'utf-8'});
|
|
18
|
-
total += manifest[x].length;
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
['web_repl.js', 'embedded_compiler.js', 'utils.js', 'completer.js', 'msgfmt.js', 'gettext.js'].forEach(function(x) {
|
|
22
|
-
x = 'tools/' + x;
|
|
23
|
-
manifest[x] = fs.readFileSync(path.join(base, x), {'encoding':'utf-8'});
|
|
24
|
-
total += manifest[x].length;
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
var stdlib = path.join(base, 'src', 'lib');
|
|
28
|
-
|
|
29
|
-
function path_exists(path) {
|
|
30
|
-
try {
|
|
31
|
-
fs.statSync(path);
|
|
32
|
-
return true;
|
|
33
|
-
} catch(e) {
|
|
34
|
-
if (e.code != 'ENOENT') throw e;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function process_dir(relpath) {
|
|
39
|
-
var fullpath = (relpath) ? path.join(stdlib, relpath) : stdlib;
|
|
40
|
-
fs.readdirSync(fullpath).forEach(function (x) {
|
|
41
|
-
var q = path.join(fullpath, x);
|
|
42
|
-
var s = fs.statSync(q);
|
|
43
|
-
if (s.isDirectory()) return process_dir(relpath + '/' + x);
|
|
44
|
-
if (!x.endsWith('.pyj')) return;
|
|
45
|
-
var iname = ('__stdlib__' + '/' + relpath + '/' + x).replace(/\\/g, '/').replace(/\/+/g, '/');
|
|
46
|
-
var raw = fs.readFileSync(q, {'encoding':'utf-8'});
|
|
47
|
-
manifest[iname] = raw;
|
|
48
|
-
total += s.size;
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
process_dir('');
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
var rs = '// vim:fileencoding=utf-8\n';
|
|
55
|
-
rs += '(function(external_namespace) {\n';
|
|
56
|
-
rs += '"use strict;"\n';
|
|
57
|
-
rs += 'var rs_version = ' + JSON.stringify(meta.version) + ';\n';
|
|
58
|
-
rs += 'var rs_commit_sha = ' + JSON.stringify(commit_sha) + ';\n';
|
|
59
|
-
rs += '\n// Embedded modules {{{\n';
|
|
60
|
-
rs += 'var data = ' + JSON.stringify(manifest) + ';\n\n';
|
|
61
|
-
rs += '// End embedded modules }}}\n\n';
|
|
62
|
-
rs += fs.readFileSync(path.join(base, 'web-repl', 'env.js'));
|
|
63
|
-
rs += '\n// Embedded sha1 implementation {{{\n';
|
|
64
|
-
rs += '(function() {\n';
|
|
65
|
-
rs += fs.readFileSync(path.join(base, 'web-repl', 'sha1.js'));
|
|
66
|
-
rs += '}).call(jsSHA);\n';
|
|
67
|
-
rs += '// End embedded sha1 implementation }}}\n\n';
|
|
68
|
-
rs += 'var exports = namespace;\n';
|
|
69
|
-
rs += fs.readFileSync(path.join(base, 'tools', 'export.js'), {'encoding':'utf-8'});
|
|
70
|
-
rs += 'external_namespace.RapydScript = namespace;\n';
|
|
71
|
-
rs += '})(this);\n';
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
var base_dir = process.argv.slice(-1)[0];
|
|
75
|
-
if (process.argv.length !== 3) {
|
|
76
|
-
console.error('Usage: web-repl-export /path/to/export/directory');
|
|
77
|
-
process.exit(1);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
base_dir = path.normalize(path.resolve(base_dir));
|
|
81
|
-
|
|
82
|
-
try {
|
|
83
|
-
fs.mkdirSync(base_dir);
|
|
84
|
-
} catch(e) {
|
|
85
|
-
if (e.code !== 'EEXIST') throw e;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
process.chdir(base_dir);
|
|
90
|
-
} catch(e) {
|
|
91
|
-
if (e.code === 'ENOTDIR') { console.error(base_dir + ' is not a directory'); process.exit(1); }
|
|
92
|
-
throw e;
|
|
93
|
-
}
|
|
94
|
-
fs.writeFileSync('rapydscript.js', rs, {'encoding':'utf-8'});
|
|
95
|
-
var web_repl = path.join(base, 'web-repl');
|
|
96
|
-
fs.readdirSync(web_repl).forEach(function(x) {
|
|
97
|
-
if (['sha1.js', 'env.js'].indexOf(x) !== -1) return;
|
|
98
|
-
var data = fs.readFileSync(path.join(web_repl, x), {'encoding':'utf-8'});
|
|
99
|
-
fs.writeFileSync(x, data, {'encoding':'utf-8'});
|
|
100
|
-
});
|
|
101
|
-
console.log('RapydScript compiler (uncompressed) size: ' + (total/(1024)).toFixed(1) + ' KB');
|
|
102
|
-
console.log('web-repl exported to: ' + base_dir);
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// vim:ft=javascript:ts=4:et
|
|
3
|
+
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var path = require('path');
|
|
8
|
+
|
|
9
|
+
var base = path.normalize(path.resolve(path.join(path.dirname(__dirname))));
|
|
10
|
+
var meta = JSON.parse(fs.readFileSync(path.join(base, 'package.json'), {'encoding':'utf-8'}));
|
|
11
|
+
var commit_sha = fs.readFileSync(path.join(base, '.git', 'refs', 'heads', 'master'), {'encoding':'utf-8'}).trim();
|
|
12
|
+
var compiler_dir = path.join(base, 'dev');
|
|
13
|
+
if (!path_exists(path.join(compiler_dir, 'compiler.js'))) compiler_dir = path.join(base, 'release');
|
|
14
|
+
|
|
15
|
+
var manifest = {}, total = 0;
|
|
16
|
+
['compiler.js', 'baselib-plain-pretty.js'].forEach(function(x) {
|
|
17
|
+
manifest[x] = fs.readFileSync(path.join(compiler_dir, x), {'encoding':'utf-8'});
|
|
18
|
+
total += manifest[x].length;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
['web_repl.js', 'embedded_compiler.js', 'utils.js', 'completer.js', 'msgfmt.js', 'gettext.js'].forEach(function(x) {
|
|
22
|
+
x = 'tools/' + x;
|
|
23
|
+
manifest[x] = fs.readFileSync(path.join(base, x), {'encoding':'utf-8'});
|
|
24
|
+
total += manifest[x].length;
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
var stdlib = path.join(base, 'src', 'lib');
|
|
28
|
+
|
|
29
|
+
function path_exists(path) {
|
|
30
|
+
try {
|
|
31
|
+
fs.statSync(path);
|
|
32
|
+
return true;
|
|
33
|
+
} catch(e) {
|
|
34
|
+
if (e.code != 'ENOENT') throw e;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function process_dir(relpath) {
|
|
39
|
+
var fullpath = (relpath) ? path.join(stdlib, relpath) : stdlib;
|
|
40
|
+
fs.readdirSync(fullpath).forEach(function (x) {
|
|
41
|
+
var q = path.join(fullpath, x);
|
|
42
|
+
var s = fs.statSync(q);
|
|
43
|
+
if (s.isDirectory()) return process_dir(relpath + '/' + x);
|
|
44
|
+
if (!x.endsWith('.pyj')) return;
|
|
45
|
+
var iname = ('__stdlib__' + '/' + relpath + '/' + x).replace(/\\/g, '/').replace(/\/+/g, '/');
|
|
46
|
+
var raw = fs.readFileSync(q, {'encoding':'utf-8'});
|
|
47
|
+
manifest[iname] = raw;
|
|
48
|
+
total += s.size;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
process_dir('');
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
var rs = '// vim:fileencoding=utf-8\n';
|
|
55
|
+
rs += '(function(external_namespace) {\n';
|
|
56
|
+
rs += '"use strict;"\n';
|
|
57
|
+
rs += 'var rs_version = ' + JSON.stringify(meta.version) + ';\n';
|
|
58
|
+
rs += 'var rs_commit_sha = ' + JSON.stringify(commit_sha) + ';\n';
|
|
59
|
+
rs += '\n// Embedded modules {{{\n';
|
|
60
|
+
rs += 'var data = ' + JSON.stringify(manifest) + ';\n\n';
|
|
61
|
+
rs += '// End embedded modules }}}\n\n';
|
|
62
|
+
rs += fs.readFileSync(path.join(base, 'web-repl', 'env.js'));
|
|
63
|
+
rs += '\n// Embedded sha1 implementation {{{\n';
|
|
64
|
+
rs += '(function() {\n';
|
|
65
|
+
rs += fs.readFileSync(path.join(base, 'web-repl', 'sha1.js'));
|
|
66
|
+
rs += '}).call(jsSHA);\n';
|
|
67
|
+
rs += '// End embedded sha1 implementation }}}\n\n';
|
|
68
|
+
rs += 'var exports = namespace;\n';
|
|
69
|
+
rs += fs.readFileSync(path.join(base, 'tools', 'export.js'), {'encoding':'utf-8'});
|
|
70
|
+
rs += 'external_namespace.RapydScript = namespace;\n';
|
|
71
|
+
rs += '})(this);\n';
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
var base_dir = process.argv.slice(-1)[0];
|
|
75
|
+
if (process.argv.length !== 3) {
|
|
76
|
+
console.error('Usage: web-repl-export /path/to/export/directory');
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
base_dir = path.normalize(path.resolve(base_dir));
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
fs.mkdirSync(base_dir);
|
|
84
|
+
} catch(e) {
|
|
85
|
+
if (e.code !== 'EEXIST') throw e;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
try {
|
|
89
|
+
process.chdir(base_dir);
|
|
90
|
+
} catch(e) {
|
|
91
|
+
if (e.code === 'ENOTDIR') { console.error(base_dir + ' is not a directory'); process.exit(1); }
|
|
92
|
+
throw e;
|
|
93
|
+
}
|
|
94
|
+
fs.writeFileSync('rapydscript.js', rs, {'encoding':'utf-8'});
|
|
95
|
+
var web_repl = path.join(base, 'web-repl');
|
|
96
|
+
fs.readdirSync(web_repl).forEach(function(x) {
|
|
97
|
+
if (['sha1.js', 'env.js'].indexOf(x) !== -1) return;
|
|
98
|
+
var data = fs.readFileSync(path.join(web_repl, x), {'encoding':'utf-8'});
|
|
99
|
+
fs.writeFileSync(x, data, {'encoding':'utf-8'});
|
|
100
|
+
});
|
|
101
|
+
console.log('RapydScript compiler (uncompressed) size: ' + (total/(1024)).toFixed(1) + ' KB');
|
|
102
|
+
console.log('web-repl exported to: ' + base_dir);
|
package/build
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
exec bin/rapydscript self --complete --test
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
exec bin/rapydscript self --complete --test
|
|
3
3
|
exec bin/web-repl-export web-repl
|