@makano/rew 1.2.4 → 1.2.6

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 (43) hide show
  1. package/lib/civet/main.js +17239 -0
  2. package/lib/rew/cli/cli.js +57 -5
  3. package/lib/rew/cli/log.js +5 -1
  4. package/lib/rew/cli/run.js +2 -2
  5. package/lib/rew/cli/utils.js +147 -60
  6. package/lib/rew/const/default.js +5 -1
  7. package/lib/rew/const/ext.js +5 -0
  8. package/lib/rew/const/opt.js +7 -2
  9. package/lib/rew/const/usage.js +15 -0
  10. package/lib/rew/functions/exec.js +2 -2
  11. package/lib/rew/functions/export.js +1 -1
  12. package/lib/rew/functions/fs.js +6 -1
  13. package/lib/rew/functions/id.js +2 -2
  14. package/lib/rew/functions/import.js +34 -13
  15. package/lib/rew/functions/require.js +17 -1
  16. package/lib/rew/functions/stdout.js +4 -0
  17. package/lib/rew/main.js +1 -13
  18. package/lib/rew/modules/compiler.js +122 -26
  19. package/lib/rew/modules/context.js +13 -1
  20. package/lib/rew/modules/runtime.js +37 -20
  21. package/lib/rew/pkgs/conf.js +1 -1
  22. package/lib/rew/pkgs/rune.js +8 -1
  23. package/lib/rew/pkgs/serve.js +373 -0
  24. package/lib/rew/pkgs/stream.js +10 -0
  25. package/lib/rew/pkgs/web.js +504 -0
  26. package/package.json +10 -5
  27. package/runtime.d.ts +943 -0
  28. package/lib/coffeescript/browser.js +0 -156
  29. package/lib/coffeescript/cake.js +0 -134
  30. package/lib/coffeescript/coffeescript.js +0 -465
  31. package/lib/coffeescript/command.js +0 -832
  32. package/lib/coffeescript/grammar.js +0 -1930
  33. package/lib/coffeescript/helpers.js +0 -513
  34. package/lib/coffeescript/index.js +0 -230
  35. package/lib/coffeescript/lexer.js +0 -2316
  36. package/lib/coffeescript/nodes.js +0 -9784
  37. package/lib/coffeescript/optparse.js +0 -258
  38. package/lib/coffeescript/parser.js +0 -20384
  39. package/lib/coffeescript/register.js +0 -120
  40. package/lib/coffeescript/repl.js +0 -328
  41. package/lib/coffeescript/rewriter.js +0 -1448
  42. package/lib/coffeescript/scope.js +0 -191
  43. package/lib/coffeescript/sourcemap.js +0 -244
@@ -5,7 +5,7 @@ const path = require('path');
5
5
  const { hideBin } = require('yargs/helpers');
6
6
  const { execSync } = require('child_process');
7
7
  const utils = require('./utils');
8
- const { existsSync, readFileSync, writeFileSync, mkdirSync, statSync } = require('fs');
8
+ const { existsSync, readFileSync, writeFileSync, mkdirSync, statSync, unlinkSync } = require('fs');
9
9
  const { log } = require('./log');
10
10
  const os = require('os');
11
11
  const crypto = require('crypto');
@@ -17,6 +17,8 @@ const { print, input } = require('../functions/stdout');
17
17
  const colors = require('colors');
18
18
  const { req } = require('../misc/req');
19
19
  const { gen_key } = require('../misc/bin');
20
+ const { REW_FILE_TYPE } = require('../const/ext');
21
+ const { generateRandomID } = require('../functions/id');
20
22
 
21
23
  if (!existsSync(CONFIG_PATH) || !existsSync(CONFIG_PATH + '/repos.yaml')) {
22
24
  mkdirSync(CONFIG_PATH, { recursive: true });
@@ -48,6 +50,11 @@ yargs(hideBin(process.argv))
48
50
  alias: 'w',
49
51
  describe: 'Watch the file for changes',
50
52
  type: 'boolean',
53
+ })
54
+ .option('compile', {
55
+ alias: 'c',
56
+ describe: 'Compile and output the javascript',
57
+ type: 'boolean',
51
58
  });
52
59
  },
53
60
  (argv) => {
@@ -56,8 +63,35 @@ yargs(hideBin(process.argv))
56
63
  log('File not found:'.red.bold, argv.file, ':end');
57
64
  return;
58
65
  }
