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