@makano/rew 1.1.7 → 1.1.9

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 (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);