@makano/rew 1.1.7 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. package/README.md +1 -1
  2. package/bin/ui +0 -0
  3. package/build.sh +3 -1
  4. package/lib/coffeescript/browser.js +144 -139
  5. package/lib/coffeescript/cake.js +132 -133
  6. package/lib/coffeescript/coffeescript.js +437 -381
  7. package/lib/coffeescript/command.js +806 -724
  8. package/lib/coffeescript/grammar.js +1908 -2474
  9. package/lib/coffeescript/helpers.js +509 -473
  10. package/lib/coffeescript/index.js +228 -215
  11. package/lib/coffeescript/lexer.js +2282 -1909
  12. package/lib/coffeescript/nodes.js +9782 -9202
  13. package/lib/coffeescript/optparse.js +255 -227
  14. package/lib/coffeescript/parser.js +20305 -1265
  15. package/lib/coffeescript/register.js +107 -87
  16. package/lib/coffeescript/repl.js +307 -284
  17. package/lib/coffeescript/rewriter.js +1389 -1079
  18. package/lib/coffeescript/scope.js +176 -172
  19. package/lib/coffeescript/sourcemap.js +242 -227
  20. package/lib/rew/cli/cli.js +245 -186
  21. package/lib/rew/cli/log.js +31 -32
  22. package/lib/rew/cli/run.js +10 -12
  23. package/lib/rew/cli/utils.js +248 -175
  24. package/lib/rew/const/config_path.js +4 -0
  25. package/lib/rew/const/default.js +38 -35
  26. package/lib/rew/const/files.js +9 -9
  27. package/lib/rew/const/opt.js +8 -8
  28. package/lib/rew/css/theme.css +2 -2
  29. package/lib/rew/functions/core.js +55 -57
  30. package/lib/rew/functions/curl.js +23 -0
  31. package/lib/rew/functions/emitter.js +52 -55
  32. package/lib/rew/functions/exec.js +25 -21
  33. package/lib/rew/functions/export.js +18 -20
  34. package/lib/rew/functions/fs.js +55 -54
  35. package/lib/rew/functions/future.js +29 -21
  36. package/lib/rew/functions/id.js +8 -9
  37. package/lib/rew/functions/import.js +104 -93
  38. package/lib/rew/functions/map.js +13 -16
  39. package/lib/rew/functions/match.js +35 -26
  40. package/lib/rew/functions/path.js +8 -8
  41. package/lib/rew/functions/require.js +32 -33
  42. package/lib/rew/functions/sleep.js +2 -2
  43. package/lib/rew/functions/stdout.js +20 -20
  44. package/lib/rew/functions/types.js +96 -95
  45. package/lib/rew/html/ui.html +12 -13
  46. package/lib/rew/html/ui.js +205 -168
  47. package/lib/rew/main.js +14 -14
  48. package/lib/rew/misc/findAppInfo.js +16 -0
  49. package/lib/rew/misc/findAppPath.js +21 -0
  50. package/lib/rew/misc/seededid.js +13 -0
  51. package/lib/rew/models/enum.js +12 -12
  52. package/lib/rew/models/struct.js +30 -32
  53. package/lib/rew/modules/compiler.js +228 -177
  54. package/lib/rew/modules/context.js +35 -22
  55. package/lib/rew/modules/fs.js +10 -10
  56. package/lib/rew/modules/runtime.js +17 -21
  57. package/lib/rew/modules/yaml.js +27 -30
  58. package/lib/rew/pkgs/conf.js +82 -75
  59. package/lib/rew/pkgs/data.js +12 -7
  60. package/lib/rew/pkgs/date.js +27 -28
  61. package/lib/rew/pkgs/env.js +6 -8
  62. package/lib/rew/pkgs/modules/data/bintree.js +52 -52
  63. package/lib/rew/pkgs/modules/data/doublylinked.js +85 -85
  64. package/lib/rew/pkgs/modules/data/linkedList.js +73 -73
  65. package/lib/rew/pkgs/modules/data/queue.js +19 -20
  66. package/lib/rew/pkgs/modules/data/stack.js +19 -19
  67. package/lib/rew/pkgs/modules/threads/worker.js +36 -26
  68. package/lib/rew/pkgs/modules/ui/classes.js +182 -178
  69. package/lib/rew/pkgs/pkgs.js +9 -10
  70. package/lib/rew/pkgs/rune.js +422 -0
  71. package/lib/rew/pkgs/threads.js +57 -53
  72. package/lib/rew/pkgs/ui.js +148 -136
  73. package/meson.build +13 -0
  74. package/package.json +9 -2