59
- utils.runFileWithArgv(filePath, { watch: argv.watch });
66
+ utils.runFileWithArgv(filePath, { async: !process.stdin.isTTY, onlyCompile: argv.compile, watch: argv.watch });
67
+ },
68
+ )
69
+ .command(
70
+ 'exec [code]',
71
+ 'Executes in REPL',
72
+ (yargs) => {
73
+ yargs
74
+ .option('compile', {
75
+ alias: 'c',
76
+ describe: 'Compile and output the javascript',
77
+ type: 'boolean',
78
+ });
60
79
  },
80
+ async (argv) => {
81
+ const replFile = '/tmp/rew-'+generateRandomID()+'-'+Date.now()+'.coffee';
82
+ let code = argv.code;
83
+ if(!process.stdin.isTTY) {
84
+ code = await utils.getAllPipeInput();
85
+ }
86
+ writeFileSync(replFile, code);
87
+ try{
88
+ utils.runFileWithArgv(replFile, { async: !process.stdin.isTTY, onlyCompile: argv.compile });
89
+ } catch(e){
90
+ console.error(e);
91
+ } finally {
92
+ unlinkSync(replFile);
93
+ }
94
+ }
61
95
  )
62
96
  .command(
63
97
  'conf <command> [path] [key] [value]',
@@ -122,7 +156,7 @@ yargs(hideBin(process.argv))
122
156
  type: 'string',
123
157
  })
124
158
  .option('dev', {
125
- describe: 'If your entry file is a .qrew, then just use the .coffee instead',
159
+ describe: `If your entry file is a .qrew, then just use .coffe or ${REW_FILE_TYPE.EXTENSION} instead`,
126
160
  type: 'boolean',
127
161
  })
128
162
  .option('entry', {
@@ -223,6 +257,10 @@ yargs(hideBin(process.argv))
223
257
  alias: 'r',
224
258
  describe: 'Install requirements of the app',
225
259
  type: 'boolean',
260
+ }).option('verbose', {
261
+ alias: 'v',
262
+ describe: 'Verbose',
263
+ type: 'boolean',
226
264
  }).option('update', {
227
265
  alias: 'u',
228
266
  describe: 'Update the app',
@@ -280,6 +318,20 @@ yargs(hideBin(process.argv))
280
318
  }
281
319
  },
282
320
  )
321
+
322
+ .command(
323
+ 'cache <command>',
324
+ 'Manage cache',
325
+ (yargs) => {
326
+ yargs.positional('command', {
327
+ describe: 'Command to clear/list',
328
+ type: 'string',
329
+ });
330
+ },
331
+ async (argv) => {
332
+ utils.cache(argv.command)
333
+ },
334
+ )
283
335
  .command(
284
336
  'repo <command> [name] [url]',
285
337
  'Manage install repositories',
@@ -331,7 +383,7 @@ yargs(hideBin(process.argv))
331
383
  })
332
384
  .option('remove', {
333
385
  alias: 'r',
334
- describe: 'Remove all coffee',
386
+ describe: 'Remove all .coffee and '+REW_FILE_TYPE.EXTENSION,
335
387
  type: 'boolean',
336
388
  });
337
389
  },
@@ -339,4 +391,4 @@ yargs(hideBin(process.argv))
339
391
  utils.build(argv);
340
392
  },
341
393
  )
342
- .help(!isFileGiven).argv;
394
+ .help(!isFileGiven).argv;
@@ -4,6 +4,8 @@ const middlePrefix = '├';
4
4
  const separator = '│';
5
5
  const endPrefix = '╰';
6
6
 
