rapydscript-ng 0.7.23 → 0.8.0

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.
Files changed (114) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +72 -26
  3. package/bin/package.json +1 -0
  4. package/bin/rapydscript +65 -62
  5. package/editor-plugins/nvim/rapydscript/README.md +184 -0
  6. package/editor-plugins/nvim/rapydscript/bin/rapydscript.so +0 -0
  7. package/editor-plugins/nvim/rapydscript/ftdetect/rapydscript.lua +10 -0
  8. package/editor-plugins/nvim/rapydscript/lua/rapydscript/health.lua +88 -0
  9. package/editor-plugins/nvim/rapydscript/lua/rapydscript/init.lua +279 -0
  10. package/local-agent.md +28 -0
  11. package/package.json +4 -5
  12. package/release/baselib-plain-pretty.js +448 -326
  13. package/release/baselib-plain-ugly.js +3 -3
  14. package/release/compiler.js +2528 -1672
  15. package/release/signatures.json +17 -17
  16. package/src/ast.pyj +73 -25
  17. package/src/baselib-builtins.pyj +2 -2
  18. package/src/baselib-containers.pyj +153 -151
  19. package/src/baselib-internal.pyj +3 -3
  20. package/src/baselib-str.pyj +5 -5
  21. package/src/lib/aes.pyj +1 -1
  22. package/src/lib/encodings.pyj +1 -1
  23. package/src/lib/pythonize.pyj +1 -1
  24. package/src/lib/re.pyj +2 -2
  25. package/src/lib/traceback.pyj +165 -28
  26. package/src/lib/uuid.pyj +1 -1
  27. package/src/output/codegen.pyj +10 -3
  28. package/src/output/functions.pyj +31 -40
  29. package/src/output/literals.pyj +11 -14
  30. package/src/output/loops.pyj +25 -87
  31. package/src/output/modules.pyj +5 -47
  32. package/src/output/statements.pyj +1 -1
  33. package/src/output/stream.pyj +58 -31
  34. package/src/parse.pyj +777 -427
  35. package/src/tokenizer.pyj +16 -4
  36. package/src/utils.pyj +1 -1
  37. package/test/_treeshake_mod.pyj +30 -0
  38. package/test/_treeshake_side_effect.pyj +9 -0
  39. package/test/ast_serialization.pyj +392 -0
  40. package/test/async.pyj +95 -0
  41. package/test/baselib.pyj +1 -2
  42. package/test/embedded_compiler.pyj +57 -0
  43. package/test/fmt.pyj +201 -0
  44. package/test/generic.pyj +7 -3
  45. package/test/imports.pyj +8 -6
  46. package/test/internationalization.pyj +38 -37
  47. package/test/lint.pyj +120 -115
  48. package/test/lsp.pyj +222 -0
  49. package/test/repl.pyj +70 -65
  50. package/test/sourcemaps.pyj +315 -0
  51. package/test/starargs.pyj +46 -39
  52. package/test/traceback.pyj +263 -0
  53. package/test/treeshaking.pyj +181 -0
  54. package/test/web_repl_export.pyj +88 -0
  55. package/tools/ast_serialize.mjs +557 -0
  56. package/tools/cli.mjs +510 -0
  57. package/tools/compile.mjs +201 -0
  58. package/tools/compiler.mjs +127 -0
  59. package/tools/{completer.js → completer.mjs} +6 -6
  60. package/tools/{embedded_compiler.js → embedded_compiler.mjs} +17 -13
  61. package/tools/export.js +109 -56
  62. package/tools/fmt.mjs +735 -0
  63. package/tools/{gettext.js → gettext.mjs} +46 -53
  64. package/tools/{ini.js → ini.mjs} +9 -10
  65. package/tools/{lint.js → lint.mjs} +107 -56
  66. package/tools/lsp.mjs +914 -0
  67. package/tools/lsp_protocol.mjs +259 -0
  68. package/tools/lsp_symbols.mjs +418 -0
  69. package/tools/{msgfmt.js → msgfmt.mjs} +18 -18
  70. package/tools/{repl.js → repl.mjs} +52 -41
  71. package/tools/{self.js → self.mjs} +56 -46
  72. package/tools/sourcemap.mjs +123 -0
  73. package/tools/test.mjs +152 -0
  74. package/tools/treeshake.mjs +400 -0
  75. package/tools/{utils.js → utils.mjs} +26 -23
  76. package/tools/{web_repl.js → web_repl.mjs} +15 -13
  77. package/tools/web_repl_export.mjs +93 -0
  78. package/tree-sitter/README.md +101 -0
  79. package/tree-sitter/grammar.js +992 -0
  80. package/tree-sitter/package.json +43 -0
  81. package/tree-sitter/queries/rapydscript/highlights.scm +232 -0
  82. package/tree-sitter/queries/rapydscript/indents.scm +64 -0
  83. package/tree-sitter/queries/rapydscript/injections.scm +14 -0
  84. package/tree-sitter/queries/rapydscript/locals.scm +108 -0
  85. package/tree-sitter/src/grammar.json +4976 -0
  86. package/tree-sitter/src/node-types.json +2901 -0
  87. package/tree-sitter/src/parser.c +196465 -0
  88. package/tree-sitter/src/scanner.c +294 -0
  89. package/tree-sitter/src/tree_sitter/alloc.h +54 -0
  90. package/tree-sitter/src/tree_sitter/array.h +330 -0
  91. package/tree-sitter/src/tree_sitter/parser.h +286 -0
  92. package/tree-sitter/test/corpus/chaining.txt +99 -0
  93. package/tree-sitter/test/corpus/classes.txt +147 -0
  94. package/tree-sitter/test/corpus/comprehensions.txt +155 -0
  95. package/tree-sitter/test/corpus/containers.txt +242 -0
  96. package/tree-sitter/test/corpus/control_flow.txt +361 -0
  97. package/tree-sitter/test/corpus/decorators.txt +64 -0
  98. package/tree-sitter/test/corpus/existential.txt +102 -0
  99. package/tree-sitter/test/corpus/functions.txt +293 -0
  100. package/tree-sitter/test/corpus/imports.txt +117 -0
  101. package/tree-sitter/test/corpus/literals.txt +135 -0
  102. package/tree-sitter/test/corpus/operators.txt +296 -0
  103. package/tree-sitter/test/corpus/statements.txt +189 -0
  104. package/tree-sitter/test/corpus/strings.txt +90 -0
  105. package/tree-sitter/test/corpus/subscripts.txt +227 -0
  106. package/tree-sitter/tree-sitter.json +36 -0
  107. package/web-repl/env.js +35 -23
  108. package/web-repl/main.js +8 -8
  109. package/bin/export +0 -75
  110. package/bin/web-repl-export +0 -102
  111. package/tools/cli.js +0 -523
  112. package/tools/compile.js +0 -184
  113. package/tools/compiler.js +0 -84
  114. package/tools/test.js +0 -110