@@ -8,198 +8,257 @@ const { watch } = require('chokidar');
8
8
  const utils = require('./utils');
9
9
  const { existsSync, readFileSync, writeFileSync, mkdirSync } = require('fs');
10
10
  const { log } = require('./log');
11
- const { compileFile, compile } = require('../modules/compiler');
11
+ const { compile } = require('../modules/compiler');
12
+ const crypto = require('crypto');
13
+ const { CONFIG_PATH } = require('../const/config_path');
14
+
15
+ if(!existsSync(CONFIG_PATH)){
16
+ mkdirSync(CONFIG_PATH, { recursive: true });
17
+ utils.initFirst();
18
+ }
12
19
 
13
20
  yargs(hideBin(process.argv))
14
- .command(
15
- '$0 <file>',
16
- 'Run the specified file',
17
- (yargs) => {
18
- yargs
19
- .positional('file', {
20
- describe: 'File to run',
21
- type: 'string',
22
- })
23
- .option('watch', {
24
- alias: 'w',
25
- describe: 'Watch the file for changes',
26
- type: 'boolean',
27
- });
28
- },
29
- (argv) => {
30
- const filePath = path.resolve(process.cwd(), argv.file);
31
- if(!existsSync(filePath)){
32
- log('File not found:', argv.file, ':end');
33
- return;
34
- }
35
- const watching = [];
36
- const watchIt = (file) => {
37
- if(watching.includes(file)) return;
38
- watch(file).on('change', () => runIt());
39
- watching.push(file);
40
- }
41
- let prevFork;
42
- const runIt = () => {
43
- if(argv.watch) console.clear();
44
- if(prevFork && !prevFork.killed) prevFork.kill?.();
45
- prevFork = fork(path.resolve(__dirname, './run.js'))
46
- .on('message', (data) => {
47
- if(argv.watch){
48
- data.forEach(file => {
49
- watchIt(file);
50
- });
51
- }
52
- }).send({ filePath, watch: argv.watch });
53
- if(argv.watch) watchIt(filePath);
54
- }
55
- runIt();
56
- }
57
- )
58
- .command(
59
- 'conf <command> [path] [key] [value]',
60
- 'Configuration management',
61
- (yargs) => {
62
- yargs
63
- .positional('command', {
64
- describe: 'Configuration command (get, set, remove)',
65
- type: 'string',
66
- choices: ['get', 'set', 'remove'],
67
- })
68
- .positional('path', {
69
- describe: 'Configuration path',
70
- type: 'string',
71
- default: '',
72
- })
73
- .positional('key', {
74
- describe: 'Key to get/set/remove',
75
- type: 'string',
76
- default: '',
77
- })
78
- .positional('value', {
79
- describe: 'Value to set (only used with "set" command)',
80
- type: 'string',
81
- default: '',
82
- });
83
- },
84
- (argv) => {
85
- const { command, path, key, value } = argv;
86
- const result = utils.conf(command, path, key, value);
87
- if(result) console.log(result);
88
- }
89
- )
90
- .command('create <path>', 'Create a new project', (yargs) => {
91
- yargs
92
- .positional('path', {
93
- describe: 'Path of the project to create',
94
- type: 'string',
95
- });
96
- },
97
- (argv) => {
98
- utils.createProject(argv.path);
99
- }
100
- )
101
- .command('ui-bin <path>', 'Build the UI bin for your own app', (yargs) => {
102
- yargs
103
- .positional('path', {
104
- describe: 'Path of the output bin',
105
- type: 'string',
106
- });
107
- },
108
- (argv) => {
109
- execSync('sh '+path.resolve(__dirname, '../../../build.sh')+' '+argv.path);
110
- }
111
- )
112
- .command('run <path | package>', 'Run an app', (yargs) => {
113
- yargs
114
- .positional('path', {
115
- describe: 'Path of the app to run',
116
- type: 'string',
117
- });
118
- },
119
- (argv) => {
120
- utils.runApp(argv.path);
121
- }
122
- )
123
- .command('install <path>', 'Install an app', (yargs) => {
124
- yargs
125
- .positional('path', {
126
- describe: 'Path of the app to install',
127
- type: 'string',
128
- });
129
- },
130
- async (argv) => {
131
- if(argv.path.startsWith('github:')) utils.installApp(await utils.cloneGit(argv.path), true, true);
132
- else utils.installApp(argv.path);
133
- }
134
- )
135
- .command('build <file>', 'Build the specified file', (yargs) => {
136
- yargs
137
- .positional('file', {
138
- describe: 'File to build',
139
- type: 'string',
140
- })
141
- .option('output', {
142
- alias: 'o',
143
- describe: 'Output directory',
144
- type: 'string',
145
- });
146
- }, (argv) => {
21
+ .command(
22
+ '$0 <file>',
23
+ 'Run the specified file',
24
+ (yargs) => {
25
+ yargs
26
+ .positional('file', {
27
+ describe: 'File to run',
28
+ type: 'string',
29
+ })
30
+ .option('watch', {
31
+ alias: 'w',
32
+ describe: 'Watch the file for changes',
33
+ type: 'boolean',
34
+ });
35
+ },
36
+ (argv) => {
37
+ const filePath = path.resolve(process.cwd(), argv.file);
38
+ if (!existsSync(filePath)) {
39
+ log('File not found:', argv.file, ':end');
40
+ return;
41
+ }
42
+ const watching = [];
43
+ const watchIt = (file) => {
44
+ if (watching.includes(file)) return;
45
+ watch(file).on('change', () => runIt());
46
+ watching.push(file);
47
+ };
48
+ let prevFork;
49
+ const runIt = () => {
50
+ if (argv.watch) console.clear();
51
+ if (prevFork && !prevFork.killed) prevFork.kill?.();
52
+ prevFork = fork(path.resolve(__dirname, './run.js'))
53
+ .on('message', (data) => {
54
+ if (argv.watch) {
55
+ data.forEach((file) => {
56
+ watchIt(file);
57
+ });
58
+ }
59
+ })
60
+ .send({ filePath, watch: argv.watch });
61
+ if (argv.watch) watchIt(filePath);
62
+ };
63
+ runIt();
64
+ },
65
+ )
66
+ .command(
67
+ 'conf <command> [path] [key] [value]',
68
+ 'Configuration management',
69
+ (yargs) => {
70
+ yargs
71
+ .positional('command', {
72
+ describe: 'Configuration command (get, set, remove)',
73
+ type: 'string',
74
+ choices: ['get', 'set', 'remove'],
75
+ })
76
+ .positional('path', {
77
+ describe: 'Configuration path',
78
+ type: 'string',
79
+ default: '',
80
+ })
81
+ .positional('key', {
82
+ describe: 'Key to get/set/remove',
83
+ type: 'string',
84
+ default: '',
85
+ })
86
+ .positional('value', {
87
+ describe: 'Value to set (only used with "set" command)',
88
+ type: 'string',
89
+ default: '',
90
+ });
91
+ },
92
+ (argv) => {
93
+ const { command, path, key, value } = argv;
94
+ const result = utils.conf(command, path, key, value);
95
+ if (result) console.log(result);
96
+ },
97
+ )
98
+ .command(
99
+ 'create <path>',
100
+ 'Create a new project',
101
+ (yargs) => {
102
+ yargs.positional('path', {
103
+ describe: 'Path of the project to create',
104
+ type: 'string',
105
+ });
106
+ },
107
+ (argv) => {
108
+ utils.createProject(argv.path);
109
+ },
110
+ )
111
+ .command(
112
+ 'rune-keygen <secret>',
113
+ 'Generate a rune encryption key',
114
+ (yargs) => {
115
+ yargs.option('secret', {
116
+ describe: 'Secret used to generate encryption key',
117
+ type: 'string',
118
+ });
119
+ },
120
+ (argv) => {
121
+ const generateEncryptionKey = (secret) => {
122
+ if (secret) {
123
+ return crypto.createHash('sha256').update(secret).digest('hex');
124
+ } else {
125
+ return crypto.randomBytes(32).toString('hex');
126
+ }
127
+ };
147
128
 
148
- function readFile(filePath) {
149
- return readFileSync(filePath, { encoding: 'utf-8' });
150
- }
129
+ const encryptionKey = generateEncryptionKey(argv.secret);
130
+ console.log('Encryption Key:', encryptionKey);
131
+ },
132
+ )
133
+ .command(
134
+ 'ui-bin <path>',
135
+ 'Build the UI bin for your own app',
136
+ (yargs) => {
137
+ yargs.positional('path', {
138
+ describe: 'Path of the output bin',
139
+ type: 'string',
140
+ });
141
+ },
142
+ (argv) => {
143
+ execSync('sh ' + path.resolve(__dirname, '../../../build.sh') + ' ' + argv.path);
144
+ },
145
+ )
146
+ .command(
147
+ 'run <path | package>',
148
+ 'Run an app',
149
+ (yargs) => {
150
+ yargs.positional('path', {
151
+ describe: 'Path of the app to run',
152
+ type: 'string',
153
+ });
154
+ },
155
+ (argv) => {
156
+ utils.runApp(argv.path);
157
+ },
158
+ )
159
+ .command(
160
+ 'install <path>',
161
+ 'Install an app',
162
+ (yargs) => {
163
+ yargs.positional('path', {
164
+ describe: 'Path of the app to install',
165
+ type: 'string',
166
+ });
167
+ },
168
+ async (argv) => {
169
+ utils.installAppFrom(argv.path);
170
+ },
171
+ )
172
+ .command(
173
+ 'repo <command> [name] [url]',
174
+ 'Manage install repositories',
175
+ (yargs) => {
176
+ yargs.positional('command', {
177
+ describe: 'Command to add/remove/set',
178
+ type: 'string',
179
+ });
180
+ yargs.positional('name', {
181
+ describe: 'name of the repo',
182
+ type: 'string',
183
+ });
184
+ yargs.positional('url', {
185
+ describe: 'url of the repo',
186
+ type: 'string',
187
+ });
188
+ },
189
+ async (argv) => {
190
+ utils.repo(argv.command, argv.name, argv.url);
191
+ },
192
+ )
193
+ .command(
194
+ 'build <file>',
195
+ 'Build the specified file',
196
+ (yargs) => {
197
+ yargs
198
+ .positional('file', {
199
+ describe: 'File to build',
200
+ type: 'string',
201
+ })
202
+ .option('output', {
203
+ alias: 'o',
204
+ describe: 'Output directory',
205
+ type: 'string',
206
+ });
207
+ },
208
+ (argv) => {
209
+ function readFile(filePath) {
210
+ return readFileSync(filePath, { encoding: 'utf-8' });
211
+ }
151
212
 
152
- function extractImports(content) {
153
- const importRegex = /(\w+)\s*=\s*imp\s*['"](.+?)['"]/g;
154
- const imports = [];
155
- let match;
156
- while ((match = importRegex.exec(content)) !== null) {
157
- imports.push({ variable: match[1], url: match[2] });
158
- }
159
- return imports;
160
- }
213
+ function extractImports(content) {
214
+ const importRegex = /(\w+)\s*=\s*imp\s*['"](.+?)['"]/g;
215
+ const imports = [];
216
+ let match;
217
+ while ((match = importRegex.exec(content)) !== null) {
218
+ imports.push({ variable: match[1], url: match[2] });
219
+ }
220
+ return imports;
221
+ }
161
222
 
162
- function writeCompiledFile(filePath, compiledCode) {
163
- const dirName = outputDir ? outputDir : path.dirname(filePath);
164
- if(!existsSync(dirName)) mkdirSync(dirName, { recursive: true });
165
- const baseName = path.basename(filePath, path.extname(filePath));
166
- const newFilePath = path.join(dirName, `${baseName}.js`);
167
- writeFileSync(newFilePath, compiledCode, { encoding: 'utf-8' });
168
- log(`Compiled: ${newFilePath}`);
169
- }
223
+ function writeCompiledFile(filePath, compiledCode) {
224
+ const dirName = outputDir ? outputDir : path.dirname(filePath);
225
+ if (!existsSync(dirName)) mkdirSync(dirName, { recursive: true });
226
+ const baseName = path.basename(filePath, path.extname(filePath));
227
+ const newFilePath = path.join(dirName, `${baseName}.js`);
228
+ writeFileSync(newFilePath, compiledCode, { encoding: 'utf-8' });
229
+ log(`Compiled: ${newFilePath}`);
230
+ }
170
231
 
171
- function processFile(filePath, importsArray) {
172
- const content = readFile(filePath);
173
- const imports = extractImports(content);
174
-
175
- imports.forEach(importStatement => {
176
- const importedFilePath = path.resolve(path.dirname(filePath), importStatement.url);
177
- if (!importsArray.some(importObj => importObj.url === importStatement.url)) {
178
-
179
- if(existsSync(importedFilePath)){
180
- importsArray.push(importStatement);
181
- processFile(importedFilePath, importsArray);
182
- } else if(existsSync(importedFilePath+'.coffee')){
183
- importsArray.push(importStatement);
184
- processFile(importedFilePath+'.coffee', importsArray);
185
- } else if(existsSync(importedFilePath+'.js')){
186
- importsArray.push(importStatement);
187
- processFile(importedFilePath+'.js', importsArray);
188
- }
232
+ function processFile(filePath, importsArray) {
233
+ const content = readFile(filePath);
234
+ const imports = extractImports(content);
189
235
 
190
- }
191
- });
236
+ imports.forEach((importStatement) => {
237
+ const importedFilePath = path.resolve(path.dirname(filePath), importStatement.url);
238
+ if (!importsArray.some((importObj) => importObj.url === importStatement.url)) {
239
+ if (existsSync(importedFilePath)) {
240
+ importsArray.push(importStatement);
241
+ processFile(importedFilePath, importsArray);
242
+ } else if (existsSync(importedFilePath + '.coffee')) {
243
+ importsArray.push(importStatement);
244
+ processFile(importedFilePath + '.coffee', importsArray);
245
+ } else if (existsSync(importedFilePath + '.js')) {
246
+ importsArray.push(importStatement);
247
+ processFile(importedFilePath + '.js', importsArray);
248
+ }
249
+ }
250
+ });
192
251
 
193
- const compiled = compile({ content }, {});
194
- writeCompiledFile(filePath, compiled);
195
- }
252
+ const compiled = compile({ content }, {});
253
+ writeCompiledFile(filePath, compiled);
254
+ }
196
255
 
197
- const filePath = path.resolve(process.cwd(), argv.file);
198
- const importsArray = [];
199
- const outputDir = argv.output ? path.resolve(process.cwd(), argv.output) : null;
200
- log('Start compile at', outputDir || 'default path');
201
- processFile(filePath, importsArray);
202
- log('Compiled', importsArray.length + 1, 'files.', ':end');
203
- })
204
- .help()
205
- .argv;
256
+ const filePath = path.resolve(process.cwd(), argv.file);
257
+ const importsArray = [];
258
+ const outputDir = argv.output ? path.resolve(process.cwd(), argv.output) : null;
259
+ log('Start compile at', outputDir || 'default path');
260
+ processFile(filePath, importsArray);
261
+ log('Compiled', importsArray.length + 1, 'files.', ':end');
262
+ },
263
+ )
264
+ .help().argv;
@@ -1,40 +1,39 @@
1
-
2
1
  let start = true;
3
- const startPrefix = '╭';
2
+ const startPrefix = '╭';
4
3
  const middlePrefix = '├';
5
- const separator = '│';
6
- const endPrefix = '╰';
4
+ const separator = '│';
5
+ const endPrefix = '╰';
7
6
 
8
- const log = module.exports.log = function(...toPrint){
9
- let prefix = start ? startPrefix : middlePrefix;
10
- let returns = false;
11
- if(toPrint[toPrint.length-1] == ':end') {
12
- prefix = endPrefix;
13
- toPrint.pop();
14
- }
15
- if(toPrint[toPrint.length-1] == ':returns') {
16
- returns = true;
17
- toPrint.pop();
18
- }
19
- if(prefix == endPrefix && start) prefix = separator;
20
- if(!start) console.log(separator);
21
- if(start) start = false;
22
- if(returns) return [prefix, ...toPrint].join(' ');
23
- else console.log(prefix, ...toPrint);
24
- }
7
+ const log = (module.exports.log = function (...toPrint) {
8
+ let prefix = start ? startPrefix : middlePrefix;
9
+ let returns = false;
10
+ if (toPrint[toPrint.length - 1] == ':end') {
11
+ prefix = endPrefix;
12
+ toPrint.pop();
13
+ }
14
+ if (toPrint[toPrint.length - 1] == ':returns') {
15
+ returns = true;
16
+ toPrint.pop();
17
+ }
18
+ if (prefix == endPrefix && start) prefix = separator;
19
+ if (!start) console.log(separator);
20
+ if (start) start = false;
21
+ if (returns) return [prefix, ...toPrint].join(' ');
22
+ else console.log(prefix, ...toPrint);
23
+ });
25
24
 
26
- module.exports.logget = function(...toPrint){
27
- let args = [...toPrint];
28
- if(toPrint[toPrint.length-1] == ':end') {
29
- let l = args.pop();
30
- args.push(':returns', l);
31
- } else {
32
- args.push(':returns');
33
- }
34
- return log(...args);
35
- }
25
+ module.exports.logget = function (...toPrint) {
26
+ let args = [...toPrint];
27
+ if (toPrint[toPrint.length - 1] == ':end') {
28
+ let l = args.pop();
29
+ args.push(':returns', l);
30
+ } else {
31
+ args.push(':returns');
32
+ }
33
+ return log(...args);
34
+ };
36
35
 
37
36
  log.startPrefix = startPrefix;
38
37
  log.middlePrefix = middlePrefix;
39
38
  log.separator = separator;
40
- log.endPrefix = endPrefix;
39
+ log.endPrefix = endPrefix;
@@ -1,17 +1,15 @@
1
1
  const { run } = require('../main');
2
2
 
3
-
4
- function exec(filePath){
5
- return run(filePath)
6
- .context.module.imports;
3
+ function exec(filePath) {
4
+ return run(filePath).context.module.imports;
7
5
  }
8
6
 
9
7
  const onmsg = ({ filePath, watch }) => {
10
- const imports = exec(filePath);
11
- if(watch){
12
- process.send(imports);
13
- }
14
- process.off('message', onmsg);
15
- }
16
-
17
- process.on('message', onmsg);
8
+ const imports = exec(filePath);
9
+ if (watch) {
10
+ process.send(imports);
11
+ }
12
+ process.off('message', onmsg);
13
+ };
14
+
15
+ process.on('message', onmsg);