7
+ let last = '';
8
+
7
9
  const log = (module.exports.log = function (...toPrint) {
8
10
  let prefix = start ? startPrefix : middlePrefix;
9
11
  let returns = false;
@@ -16,8 +18,10 @@ const log = (module.exports.log = function (...toPrint) {
16
18
  toPrint.pop();
17
19
  }
18
20
  if (prefix == endPrefix && start) prefix = separator;
19
- if (!start) console.log(separator);
21
+ // if(last == endPrefix && prefix == separator) prefix = startPrefix;
22
+ if (!start) console.log(last == endPrefix ? startPrefix : separator);
20
23
  if (start) start = false;
24
+ last = prefix;
21
25
  if (returns) return [prefix, ...toPrint].join(' ');
22
26
  else console.log(prefix, ...toPrint);
23
27
  });
@@ -1,8 +1,8 @@
1
1
  // run.js
2
2
  const { run } = require('../main');
3
3
 
4
- function exec(filePath, argv) {
5
- return run(filePath, { argv })?.context?.module?.imports || [];
4
+ function exec(filePath, argv, options = {}) {
5
+ return run(filePath, { argv, ...options })?.context?.module?.imports || [];
6
6
  }
7
7
 
8
8
  module.exports = { execRewFile: exec };
@@ -14,9 +14,15 @@ const { req } = require('../misc/req');
14
14
  const { CONFIG_PATH } = require('../const/config_path');
15
15
  const { watch } = require('chokidar');
16
16
  const { execRewFile } = require('./run');
17
+ const { seededID } = require('../misc/seededid');
18
+ const loading = require('loading-cli');
19
+ const sleep = require('../functions/sleep');
20
+ const { gen_key } = require('../misc/bin');
21
+ const { REW_FILE_TYPE } = require('../const/ext');
17
22
 
18
23
  const binpath = path.join(conf({}).create('').root, '.bin');
19
24
  const logspath = path.join(conf({}).create('').root, '.logs');
25
+ const cachepath = path.join(conf({}).create('').root, '.cache');
20
26
  const localBinPath = path.join(binpath, '../../../', 'bin');
21
27
 
22
28
  module.exports = {
@@ -30,7 +36,7 @@ module.exports = {
30
36
 
31
37
  const runIt = () => {
32
38
  if (options.watch) console.clear();
33
- const imports = execRewFile(filePath, [filePath, ...(argv || [])]);
39
+ const imports = execRewFile(filePath, [filePath, ...(argv || [])], { onlyCompile: options?.onlyCompile, async: options?.async });
34
40
  if (options.watch) {
35
41
  imports.forEach((file) => {
36
42
  watchIt(file);
@@ -42,15 +48,21 @@ module.exports = {
42
48
  runIt();
43
49
  },
44
50
  runFileWithArgv(filePath, options = {}, cargv) {
45
- const argv = cargv || process.argv;
51
+ let argv = cargv || process.argv;
46
52
  argv.shift();
47
- if (argv[0].endsWith('rew')) {
53
+ if (argv[0].endsWith(REW_FILE_TYPE.EXTENSION) || argv[0].endsWith('.coffee')) {
48
54
  if (argv[1] == 'run') {
49
55
  argv.splice(0, 3);
50
56
  } else if(argv[1] == '-w' || argv[1] == '--watch'){
51
57
  argv.splice(0, 3);
52
58
  } else argv.splice(0, 2);
53
59
  }
60
+ if (argv[1] == 'exec') {
61
+ argv.splice(0, 2);
62
+ }
63
+ if (argv.includes('--')) {
64
+ argv = argv.slice(argv.indexOf('--') + 1, argv.length);
65
+ }
54
66
  this.runFile(filePath, options, argv)
55
67
  },
56
68
  conf(command, fullPath, key, value) {
@@ -59,15 +71,19 @@ module.exports = {
59
71
  if (!fullPath || fullPath == 'list') {
60
72
  return fs.readdirSync(con.CONFIG_PATH).join('\n');
61
73
  } else {
62
- const name = fullPath.indexOf('/') ? fullPath.split('/')[0] : fullPath;
63
- const dpath = fullPath.indexOf('/') ? fullPath.split('/').slice(1).join('/') : '';
74
+ let name = fullPath.indexOf('/') ? fullPath.split('/')[0] : fullPath;
75
+ let dpath = fullPath.indexOf('/') ? fullPath.split('/').slice(1).join('/') : '';
76
+ if(fullPath.startsWith('/')){
77
+ dpath = name;
78
+ name = '';
79
+ }
64
80
  const root = con.create(name);
65
81
  if (dpath) {
66
82
  const fp = path.join(root.root, dpath);
67
- if (fs.existsSync(fp) && fs.statSync(fp).isDirectory()) {
83
+ if (!fullPath.startsWith('/') && fs.existsSync(fp) && fs.statSync(fp).isDirectory()) {
68
84
  return fs.readdirSync(fp).join('\n');
69
85
  } else {
70
- const o = con.create(name).optionCenter(dpath);
86
+ const o = dpath && dpath !== '/' ? root.optionCenter(dpath) : root.optionCenter('_default');
71
87
  return key ? o.get(key) : o.getAll(true);
72
88
  }
73
89
  } else {
@@ -75,14 +91,18 @@ module.exports = {
75
91
  }
76
92
  }
77
93
  } else {
78
- const name = fullPath.indexOf('/') ? fullPath.split('/')[0] : fullPath;
79
- const dpath = fullPath.indexOf('/') ? fullPath.split('/')[1] : '';
80
- if (name && key) {
94
+ let name = fullPath.indexOf('/') ? fullPath.split('/')[0] : fullPath;
95
+ let dpath = fullPath.indexOf('/') ? fullPath.split('/')[1] : '';
96
+ if(fullPath.startsWith('/')){
97
+ dpath = name == '/' ? '_default' : name;
98
+ name = '';
99
+ }
100
+ if (key) {
81
101
  const root = con.create(name);
82
102
  const o = dpath ? root.optionCenter(dpath) : root;
83
103
  if (command == 'set') {
84
104
  if (value) {
85
- o.set(key, value);
105
+ o.set(key, value == 'false' || value == 'true' ? (value == 'true' ? true : false) : !isNaN(parseFloat(value)) ? parseFloat(value) : value);
86
106
  } else {
87
107
  log('Value not specified', ':end');
88
108
  }
@@ -90,7 +110,7 @@ module.exports = {
90
110
  o.remove(key);
91
111
  }
92
112
  } else {
93
- log(!name ? 'Path not specified' : 'Key not specified', ':end');
113
+ log('Key not specified', ':end');
94
114
  }
95
115
  }
96
116
  },
@@ -105,15 +125,23 @@ module.exports = {
105
125
  const create = () => {
106
126
  fs.mkdirSync(projectPath, { recursive: true });
107
127
  const confPath = path.join(projectPath, 'app.yaml');
108
- const entryFile = path.join(projectPath, 'main.coffee');
109
- fs.writeFileSync(confPath, jsYaml.dump({ manifest: { package: project.package, private: false }, exec: { entry: 'main.coffee' }, assets: { icon: 'assets/icon.png', folder: './assets' }, install: { requirements: [] } }));
128
+ const entryFile = path.join(projectPath, 'main'+(project.civet ? REW_FILE_TYPE.EXTENSION : '.coffee'));
129
+ fs.writeFileSync(confPath, jsYaml.dump({ manifest: { package: project.package, private: false }, exec: { entry: 'main'+(project.civet ? REW_FILE_TYPE.EXTENSION : '.coffee') }, assets: { icon: 'assets/icon.png', folder: './assets' }, install: { requirements: [] } }));
110
130
  fs.writeFileSync(entryFile, `print("Hello World!")`);
111
131
  fs.mkdirSync(path.join(projectPath, 'assets'), { recursive: true });
112
132
  if (project.git) {
113
133
  fs.writeFileSync(path.join(projectPath, '.gitignore'), `node_modules/\npackage-lock.json`);
114
134
  execSync('cd ' + projectPath + ' && git init . && git branch -m main', { stdio: 'ignore' });
115
135
  }
136
+ if(project.intellisense){
137
+ fs.copyFileSync(path.join(__dirname, '../../../tsconfig.json'), path.join(projectPath, 'tsconfig.json'));
138
+ fs.copyFileSync(path.join(__dirname, '../../../runtime.d.ts'), path.join(projectPath, 'runtime.d.ts'));
139
+ }
116
140
  execSync('cd ' + projectPath + ' && npm init -y', { stdio: 'ignore' });
141
+ if(project.civet){
142
+ log('Installing NPM Packages');
143
+ execSync('cd '+projectPath+' && npm i @types/node --no-save', { stdio: 'ignore' });
144
+ }
117
145
  // log('Installing '+npm_package_name);
118
146
  // exec('cd '+projectPath+' && npm i '+npm_package_name, (err) => {
119
147
  // if(err){
@@ -130,9 +158,15 @@ module.exports = {
130
158
  rl.question(logget(' Package Name: '.blue), (pkg) => {
131
159
  if (pkg.trim()) {
132
160
  project.package = pkg.trim();
133
- rl.question(logget('󰊢 Use git(y/N): '.yellow.bold), (use_git) => {
134
- project.git = use_git.toLowerCase() == 'y' || use_git.toLowerCase() == 'yes';
135
- create();
161
+ rl.question(logget(' Use intellisense declarations ? (y/N): '.magenta.bold), (inteli) => {
162
+ project.intellisense = inteli.toLowerCase() == 'y' || inteli.toLowerCase() == 'yes';
163
+ rl.question(logget(' Use Civet For main ? (y/N): '.blue.bold), (civet) => {
164
+ project.civet = civet.toLowerCase() == 'y' || civet.toLowerCase() == 'yes';
165
+ rl.question(logget('󰊢 Use git ? (y/N): '.yellow.bold), (use_git) => {
166
+ project.git = use_git.toLowerCase() == 'y' || use_git.toLowerCase() == 'yes';
167
+ create();
168
+ });
169
+ });
136
170
  });
137
171
  } else {
138
172
  rl.close();
@@ -153,8 +187,8 @@ module.exports = {
153
187
  c.exec.entry = c.exec[options.entry] || c.exec.entry;
154
188
  }
155
189
  if (c.exec.entry) {
156
- if (byPath && options.dev) c.exec.entry = c.entry.endsWith('.qrew') ? c.exec.entry.replace(/\.qrew$/, '.coffee') : c.exec.entry;
157
190
  let r = path.resolve(root, c.exec.entry);
191
+ if (byPath && options.dev) r = r.endsWith('.qrew') ? r.replace(/\.qrew$/, (a, b) => fs.existsSync(r.replace(a, '.coffee')) ? '.coffee' : REW_FILE_TYPE.EXTENSION) : r;
158
192
  if (options.build) {
159
193
  this.build({
160
194
  file: r,
@@ -162,7 +196,7 @@ module.exports = {
162
196
  });
163
197
  r = path.resolve(root, c.exec.entry.replace(new RegExp(path.extname(c.exec.entry).replace('.', '\\.') + '$'), options.translate ? '.js' : '.qrew'));
164
198
  }
165
- this.runFileWithArgv(r);
199
+ this.runFileWithArgv(r, { async: !process.stdin.isTTY });
166
200
  }
167
201
  };
168
202
 
@@ -195,28 +229,29 @@ module.exports = {
195
229
  });
196
230
  log(' Installing '.blue + pname.green.bold);
197
231
  log(' Package'.blue + ': ' + p.name.green + '@' + p.version.yellow);
198
- if (p.descriptiondescription) {
199
- log(' Description'.blue + ': ' + p.description);
232
+ if (p.description) {
233
+ log(' Description'.blue + '\n' + p.description.split('\n').map((i, ind, a) => ' '+(ind == 0 && a.length > 1 ? log.startPrefix : (a.length-1 == ind ? log.endPrefix : log.middlePrefix))+' '+i).join('\n'), ':end');
234
+ }
235
+ if (p.keywords && p.keywords.length) {
236
+ log(' Tags'.blue + '\n ' + log.endPrefix + p.keywords.map(i => '#'+i).join(' '), ':end')
200
237
  }
201
238
  const done = (f) => {
202
239
  if (f.toLowerCase() == 'y' || f.toLowerCase() == 'yes') {
203
240
  if (fs.existsSync(installPath)) {
204
241
  execSync(`rm -r ${installPath}`);
205
242
  }
206
- execSync(`cp -r ${apppath} ${installPath}`);
207
- execSync(`chmod 444 ${installPath}/app.yaml`);
208
- if (rmidir) {
209
- execSync(`rm -r ${apppath}`);
210
- }
211
- log(' Installed '.green + pname.cyan.bold, c.install ? '' : ':end');
212
- if (c.install) {
213
- if (c.install.build) {
214
- log(' Building'.blue);
243
+ if (c.install?.build) {
244
+ log(' Building'.blue);
245
+ try{
215
246
  this.build({
216
247
  ...c.install.build,
217
- file: path.join(installPath, c.install.build.file)
248
+ file: path.join(apppath, c.exec[c.install.build.file] || c.install.build.file)
218
249
  });
219
- }
250
+ } catch(e){}
251
+ }
252
+ execSync(`cp -r ${apppath} ${installPath}`);
253
+ execSync(`chmod 444 ${installPath}/app.yaml`);
254
+ if (c.install) {
220
255
  if (c.install.commands) {
221
256
  for (let command of c.install.commands) {
222
257
  try{
@@ -224,7 +259,7 @@ module.exports = {
224
259
  } catch(e){
225
260
  const logFile = path.join(logspath, 'logs-'+Date.now()+'.log');
226
261
  fs.writeFileSync(logFile, e.toString() +'\n'+ e.stack);
227
- log(` Command Failed: ${command}, check logs at ${logFile}`, ':end');
262
+ log(` Command Failed: ${command}, check logs at ${logFile}`);
228
263
  }
229
264
  }
230
265
  }
@@ -232,28 +267,32 @@ module.exports = {
232
267
  this.runFileWithArgv(path.join(installPath, c.exec[c.install.file] || c.install.file), {}, []);
233
268
  }
234
269
  if (c.install.requirements) {
235
- this.installReq(c);
270
+ this.installReq(c, opts);
236
271
  }
237
272
  if (c.install.exec) {
238
273
  // this.installReq(c);
239
- for (let i in c.install.exec) {
240
- let iff = c.install.exec[i];
241
- if (iff in c.exec) iff = c.exec[iff];
242
- const file = path.join(installPath, iff);
243
- const filepath = path.join(binpath, i);
244
- const binfp = path.join(localBinPath, i);
245
- if (!fs.existsSync(localBinPath)) fs.mkdirSync(localBinPath, { recursive: true });
246
- fs.writeFileSync(filepath, `#!/usr/bin/env bash\n#@app.${pname}\nrew ${file} $*`);
247
- fs.chmodSync(filepath, '755');
248
- fs.linkSync(filepath, binfp);
274
+ if(conf({}).create('').get('executables') == false){
275
+ log(' Ignoring executables'.blue);
276
+ } else {
277
+ for (let i in c.install.exec) {
278
+ let iff = c.install.exec[i];
279
+ if (iff in c.exec) iff = c.exec[iff];
280
+ const file = path.join(installPath, iff);
281
+ const filepath = path.join(binpath, i);
282
+ const binfp = path.join(localBinPath, i);
283
+ if (!fs.existsSync(localBinPath)) fs.mkdirSync(localBinPath, { recursive: true });
284
+ fs.writeFileSync(filepath, `#!/usr/bin/env bash\n#@app.${pname}\nrew ${file} $*`);
285
+ fs.chmodSync(filepath, '755');
286
+ if(fs.existsSync(binfp)) fs.unlinkSync(binfp);
287
+ fs.linkSync(filepath, binfp);
288
+ }
249
289
  }
250
290
  }
291
+
292
+ log(' Installed '.green + pname.cyan.bold, ':end');
251
293
  }
252
294
  rl.close();
253
295
  } else {
254
- if (rmidiri) {
255
- execSync(`rm -rf ${apppath}`);
256
- }
257
296
  log(' Canceled install'.red.bold, ':end');
258
297
  rl.close();
259
298
  }
@@ -332,6 +371,9 @@ module.exports = {
332
371
  if (fs.existsSync(importedFilePath)) {
333
372
  importsArray.push(importStatement);
334
373
  processFile(importedFilePath, importsArray);
374
+ } else if (fs.existsSync(importedFilePath + REW_FILE_TYPE.EXTENSION)) {
375
+ importsArray.push(importStatement);
376
+ processFile(importedFilePath + REW_FILE_TYPE.EXTENSION, importsArray);
335
377
  } else if (fs.existsSync(importedFilePath + '.coffee')) {
336
378
  importsArray.push(importStatement);
337
379
  processFile(importedFilePath + '.coffee', importsArray);
@@ -344,7 +386,7 @@ module.exports = {
344
386
 
345
387
  const appPath = findAppInfo(filePath);
346
388
 
347
- const compiled = argv.translate ? compile({ content }, {}) : to_qrew(content, appPath?.config?.manifest?.package || path.basename(filePath).split('.').slice(0, -1).join('.'));
389
+ const compiled = argv.translate ? compile({ content }, {}) : to_qrew(`"initFile ${filePath}"\n${path.basename(content)}`, appPath?.config?.manifest?.package || path.basename(filePath).split('.').slice(0, -1).join('.'));
348
390
  writeCompiledFile(filePath, compiled);
349
391
  }
350
392
 
@@ -355,21 +397,51 @@ module.exports = {
355
397
  processFile(filePath, importsArray);
356
398
  log('󰈔 Compiled'.yellow, (importsArray.length + 1 + '').blue, `file${importsArray.length ? 's' : ''}.`.yellow, ':end');
357
399
  },
358
- async cloneGit(gitpath) {
400
+ cache(command){
401
+ if(command == 'list'){
402
+ console.log(fs.readdirSync(cachepath).join('\n').trim());
403
+ } else {
404
+ fs.readdirSync(cachepath).forEach(file => fs.rmSync(path.join(cachepath, file), { recursive: true }));
405
+ }
406
+ },
407
+ async cloneGit(gitpath, opts) {
359
408
  const p = gitpath.split('github:')[1];
409
+ const clonePath = path.join(cachepath, 'rew-git-clone-'+gen_key(gitpath).substring(0, 12));
360
410
  const url = `https://github.com/${p}`;
361
- const apiurl = `https://api.github.com/repos/${p}`;
411
+ const apiurl = `https://api.github.com/repos/${p}/commits`;
412
+ const load = loading("Finding Repo...".yellow).start();
362
413
  try {
363
414
  const response = await req(apiurl);
364
- if (response.status !== 200) return log(' Repo not found'.red.bold, ':end');
365
- log(''.blue, 'Cloning from github'.yellow);
366
- const tempPath = '/tmp/rew-git-clone-' + p.replace(/\//g, '_') + '-' + generateRandomID();
367
- execSync(`git clone ${url} ${tempPath}`, { stdio: 'ignore' });
368
- log(''.blue, 'Installing deps...'.yellow);
369
- execSync(`cd ${tempPath} && npm i`);
370
- return tempPath;
415
+ if (response.status !== 200) {
416
+ load.stop();
417
+ return log(' Package not found in github'.red.bold, ':end');
418
+ }
419
+ let pull = false;
420
+ if(fs.existsSync(clonePath)){
421
+ if(fs.existsSync(path.join(clonePath, response.data[0].sha))){
422
+ load.stop();
423
+ log('Found Cache'.yellow);
424
+ return clonePath+'/clone';
425
+ } else {
426
+ pull = true;
427
+ }
428
+ }
429
+ fs.mkdirSync(clonePath, { recursive: true });
430
+ fs.writeFileSync(path.join(clonePath, response.data[0].sha), '');
431
+ load.text = 'Cloning from github'.blue.bold;
432
+ await sleep(100)
433
+ if(pull) execSync(`cd ${clonePath}/clone && git pull`, { stdio: opts.verbose ? 'inherit' : 'ignore' });
434
+ else execSync(`git clone ${url} ${clonePath}/clone`, { stdio: opts.verbose ? 'pipe' : 'ignore' });
435
+ load.text = 'Installing npm packages'.green.bold;
436
+ await sleep(100)
437
+ execSync(`cd ${clonePath}/clone && npm i`, { stdio: opts.verbose ? 'inherit' : 'ignore' });
438
+ load.stop();
439
+ return clonePath+'/clone';
371
440
  } catch (e) {
372
- log(' Repo not found'.red.bold, ':end');
441
+ const logFile = path.join(logspath, 'logs-'+Date.now()+'.log');
442
+ fs.writeFileSync(logFile, e.toString() +'\n'+ e.stack);
443
+ load.stop();
444
+ log(' Something went wrong, check logs at'.red.bold, logFile.green, ':end');
373
445
  }
374
446
  },
375
447
  findRepo(repo) {
@@ -377,7 +449,7 @@ module.exports = {
377
449
  return repos.get(repo);
378
450
  },
379
451
  async installAppFrom(path, opts) {
380
- if (path.startsWith('github:')) this.installApp(await this.cloneGit(path), opts, true, true);
452
+ if (path.startsWith('github:')) this.installApp(await this.cloneGit(path, opts), opts, true);
381
453
  else if (path.startsWith('@')) this.fromRepo(path, opts);
382
454
  else this.installApp(path, opts, null, null);
383
455
  },
@@ -465,7 +537,7 @@ module.exports = {
465
537
  console.log(Object.keys(confInstance.getAll()).join('\n'));
466
538
  }
467
539
  } else if (command === 'delete') {
468
- confInstance.remove('repos');
540
+ confInstance.remove(key);
469
541
  } else {
470
542
  log(' Invalid command'.red.bold, ':end');
471
543
  }
@@ -474,6 +546,21 @@ module.exports = {
474
546
  log('First time init')
475
547
  conf({}).create('').optionCenter('repos').set('rewpkgs', '//raw.githubusercontent.com/kevinJ045/rewpkgs/main/main.yaml');
476
548
  fs.mkdirSync(binpath, { recursive: true });
549
+ fs.mkdirSync(cachepath, { recursive: true });
477
550
  fs.mkdirSync(logspath, { recursive: true });
551
+ },
552
+ getAllPipeInput(){
553
+ return new Promise((resolve) => {
554
+ let data = '';
555
+ process.stdin.setEncoding('utf8');
556
+
557
+ process.stdin.on('data', (chunk) => {
558
+ data += chunk;
559
+ });
560
+
561
+ process.stdin.on('end', () => {
562
+ resolve(data);
563
+ });
564
+ });
478
565
  }
479
566
  };
@@ -7,11 +7,12 @@ const { match } = require('../functions/match');
7
7
  const { map } = require('../functions/map');
8
8
  const { typex, typeis, typedef, typei, int, float, num, str, bool } = require('../functions/types');
9
9
  const { isEmpty, clone, deepClone, merge, uniqueId, compose, curry } = require('../functions/core');
10
- const { print, input, clear } = require('../functions/stdout');
10
+ const { print, input, clear, printf } = require('../functions/stdout');
11
11
  const { curl } = require('../functions/curl');
12
12
  const { wait } = require('../functions/wait');
13
13
  const { scheduleFrame } = require('../functions/misc');
14
14
  const { jsons, yaml, json, yamls } = require('../functions/json');
15
+ const { generateRandomID } = require('../functions/id');
15
16
 
16
17
  module.exports = {
17
18
  cenum,
@@ -49,8 +50,11 @@ module.exports = {
49
50
  yaml,
50
51
  yamls,
51
52
 
53
+ genID: generateRandomID,
54
+
52
55
  curl,
53
56
 
54
57
  print,
58
+ printf,
55
59
  input,
56
60
  };
@@ -0,0 +1,5 @@
1
+
2
+ module.exports.REW_FILE_TYPE = {
3
+ EXTENSION: '.civet',
4
+ TYPE: 'civet'
5
+ }
@@ -1,10 +1,15 @@
1
+ const { REW_FILE_TYPE } = require("./ext");
2
+
1
3
  const execOptions = {
2
4
  sharedContext: true,
3
- resolveExtensions: [{ ext: '.js', options: { type: 'js' } }, { ext: '.qrew', options: { qrew: true } }, '.coffee'],
5
+ resolveExtensions: [REW_FILE_TYPE.EXTENSION, ".coffee", { ext: '.js', options: { type: 'js' } }, { ext: '.qrew', options: { qrew: true } }],
4
6
  nativeRequire: false,
7
+ useImport: false,
5
8
  cwdAlias: '$',
6
- jsxPragma: 'createElement',
9
+ jsxPragma: '__using__.JSX.createElement',
7
10
  jsx: false,
11
+ typescript: false,
12
+ decorators: false
8
13
  };
9
14
 
10
15
  module.exports.execOptions = execOptions;
@@ -0,0 +1,15 @@
1
+
2
+
3
+
4
+ module.exports.USING_DEFAULT = {
5
+ JSX: {
6
+ param: (param) => ({ createElement: param }),
7
+ use: (options) => options.jsx = true
8
+ },
9
+ TYPES: {
10
+ use: (options) => options.typescript = true
11
+ },
12
+ DECORATORS: {
13
+ use: (options) => options.decorators = true
14
+ }
15
+ }
@@ -23,8 +23,8 @@ module.exports = (currentFile) => {
23
23
  );
24
24
  };
25
25
 
26
- function spawn(command, options) {
27
- return shell.spawn(command, options);
26
+ function spawn(command, ...args) {
27
+ return shell.spawn(command, ...args);
28
28
  }
29
29
 
30
30
  return { exec, spawn };
@@ -10,7 +10,7 @@ function exportsThe(item, name, context) {
10
10
 
11
11
  module.exports.pubFunction = function (context) {
12
12
  return function (name, item) {
13
- if (name && !item) {
13
+ if (name && item == null) {
14
14
  item = name;
15
15
  name = null;
16
16
  }
@@ -31,7 +31,11 @@ module.exports = (currentFile) => {
31
31
  }
32
32
 
33
33
  function rm(filepath, options) {
34
- return fs.unlinkSync(filepath);
34
+ return fs.rmSync(gp(filepath), { recursive: true,...options });
35
+ }
36
+
37
+ function unlink(filepath, options) {
38
+ return fs.unlinkSync(gp(filepath));
35
39
  }
36
40
 
37
41
  function chmod(filepath, mode, options) {
@@ -51,6 +55,7 @@ module.exports = (currentFile) => {
51
55
  mkdir,
52
56
  chmod,
53
57
  rm,
58
+ unlink,
54
59
  fstat,
55
60
  exists,
56
61
  write,
@@ -1,5 +1,5 @@
1
- module.exports.generateRandomID = function generateRandomID(length = 12) {
2
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
1
+ module.exports.generateRandomID = function generateRandomID(length = 12, _characters) {
2
+ const characters = _characters || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
3
3
  const charactersLength = characters.length;
4
4
  let randomID = '';
5
5