@@ -0,0 +1,227 @@
1
+ ==================
2
+ index access
3
+ ==================
4
+
5
+ a = arr[0]
6
+
7
+ ---
8
+
9
+ (module
10
+ (assignment
11
+ left: (pattern
12
+ (identifier))
13
+ right: (subscript
14
+ object: (identifier)
15
+ subscript: (number))))
16
+
17
+ ==================
18
+ attribute access
19
+ ==================
20
+
21
+ a = obj.prop.nested
22
+
23
+ ---
24
+
25
+ (module
26
+ (assignment
27
+ left: (pattern
28
+ (identifier))
29
+ right: (attribute
30
+ object: (attribute
31
+ object: (identifier)
32
+ attribute: (identifier))
33
+ attribute: (identifier))))
34
+
35
+ ==================
36
+ full slice
37
+ ==================
38
+
39
+ a = arr[:]
40
+
41
+ ---
42
+
43
+ (module
44
+ (assignment
45
+ left: (pattern
46
+ (identifier))
47
+ right: (subscript
48
+ object: (identifier)
49
+ subscript: (slice))))
50
+
51
+ ==================
52
+ slice with start stop
53
+ ==================
54
+
55
+ a = arr[1:2]
56
+
57
+ ---
58
+
59
+ (module
60
+ (assignment
61
+ left: (pattern
62
+ (identifier))
63
+ right: (subscript
64
+ object: (identifier)
65
+ subscript: (slice
66
+ (number)
67
+ (number)))))
68
+
69
+ ==================
70
+ slice with step
71
+ ==================
72
+
73
+ a = arr[1:2:3]
74
+
75
+ ---
76
+
77
+ (module
78
+ (assignment
79
+ left: (pattern
80
+ (identifier))
81
+ right: (subscript
82
+ object: (identifier)
83
+ subscript: (slice
84
+ (number)
85
+ (number)
86
+ (number)))))
87
+
88
+ ==================
89
+ slice start only
90
+ ==================
91
+
92
+ a = arr[1:]
93
+
94
+ ---
95
+
96
+ (module
97
+ (assignment
98
+ left: (pattern
99
+ (identifier))
100
+ right: (subscript
101
+ object: (identifier)
102
+ subscript: (slice
103
+ (number)))))
104
+
105
+ ==================
106
+ negative index
107
+ ==================
108
+
109
+ a = arr[-1]
110
+
111
+ ---
112
+
113
+ (module
114
+ (assignment
115
+ left: (pattern
116
+ (identifier))
117
+ right: (subscript
118
+ object: (identifier)
119
+ subscript: (unary_operator
120
+ argument: (number)))))
121
+
122
+ ==================
123
+ method chaining
124
+ ==================
125
+
126
+ result = obj.css("x").show().hide()
127
+
128
+ ---
129
+
130
+ (module
131
+ (assignment
132
+ left: (pattern
133
+ (identifier))
134
+ right: (call
135
+ function: (attribute
136
+ object: (call
137
+ function: (attribute
138
+ object: (call
139
+ function: (attribute
140
+ object: (identifier)
141
+ attribute: (identifier))
142
+ arguments: (argument_list
143
+ (string)))
144
+ attribute: (identifier))
145
+ arguments: (argument_list))
146
+ attribute: (identifier))
147
+ arguments: (argument_list))))
148
+
149
+ ==================
150
+ call with keyword args
151
+ ==================
152
+
153
+ E.div(id="container", class_="xxx")
154
+
155
+ ---
156
+
157
+ (module
158
+ (call
159
+ function: (attribute
160
+ object: (identifier)
161
+ attribute: (identifier))
162
+ arguments: (argument_list
163
+ (keyword_argument
164
+ name: (identifier)
165
+ value: (string))
166
+ (keyword_argument
167
+ name: (identifier)
168
+ value: (string)))))
169
+
170
+ ==================
171
+ call with star args
172
+ ==================
173
+
174
+ f(a, *args, **kwargs)
175
+
176
+ ---
177
+
178
+ (module
179
+ (call
180
+ function: (identifier)
181
+ arguments: (argument_list
182
+ (identifier)
183
+ (list_splat_argument
184
+ (identifier))
185
+ (dictionary_splat_argument
186
+ (identifier)))))
187
+
188
+ ==================
189
+ generator as sole argument
190
+ ==================
191
+
192
+ total = sum(x for x in items)
193
+
194
+ ---
195
+
196
+ (module
197
+ (assignment
198
+ left: (pattern
199
+ (identifier))
200
+ right: (call
201
+ function: (identifier)
202
+ arguments: (argument_list
203
+ body: (identifier)
204
+ (for_in_clause
205
+ left: (pattern
206
+ (identifier))
207
+ right: (identifier))))))
208
+
209
+ ==================
210
+ new expression
211
+ ==================
212
+
213
+ x = new Foo(1, 2)
214
+
215
+ ---
216
+
217
+ (module
218
+ (assignment
219
+ left: (pattern
220
+ (identifier))
221
+ right: (new_expression
222
+ constructor: (call
223
+ function: (identifier)
224
+ arguments: (argument_list
225
+ (number)
226
+ (number))))))
227
+
@@ -0,0 +1,36 @@
1
+ {
2
+ "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/config.schema.json",
3
+ "grammars": [
4
+ {
5
+ "name": "rapydscript",
6
+ "camelcase": "RapydScript",
7
+ "scope": "source.rapydscript",
8
+ "path": ".",
9
+ "file-types": [
10
+ "pyj"
11
+ ],
12
+ "highlights": [
13
+ "queries/rapydscript/highlights.scm"
14
+ ],
15
+ "injection-regex": "^(rapydscript|pyj)$"
16
+ }
17
+ ],
18
+ "metadata": {
19
+ "version": "0.1.0",
20
+ "license": "BSD-2-Clause",
21
+ "description": "RapydScript grammar for tree-sitter",
22
+ "authors": [
23
+ {
24
+ "name": "rapydscript-ng contributors"
25
+ }
26
+ ]
27
+ },
28
+ "bindings": {
29
+ "c": false,
30
+ "go": false,
31
+ "node": true,
32
+ "python": false,
33
+ "rust": false,
34
+ "swift": false
35
+ }
36
+ }
package/web-repl/env.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /* vim:fileencoding=utf-8
2
- *
2
+ *
3
3
  * Copyright (C) 2016 Kovid Goyal <kovid at kovidgoyal.net>
4
4
  *
5
5
  * Distributed under terms of the BSD license
@@ -9,6 +9,39 @@ var namespace = {}, jsSHA = {};
9
9
 
10
10
  var write_cache = {};
11
11
 
12
+ async function readfile(name, encoding) {
13
+ if (name.startsWith('__vfs__/')) {
14
+ if (namespace.virtual_file_system && namespace.virtual_file_system.read_file) {
15
+ return namespace.virtual_file_system.read_file(name, encoding);
16
+ }
17
+ var err = new Error('ENOENT: no such file or directory: ' + name);
18
+ err.code = 'ENOENT';
19
+ throw err;
20
+ }
21
+ var data = write_cache[name];
22
+ if (data !== undefined) return data;
23
+ data = namespace.file_data[name];
24
+ if (data !== undefined) return data;
25
+ var err = new Error('ENOENT: no such file or directory: ' + name);
26
+ err.code = 'ENOENT';
27
+ throw err;
28
+ }
29
+
30
+ async function writefile(name, data) {
31
+ if (name.startsWith('__vfs__/') && namespace.virtual_file_system && namespace.virtual_file_system.write_file) {
32
+ return namespace.virtual_file_system.write_file(name, data);
33
+ }
34
+ write_cache[name] = data;
35
+ }
36
+
37
+ async function stat_file(name) {
38
+ if (name.startsWith('__vfs__/') && namespace.virtual_file_system && namespace.virtual_file_system.stat_file) {
39
+ return namespace.virtual_file_system.stat_file(name);
40
+ }
41
+ const content = await readfile(name, 'utf-8');
42
+ return { mtimeMs: null, content: content };
43
+ }
44
+
12
45
  var builtin_modules = {
13
46
  'crypto' : {
14
47
  'createHash': function create_hash() {
@@ -45,28 +78,7 @@ var builtin_modules = {
45
78
  },
46
79
  'inspect': function inspect(x) { return x.toString(); },
47
80
 
48
- 'fs': {
49
- 'readFileSync': function readfile(name) {
50
- if (namespace.virtual_file_system && namespace.virtual_file_system.read_file_sync) {
51
- data = namespace.virtual_file_system.read_file_sync(name);
52
- if (data !== null) return data;
53
- }
54
- var data = namespace.file_data[name];
55
- if (data) return data;
56
- data = write_cache[name];
57
- if (data) return data;
58
- var err = Error();
59
- err.code = 'ENOENT';
60
- throw err;
61
- },
62
-
63
- 'writeFileSync': function writefile(name, data) {
64
- if (namespace.virtual_file_system && namespace.virtual_file_system.write_file_sync) {
65
- namespace.virtual_file_system.write_file_sync(name, data);
66
- } else write_cache[name] = data;
67
- },
68
-
69
- },
81
+ 'fs': {},
70
82
  };
71
83
 
72
84
  function require(name) {
package/web-repl/main.js CHANGED
@@ -72,11 +72,11 @@
72
72
  output.lastChild.scrollIntoView();
73
73
  }
74
74
 
75
- function read_eval(code) {
75
+ async function read_eval(code) {
76
76
  var js, obj, text;
77
77
  hide_completions();
78
78
  try {
79
- js = compile(code);
79
+ js = await compile(code);
80
80
  } catch(e) {
81
81
  var text, line = null, col = null;
82
82
  if (e.message && e.line) {
@@ -98,11 +98,11 @@
98
98
  return false;
99
99
  }
100
100
 
101
- function run_code() {
101
+ async function run_code() {
102
102
  var input = document.getElementById('input');
103
103
  var code = input.value;
104
104
  input.value = '';
105
- if (code) read_eval(code);
105
+ if (code) await read_eval(code);
106
106
  document.getElementById('input').focus();
107
107
  }
108
108
 
@@ -183,14 +183,14 @@
183
183
  return a1.substr(0, i);
184
184
  }
185
185
 
186
- function on_input(ev) {
186
+ async function on_input(ev) {
187
187
  var input, source;
188
188
  var code = ev.keyCode || ev.which;
189
189
  if (code === 13 && !ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { // Enter
190
190
  input = document.getElementById('input');
191
191
  source = input.value;
192
192
  ev.preventDefault();
193
- if (web_repl.is_input_complete(source)) {
193
+ if (await web_repl.is_input_complete(source)) {
194
194
  setTimeout(run_code, 0);
195
195
  return;
196
196
  }
@@ -220,8 +220,8 @@
220
220
 
221
221
  }
222
222
 
223
- function on_load() {
224
- web_repl = RapydScript.web_repl();
223
+ async function on_load() {
224
+ web_repl = await RapydScript.web_repl();
225
225
  web_repl.replace_print(println);
226
226
  web_repl.init_completions(RapydScript.completer);
227
227
  document.getElementById('loading').style.display = 'none';
package/bin/export DELETED
@@ -1,75 +0,0 @@
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,102 +0,0 @@
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 = path.normalize('__stdlib__' + '/' + relpath + '/' + x);
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);