@makano/rew 1.2.2 → 1.2.4

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.
package/README.md CHANGED
@@ -31,6 +31,9 @@ in the process.
31
31
  ```
32
32
  Optionally, you can run single files with `rew [filename]`
33
33
 
34
+ ## Docs
35
+ You can pay a visit to the [docs](https://kevinj045.github.io/rew-docs/) to learn more about rew and how it works.
36
+
34
37
  ## Author's Notes
35
38
 
36
39
  Any suggestions, bug fixes or ideas are accepted, feel free to ask anything.
package/bin/rew CHANGED
@@ -1,9 +1,3 @@
1
1
  #!/usr/bin/env node
2
- const path = require('path');
3
- const fs = require('fs');
4
- const rew_mod = path.resolve(process.cwd(), 'snode_moduless/@makano/rew');
5
- if(fs.existsSync(rew_mod)){
6
- require(path.join(rew_mod, 'lib/rew/cli/cli.js'));
7
- } else {
8
- require('../lib/rew/cli/cli.js');
9
- }
2
+ global.fileName = __filename;
3
+ require("../lib/rew/cli/cli.js");
@@ -3,10 +3,9 @@
3
3
  const yargs = require('yargs/yargs');
4
4
  const path = require('path');
5
5
  const { hideBin } = require('yargs/helpers');
6
- const { fork, exec, execSync } = require('child_process');
7
- const { watch } = require('chokidar');
6
+ const { execSync } = require('child_process');
8
7
  const utils = require('./utils');
9
- const { existsSync, readFileSync, writeFileSync, mkdirSync } = require('fs');
8
+ const { existsSync, readFileSync, writeFileSync, mkdirSync, statSync } = require('fs');
10
9
  const { log } = require('./log');
11
10
  const os = require('os');
12
11
  const crypto = require('crypto');
@@ -16,12 +15,25 @@ const { to_qrew, from_qrew } = require('../qrew/compile');
16
15
  const { findAppInfo } = require('../misc/findAppInfo');
17
16
  const { print, input } = require('../functions/stdout');
18
17
  const colors = require('colors');
18
+ const { req } = require('../misc/req');
19
+ const { gen_key } = require('../misc/bin');
19
20
 
20
- if (!existsSync(CONFIG_PATH)) {
21
+ if (!existsSync(CONFIG_PATH) || !existsSync(CONFIG_PATH + '/repos.yaml')) {
21
22
  mkdirSync(CONFIG_PATH, { recursive: true });
22
23
  utils.initFirst();
23
24
  }
24
25
 
26
+ const npm_package_name = '@makano/rew';
27
+
28
+ function isFileArgument(file) {
29
+ try {
30
+ return existsSync(file) && statSync(file).isFile();
31
+ } catch {
32
+ return false;
33
+ }
34
+ }
35
+
36
+ const isFileGiven = isFileArgument(hideBin(process.argv)[0]) || hideBin(process.argv)[0] == 'run';
25
37
  yargs(hideBin(process.argv))
26
38
  .command(
27
39
  '$0 <file>',
@@ -41,31 +53,10 @@ yargs(hideBin(process.argv))
41
53
  (argv) => {
42
54
  const filePath = path.resolve(process.cwd(), argv.file);
43
55
  if (!existsSync(filePath)) {
44
- log('File not found:', argv.file, ':end');
56
+ log('File not found:'.red.bold, argv.file, ':end');
45
57
  return;
46
58
  }
47
- const watching = [];
48
- const watchIt = (file) => {
49
- if (watching.includes(file)) return;
50
- watch(file).on('change', () => runIt());
51
- watching.push(file);
52
- };
53
- let prevFork;
54
- const runIt = () => {
55
- if (argv.watch) console.clear();
56
- if (prevFork && !prevFork.killed) prevFork.kill?.();
57
- prevFork = fork(path.resolve(__dirname, './run.js'))
58
- .on('message', (data) => {
59
- if (argv.watch) {
60
- data.forEach((file) => {
61
- watchIt(file);
62
- });
63
- }
64
- })
65
- .send({ filePath, watch: argv.watch });
66
- if (argv.watch) watchIt(filePath);
67
- };
68
- runIt();
59
+ utils.runFileWithArgv(filePath, { watch: argv.watch });
69
60
  },
70
61
  )
71
62
  .command(
@@ -122,19 +113,6 @@ yargs(hideBin(process.argv))
122
113
  console.log('Encryption Key:', rune({}).genKey(input('Secret Value: ') || null));
123
114
  },
124
115
  )
125
- .command(
126
- 'ui-bin <path>',
127
- 'Build the UI bin for your own app',
128
- (yargs) => {
129
- yargs.positional('path', {
130
- describe: 'Path of the output bin',
131
- type: 'string',
132
- });
133
- },
134
- (argv) => {
135
- execSync('sh ' + path.resolve(__dirname, '../../../build.sh') + ' ' + argv.path);
136
- },
137
- )
138
116
  .command(
139
117
  'run <path | package>',
140
118
  'Run an app',
@@ -143,20 +121,25 @@ yargs(hideBin(process.argv))
143
121
  describe: 'Path of the app to run',
144
122
  type: 'string',
145
123
  })
146
- .option('dev', {
147
- describe: 'If your entry file is a .qrew, then just use the .coffee instead',
148
- type: 'boolean',
149
- })
150
- .option('build', {
151
- alias: 'b',
152
- describe: 'Builds to a .qrew before running',
153
- type: 'boolean',
154
- })
155
- .option('translate', {
156
- alias: 't',
157
- describe: 'Builds to a .js before running, only used when --build is passed',
158
- type: 'boolean',
159
- });
124
+ .option('dev', {
125
+ describe: 'If your entry file is a .qrew, then just use the .coffee instead',
126
+ type: 'boolean',
127
+ })
128
+ .option('entry', {
129
+ alias: 'e',
130
+ describe: 'Choose entry file from app.config.exec',
131
+ type: 'string',
132
+ })
133
+ .option('build', {
134
+ alias: 'b',
135
+ describe: 'Builds to a .qrew before running',
136
+ type: 'boolean',
137
+ })
138
+ .option('translate', {
139
+ alias: 't',
140
+ describe: 'Builds to a .js before running, only used when --build is passed',
141
+ type: 'boolean',
142
+ });
160
143
  },
161
144
  (argv) => {
162
145
  utils.runApp(argv.path, argv);
@@ -166,30 +149,37 @@ yargs(hideBin(process.argv))
166
149
  'secret <command> [key]',
167
150
  'Add secrets to the current path',
168
151
  (yargs) => {
169
- yargs.positional('command', {
170
- describe: 'Path of the app to run',
171
- type: 'string',
172
- });
152
+ yargs
153
+ .positional('command', {
154
+ describe: 'Path of the app to run',
155
+ type: 'string',
156
+ })
157
+ .option('file', {
158
+ alias: 'f',
159
+ describe: 'Set file name',
160
+ type: 'string',
161
+ default: 'secrets.qrew'
162
+ })
173
163
  },
174
164
  (argv) => {
175
165
  const appPath = findAppInfo(path.join(process.cwd(), 'app.yaml'));
176
166
 
177
167
  if (!appPath) return log(''.red.bold, 'Secrets only available in apps'.red.bold, ':end');
178
168
 
179
- const qrewPath = path.join(appPath.path, 'secrets.qrew');
169
+ const qrewPath = path.join(appPath.path, argv.file || 'secrets.qrew');
180
170
 
181
- const getHost = () => `${process.env.USER}@${os.platform()}.${os.hostname()}`;
171
+ const getPass = () => gen_key(input('Secret Encryptor: '));//`${process.env.USER}@${os.platform()}.${os.hostname()}`;
182
172
 
183
173
  const verifyUser = (content) => {
184
174
  const owner = content.match(/^owner = "(.*)" # end$/m)?.[1];
185
- if (owner == getHost()) return true;
175
+ if (owner == getPass()) return true;
186
176
  return false;
187
177
  };
188
178
 
189
179
  if (argv.command == 'init') {
190
- writeFileSync(qrewPath, to_qrew(`secrets = {} # end\n\nowner = "${getHost()}" # end\n \nexports { ...secrets }`, appPath.config.package))
180
+ writeFileSync(qrewPath, to_qrew(`secrets = {} # end\n\nowner = "${getPass()}" # end\n \nexports { ...secrets }`, appPath.config.manifest.package))
191
181
  } else {
192
- const currentFileContent = from_qrew(readFileSync(qrewPath), appPath.config.package).toString();
182
+ const currentFileContent = from_qrew(readFileSync(qrewPath), appPath.config.manifest.package).toString();
193
183
  if (!verifyUser(currentFileContent)) return log(''.red.bold, 'You are not allowed to change this data'.red.bold, ':end');
194
184
 
195
185
  const secrets = currentFileContent.match(/^secrets = (.*) # end$/m)?.[1];
@@ -208,7 +198,7 @@ yargs(hideBin(process.argv))
208
198
  const newSecrets = `secrets = ${JSON.stringify(secretsJson)} # end`;
209
199
  const newFileContent = currentFileContent.replace(/^secrets = .* # end$/m, newSecrets);
210
200
 
211
- writeFileSync(qrewPath, to_qrew(newFileContent, appPath.config.package))
201
+ writeFileSync(qrewPath, to_qrew(newFileContent, appPath.config.manifest.package))
212
202
  } else if (argv.command == 'get') {
213
203
  if (argv.key) {
214
204
  console.log(argv.key.yellow, '=', secretsJson[argv.key].green);
@@ -229,10 +219,23 @@ yargs(hideBin(process.argv))
229
219
  yargs.positional('path', {
230
220
  describe: 'Path or github or repo id of the app to install',
231
221
  type: 'string',
222
+ }).option('requirements', {
223
+ alias: 'r',
224
+ describe: 'Install requirements of the app',
225
+ type: 'boolean',
226
+ }).option('update', {
227
+ alias: 'u',
228
+ describe: 'Update the app',
229
+ type: 'boolean',
230
+ }).option('yes', {
231
+ alias: 'y',
232
+ describe: 'Auto yes',
233
+ type: 'boolean',
232
234
  });
233
235
  },
234
236
  async (argv) => {
235
- utils.installAppFrom(argv.path);
237
+ if (argv.requirements) utils.installReq(argv.path, argv);
238
+ else utils.installAppFrom(argv.path, argv);
236
239
  },
237
240
  )
238
241
  .command(
@@ -260,15 +263,21 @@ yargs(hideBin(process.argv))
260
263
  async (argv) => {
261
264
  const pkg = JSON.parse(readFileSync(path.resolve(__dirname, '../../../package.json'), { encoding: 'utf-8' }));
262
265
  const getLatest = async () => {
263
- try{
264
- return (await (await fetch(`https://registry.npmjs.org/${pkg.name}`)).json()).dist_tags.latest.yellow.bold
265
- } catch(e) {
266
+ try {
267
+ return (await req(`https://registry.npmjs.org/${pkg.name}`)).data['dist-tags'].latest
268
+ } catch (e) {
266
269
  return `(${'!err'.blue.bgRed}, see ${`https://npmjs.com/package/${pkg.name}`.blue.underline})`;
267
270
  }
268
271
  }
269
272
  log(`${'Rew'.red.bold} ${'RUNTIME'.yellow}`);
270
- log(`Version: ${pkg.name.green}@${pkg.version.yellow.bold}`);
271
- log(`Latest: ${pkg.name}@${await getLatest()}`, ':end');
273
+ log(`Version: ${pkg.name.green.bold}@${pkg.version.yellow.bold}`.magenta.bold);
274
+ const latest = await getLatest();
275
+ const isLatest = latest === pkg.version;
276
+ log(`Latest: ${pkg.name.cyan.bold}@${latest.yellow.bold}`.green.bold, isLatest ? ':end' : '');
277
+ if (!isLatest) {
278
+ log(`There is an update available`.cyan.bold);
279
+ log('Update With:'.yellow, `npm i -g ${npm_package_name}`.green.bold, ':end');
280
+ }
272
281
  },
273
282
  )
274
283
  .command(
@@ -287,9 +296,13 @@ yargs(hideBin(process.argv))
287
296
  describe: 'url of the repo',
288
297
  type: 'string',
289
298
  });
299
+ yargs.option('json', {
300
+ describe: 'Return a json output',
301
+ type: 'boolean',
302
+ });
290
303
  },
291
304
  async (argv) => {
292
- utils.repo(argv.command, argv.name, argv.url);
305
+ utils.repo(argv.command, argv.name, argv.url, argv);
293
306
  },
294
307
  )
295
308
  .command(
@@ -326,4 +339,4 @@ yargs(hideBin(process.argv))
326
339
  utils.build(argv);
327
340
  },
328
341
  )
329
- .help().argv;
342
+ .help(!isFileGiven).argv;
@@ -1,15 +1,8 @@
1
+ // run.js
1
2
  const { run } = require('../main');
2
3
 
3
- function exec(filePath) {
4
- return run(filePath).context.module.imports;
4
+ function exec(filePath, argv) {
5
+ return run(filePath, { argv })?.context?.module?.imports || [];
5
6
  }
6
7
 
7
- const onmsg = ({ filePath, watch }) => {
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);
8
+ module.exports = { execRewFile: exec };