@makano/rew 1.2.3 → 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/bin/rew +1 -0
- package/lib/rew/cli/cli.js +59 -38
- package/lib/rew/cli/utils.js +33 -14
- package/lib/rew/const/default.js +6 -0
- package/lib/rew/functions/curl.js +1 -1
- package/lib/rew/functions/json.js +27 -0
- package/lib/rew/functions/require.js +34 -14
- package/lib/rew/modules/context.js +16 -13
- package/lib/rew/modules/yaml.js +1 -1
- package/lib/rew/pkgs/conf.js +2 -1
- package/package.json +1 -1
    
        package/bin/rew
    CHANGED
    
    
    
        package/lib/rew/cli/cli.js
    CHANGED
    
    | @@ -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 } = require('fs');
         | 
| 8 | 
            +
            const { existsSync, readFileSync, writeFileSync, mkdirSync, statSync } = require('fs');
         | 
| 9 9 | 
             
            const { log } = require('./log');
         | 
| 10 10 | 
             
            const os = require('os');
         | 
| 11 11 | 
             
            const crypto = require('crypto');
         | 
| @@ -18,13 +18,22 @@ const colors = require('colors'); | |
| 18 18 | 
             
            const { req } = require('../misc/req');
         | 
| 19 19 | 
             
            const { gen_key } = require('../misc/bin');
         | 
| 20 20 |  | 
| 21 | 
            -
            if (!existsSync(CONFIG_PATH)) {
         | 
| 21 | 
            +
            if (!existsSync(CONFIG_PATH) || !existsSync(CONFIG_PATH + '/repos.yaml')) {
         | 
| 22 22 | 
             
            	mkdirSync(CONFIG_PATH, { recursive: true });
         | 
| 23 23 | 
             
            	utils.initFirst();
         | 
| 24 24 | 
             
            }
         | 
| 25 25 |  | 
| 26 26 | 
             
            const npm_package_name = '@makano/rew';
         | 
| 27 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';
         | 
| 28 37 | 
             
            yargs(hideBin(process.argv))
         | 
| 29 38 | 
             
            	.command(
         | 
| 30 39 | 
             
            		'$0 <file>',
         | 
| @@ -112,25 +121,25 @@ yargs(hideBin(process.argv)) | |
| 112 121 | 
             
            				describe: 'Path of the app to run',
         | 
| 113 122 | 
             
            				type: 'string',
         | 
| 114 123 | 
             
            			})
         | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 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 | 
            +
            				});
         | 
| 134 143 | 
             
            		},
         | 
| 135 144 | 
             
            		(argv) => {
         | 
| 136 145 | 
             
            			utils.runApp(argv.path, argv);
         | 
| @@ -141,16 +150,16 @@ yargs(hideBin(process.argv)) | |
| 141 150 | 
             
            		'Add secrets to the current path',
         | 
| 142 151 | 
             
            		(yargs) => {
         | 
| 143 152 | 
             
            			yargs
         | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 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 | 
            +
            				})
         | 
| 154 163 | 
             
            		},
         | 
| 155 164 | 
             
            		(argv) => {
         | 
| 156 165 | 
             
            			const appPath = findAppInfo(path.join(process.cwd(), 'app.yaml'));
         | 
| @@ -214,11 +223,19 @@ yargs(hideBin(process.argv)) | |
| 214 223 | 
             
            				alias: 'r',
         | 
| 215 224 | 
             
            				describe: 'Install requirements of the app',
         | 
| 216 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',
         | 
| 217 234 | 
             
            			});
         | 
| 218 235 | 
             
            		},
         | 
| 219 236 | 
             
            		async (argv) => {
         | 
| 220 | 
            -
            			if(argv.requirements) utils.installReq(argv.path);
         | 
| 221 | 
            -
            			else utils.installAppFrom(argv.path);
         | 
| 237 | 
            +
            			if (argv.requirements) utils.installReq(argv.path, argv);
         | 
| 238 | 
            +
            			else utils.installAppFrom(argv.path, argv);
         | 
| 222 239 | 
             
            		},
         | 
| 223 240 | 
             
            	)
         | 
| 224 241 | 
             
            	.command(
         | 
| @@ -246,9 +263,9 @@ yargs(hideBin(process.argv)) | |
| 246 263 | 
             
            		async (argv) => {
         | 
| 247 264 | 
             
            			const pkg = JSON.parse(readFileSync(path.resolve(__dirname, '../../../package.json'), { encoding: 'utf-8' }));
         | 
| 248 265 | 
             
            			const getLatest = async () => {
         | 
| 249 | 
            -
            				try{
         | 
| 266 | 
            +
            				try {
         | 
| 250 267 | 
             
            					return (await req(`https://registry.npmjs.org/${pkg.name}`)).data['dist-tags'].latest
         | 
| 251 | 
            -
            				} catch(e) {
         | 
| 268 | 
            +
            				} catch (e) {
         | 
| 252 269 | 
             
            					return `(${'!err'.blue.bgRed}, see ${`https://npmjs.com/package/${pkg.name}`.blue.underline})`;
         | 
| 253 270 | 
             
            				}
         | 
| 254 271 | 
             
            			}
         | 
| @@ -257,7 +274,7 @@ yargs(hideBin(process.argv)) | |
| 257 274 | 
             
            			const latest = await getLatest();
         | 
| 258 275 | 
             
            			const isLatest = latest === pkg.version;
         | 
| 259 276 | 
             
            			log(`Latest: ${pkg.name.cyan.bold}@${latest.yellow.bold}`.green.bold, isLatest ? ':end' : '');
         | 
| 260 | 
            -
            			if(!isLatest){
         | 
| 277 | 
            +
            			if (!isLatest) {
         | 
| 261 278 | 
             
            				log(`There is an update available`.cyan.bold);
         | 
| 262 279 | 
             
            				log('Update With:'.yellow, `npm i -g ${npm_package_name}`.green.bold, ':end');
         | 
| 263 280 | 
             
            			}
         | 
| @@ -279,9 +296,13 @@ yargs(hideBin(process.argv)) | |
| 279 296 | 
             
            				describe: 'url of the repo',
         | 
| 280 297 | 
             
            				type: 'string',
         | 
| 281 298 | 
             
            			});
         | 
| 299 | 
            +
            			yargs.option('json', {
         | 
| 300 | 
            +
            				describe: 'Return a json output',
         | 
| 301 | 
            +
            				type: 'boolean',
         | 
| 302 | 
            +
            			});
         | 
| 282 303 | 
             
            		},
         | 
| 283 304 | 
             
            		async (argv) => {
         | 
| 284 | 
            -
            			utils.repo(argv.command, argv.name, argv.url);
         | 
| 305 | 
            +
            			utils.repo(argv.command, argv.name, argv.url, argv);
         | 
| 285 306 | 
             
            		},
         | 
| 286 307 | 
             
            	)
         | 
| 287 308 | 
             
            	.command(
         | 
| @@ -318,4 +339,4 @@ yargs(hideBin(process.argv)) | |
| 318 339 | 
             
            			utils.build(argv);
         | 
| 319 340 | 
             
            		},
         | 
| 320 341 | 
             
            	)
         | 
| 321 | 
            -
            	.help().argv;
         | 
| 342 | 
            +
            	.help(!isFileGiven).argv;
         | 
    
        package/lib/rew/cli/utils.js
    CHANGED
    
    | @@ -16,6 +16,7 @@ const { watch } = require('chokidar'); | |
| 16 16 | 
             
            const { execRewFile } = require('./run');
         | 
| 17 17 |  | 
| 18 18 | 
             
            const binpath = path.join(conf({}).create('').root, '.bin');
         | 
| 19 | 
            +
            const logspath = path.join(conf({}).create('').root, '.logs');
         | 
| 19 20 | 
             
            const localBinPath = path.join(binpath, '../../../', 'bin');
         | 
| 20 21 |  | 
| 21 22 | 
             
            module.exports = {
         | 
| @@ -176,7 +177,7 @@ module.exports = { | |
| 176 177 | 
             
            			}
         | 
| 177 178 | 
             
            		}
         | 
| 178 179 | 
             
            	},
         | 
| 179 | 
            -
            	installApp(pathname, rmidir, rmidiri) {
         | 
| 180 | 
            +
            	installApp(pathname, opts, rmidir, rmidiri) {
         | 
| 180 181 | 
             
            		if (!pathname) {
         | 
| 181 182 | 
             
            			return;
         | 
| 182 183 | 
             
            		}
         | 
| @@ -197,8 +198,8 @@ module.exports = { | |
| 197 198 | 
             
            			if (p.descriptiondescription) {
         | 
| 198 199 | 
             
            				log(' Description'.blue + ': ' + p.description);
         | 
| 199 200 | 
             
            			}
         | 
| 200 | 
            -
            			 | 
| 201 | 
            -
            				if (f.toLowerCase() == 'y') {
         | 
| 201 | 
            +
            			const done = (f) => {
         | 
| 202 | 
            +
            				if (f.toLowerCase() == 'y' || f.toLowerCase() == 'yes') {
         | 
| 202 203 | 
             
            					if (fs.existsSync(installPath)) {
         | 
| 203 204 | 
             
            						execSync(`rm -r ${installPath}`);
         | 
| 204 205 | 
             
            					}
         | 
| @@ -218,7 +219,13 @@ module.exports = { | |
| 218 219 | 
             
            						}
         | 
| 219 220 | 
             
            						if (c.install.commands) {
         | 
| 220 221 | 
             
            							for (let command of c.install.commands) {
         | 
| 221 | 
            -
            								 | 
| 222 | 
            +
            								try{
         | 
| 223 | 
            +
            									execSync(command.replace(/\$installPath/g, installPath), { stdio: 'inherit' });
         | 
| 224 | 
            +
            								} catch(e){
         | 
| 225 | 
            +
            									const logFile = path.join(logspath, 'logs-'+Date.now()+'.log');
         | 
| 226 | 
            +
            									fs.writeFileSync(logFile, e.toString() +'\n'+ e.stack);
         | 
| 227 | 
            +
            									log(` Command Failed: ${command}, check logs at ${logFile}`, ':end');
         | 
| 228 | 
            +
            								}
         | 
| 222 229 | 
             
            							}
         | 
| 223 230 | 
             
            						}
         | 
| 224 231 | 
             
            						if (c.install.file) {
         | 
| @@ -250,12 +257,19 @@ module.exports = { | |
| 250 257 | 
             
            					log(' Canceled install'.red.bold, ':end');
         | 
| 251 258 | 
             
            					rl.close();
         | 
| 252 259 | 
             
            				}
         | 
| 253 | 
            -
            			} | 
| 260 | 
            +
            			};
         | 
| 261 | 
            +
            			if (fs.existsSync(installPath) && !opts.update) {
         | 
| 262 | 
            +
            				rl.close();
         | 
| 263 | 
            +
            				log(` App Already Installed`.green.bold);
         | 
| 264 | 
            +
            				return log(`  Run With --update or -u to update.`.green.bold, ':end');
         | 
| 265 | 
            +
            			}
         | 
| 266 | 
            +
            			if(opts.yes) done('y');
         | 
| 267 | 
            +
            			else rl.question(logget('Install '.blue + pname.green.bold + '? (y/N) '), done);
         | 
| 254 268 | 
             
            		} else {
         | 
| 255 269 | 
             
            			log(' Path is not a rew app'.red.bold, ':end');
         | 
| 256 270 | 
             
            		}
         | 
| 257 271 | 
             
            	},
         | 
| 258 | 
            -
            	installReq(config) {
         | 
| 272 | 
            +
            	installReq(config, opts) {
         | 
| 259 273 | 
             
            		if (typeof config !== "object") {
         | 
| 260 274 | 
             
            			const confPath = path.join(config, './app.yaml');
         | 
| 261 275 | 
             
            			if (!fs.existsSync(confPath)) return log(' Path is not a rew app'.red.bold, ':end');
         | 
| @@ -265,7 +279,7 @@ module.exports = { | |
| 265 279 | 
             
            			if (!Array.isArray(config.install.requirements)) return log(' Requirements must be an array'.red.bold, ':end');
         | 
| 266 280 | 
             
            			config.install.requirements.forEach(req => {
         | 
| 267 281 | 
             
            				log('Finding '.cyan + req.green);
         | 
| 268 | 
            -
            				this.installAppFrom(req);
         | 
| 282 | 
            +
            				this.installAppFrom(req, opts);
         | 
| 269 283 | 
             
            			});
         | 
| 270 284 | 
             
            		}
         | 
| 271 285 | 
             
            	},
         | 
| @@ -362,10 +376,10 @@ module.exports = { | |
| 362 376 | 
             
            		const repos = conf({}).create('').optionCenter('repos');
         | 
| 363 377 | 
             
            		return repos.get(repo);
         | 
| 364 378 | 
             
            	},
         | 
| 365 | 
            -
            	async installAppFrom(path) {
         | 
| 366 | 
            -
            		if (path.startsWith('github:')) this.installApp(await this.cloneGit(path), true, true);
         | 
| 367 | 
            -
            		else if (path.startsWith('@')) this.fromRepo(path);
         | 
| 368 | 
            -
            		else this.installApp(path);
         | 
| 379 | 
            +
            	async installAppFrom(path, opts) {
         | 
| 380 | 
            +
            		if (path.startsWith('github:')) this.installApp(await this.cloneGit(path), opts, true, true);
         | 
| 381 | 
            +
            		else if (path.startsWith('@')) this.fromRepo(path, opts);
         | 
| 382 | 
            +
            		else this.installApp(path, opts, null, null);
         | 
| 369 383 | 
             
            	},
         | 
| 370 384 | 
             
            	uninstall(packageName, all) {
         | 
| 371 385 | 
             
            		const confPath = path.join(CONFIG_PATH, packageName);
         | 
| @@ -409,7 +423,7 @@ module.exports = { | |
| 409 423 | 
             
            			return {};
         | 
| 410 424 | 
             
            		}
         | 
| 411 425 | 
             
            	},
         | 
| 412 | 
            -
            	async fromRepo(repoAndPkg) {
         | 
| 426 | 
            +
            	async fromRepo(repoAndPkg, opts) {
         | 
| 413 427 | 
             
            		const [repo, pkg] = repoAndPkg.slice(1).split('/');
         | 
| 414 428 | 
             
            		const repoUrl = this.findRepo(repo);
         | 
| 415 429 | 
             
            		if (!repoUrl) {
         | 
| @@ -418,13 +432,13 @@ module.exports = { | |
| 418 432 | 
             
            		} else {
         | 
| 419 433 | 
             
            			const repoJson = await this.getRepoJson(repoUrl);
         | 
| 420 434 | 
             
            			if (repoJson?.packages?.[pkg]) {
         | 
| 421 | 
            -
            				await this.installAppFrom(repoJson.packages[pkg]);
         | 
| 435 | 
            +
            				await this.installAppFrom(repoJson.packages[pkg], opts);
         | 
| 422 436 | 
             
            			} else {
         | 
| 423 437 | 
             
            				log(` Package "${pkg.cyan}" is not in repo "${repo.green}"`.red.bold, ":end");
         | 
| 424 438 | 
             
            			}
         | 
| 425 439 | 
             
            		}
         | 
| 426 440 | 
             
            	},
         | 
| 427 | 
            -
            	async repo(command, key, value) {
         | 
| 441 | 
            +
            	async repo(command, key, value, options) {
         | 
| 428 442 | 
             
            		const confInstance = conf({}).create('').optionCenter('repos') || {};
         | 
| 429 443 |  | 
| 430 444 | 
             
            		if (command === 'add' || command === 'set') {
         | 
| @@ -433,6 +447,7 @@ module.exports = { | |
| 433 447 | 
             
            			if (key) {
         | 
| 434 448 | 
             
            				console.log(confInstance.get(key) || 'Not found');
         | 
| 435 449 | 
             
            			} else {
         | 
| 450 | 
            +
            				if(options.json) return console.log(JSON.stringify(confInstance.getAll()));
         | 
| 436 451 | 
             
            				console.log(Object.keys(confInstance.getAll()).join('\n'));
         | 
| 437 452 | 
             
            			}
         | 
| 438 453 | 
             
            		} else if (command === 'view') {
         | 
| @@ -440,11 +455,13 @@ module.exports = { | |
| 440 455 | 
             
            				const url = confInstance.get(key);
         | 
| 441 456 | 
             
            				if (!url) return log(' Repo not found'.red.bold, ':end');
         | 
| 442 457 | 
             
            				const json = await this.getRepoJson(url);
         | 
| 458 | 
            +
            				if(options.json) return console.log(JSON.stringify(json));
         | 
| 443 459 | 
             
            				if (json.name) log(json.name);
         | 
| 444 460 | 
             
            				log('Packages:'.yellow)
         | 
| 445 461 | 
             
            				if (json.packages) Object.keys(json.packages).forEach(name => log(name)) || log(`${Object.keys(json.packages).length} Packages in ${key}`, ':end');
         | 
| 446 462 | 
             
            				else log('None'.blue, ':end')
         | 
| 447 463 | 
             
            			} else {
         | 
| 464 | 
            +
            				if(options.json) return JSON.stringify(confInstance.getAll());
         | 
| 448 465 | 
             
            				console.log(Object.keys(confInstance.getAll()).join('\n'));
         | 
| 449 466 | 
             
            			}
         | 
| 450 467 | 
             
            		} else if (command === 'delete') {
         | 
| @@ -454,7 +471,9 @@ module.exports = { | |
| 454 471 | 
             
            		}
         | 
| 455 472 | 
             
            	},
         | 
| 456 473 | 
             
            	initFirst() {
         | 
| 474 | 
            +
            		log('First time init')
         | 
| 457 475 | 
             
            		conf({}).create('').optionCenter('repos').set('rewpkgs', '//raw.githubusercontent.com/kevinJ045/rewpkgs/main/main.yaml');
         | 
| 458 476 | 
             
            		fs.mkdirSync(binpath, { recursive: true });
         | 
| 477 | 
            +
            		fs.mkdirSync(logspath, { recursive: true });
         | 
| 459 478 | 
             
            	}
         | 
| 460 479 | 
             
            };
         | 
    
        package/lib/rew/const/default.js
    CHANGED
    
    | @@ -11,6 +11,7 @@ const { print, input, clear } = 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 | 
            +
            const { jsons, yaml, json, yamls } = require('../functions/json');
         | 
| 14 15 |  | 
| 15 16 | 
             
            module.exports = {
         | 
| 16 17 | 
             
            	cenum,
         | 
| @@ -43,6 +44,11 @@ module.exports = { | |
| 43 44 | 
             
            	compose,
         | 
| 44 45 | 
             
            	curry,
         | 
| 45 46 |  | 
| 47 | 
            +
            	json,
         | 
| 48 | 
            +
            	jsons,
         | 
| 49 | 
            +
            	yaml,
         | 
| 50 | 
            +
            	yamls,
         | 
| 51 | 
            +
             | 
| 46 52 | 
             
            	curl,
         | 
| 47 53 |  | 
| 48 54 | 
             
            	print,
         | 
| @@ -17,7 +17,7 @@ module.exports.curl = function curl(options, url){ | |
| 17 17 | 
             
              }).then(async r => {
         | 
| 18 18 | 
             
                if(options.o) fs.writeFileSync(options.o, Buffer.from(await r.clone().arrayBuffer()));
         | 
| 19 19 | 
             
                return r;
         | 
| 20 | 
            -
              }).then(r => options.json ? r.clone().json() : r));
         | 
| 20 | 
            +
              }).then(r => options.json ? r.clone().json() : options.text ? r.clone().text() : r));
         | 
| 21 21 | 
             
              if(options.a) return f.wait();
         | 
| 22 22 | 
             
              else return f;
         | 
| 23 23 | 
             
            }
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            const jsYaml = require("js-yaml");
         | 
| 2 | 
            +
             | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            function json(thing){
         | 
| 6 | 
            +
              return JSON.parse(thing);
         | 
| 7 | 
            +
            }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            function jsons(thing){
         | 
| 10 | 
            +
              return JSON.stringify(thing);
         | 
| 11 | 
            +
            }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
             | 
| 14 | 
            +
            function yaml(thing){
         | 
| 15 | 
            +
              return jsYaml.loadAll(thing)[0];
         | 
| 16 | 
            +
            }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            function yamls(thing){
         | 
| 19 | 
            +
              return jsYaml.dump(thing);
         | 
| 20 | 
            +
            }
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            module.exports = {
         | 
| 23 | 
            +
              yaml,
         | 
| 24 | 
            +
              yamls,
         | 
| 25 | 
            +
              json,
         | 
| 26 | 
            +
              jsons
         | 
| 27 | 
            +
            }
         | 
| @@ -3,6 +3,7 @@ const path = require('path'); | |
| 3 3 |  | 
| 4 4 | 
             
            module.exports.customRequire = function customRequire(modulePath, filePath) {
         | 
| 5 5 | 
             
            	const resolvedPath = resolveModulePath(modulePath, filePath);
         | 
| 6 | 
            +
            	if(!resolvedPath) throw new Error('Module '+modulePath+' not found');
         | 
| 6 7 | 
             
            	return require(resolvedPath);
         | 
| 7 8 | 
             
            };
         | 
| 8 9 |  | 
| @@ -20,21 +21,40 @@ function resolveModulePath(modulePath, filePath) { | |
| 20 21 | 
             
            		if (fs.existsSync(fullPath + '.json')) {
         | 
| 21 22 | 
             
            			return fullPath + '.json';
         | 
| 22 23 | 
             
            		}
         | 
| 24 | 
            +
            		
         | 
| 23 25 | 
             
            		if (fs.existsSync(fullPath) && fs.statSync(fullPath).isDirectory()) {
         | 
| 24 | 
            -
            			 | 
| 25 | 
            -
            			if (fs.existsSync(packageJsonPath)) {
         | 
| 26 | 
            -
            				const main = require(packageJsonPath).main || 'index.js';
         | 
| 27 | 
            -
            				const mainPath = path.join(fullPath, main);
         | 
| 28 | 
            -
            				if (fs.existsSync(mainPath)) {
         | 
| 29 | 
            -
            					return mainPath;
         | 
| 30 | 
            -
            				}
         | 
| 31 | 
            -
            			}
         | 
| 32 | 
            -
            			const indexPath = path.join(fullPath, 'index.js');
         | 
| 33 | 
            -
            			if (fs.existsSync(indexPath)) {
         | 
| 34 | 
            -
            				return indexPath;
         | 
| 35 | 
            -
            			}
         | 
| 26 | 
            +
            			return searchInPath(fullPath);
         | 
| 36 27 | 
             
            		}
         | 
| 37 | 
            -
            	}
         | 
| 38 28 |  | 
| 39 | 
            -
             | 
| 29 | 
            +
            		const rootPath = modulePath.split('/').shift();
         | 
| 30 | 
            +
            		const halfFullPath = path.join(basePath, rootPath);
         | 
| 31 | 
            +
            		if (fs.existsSync(halfFullPath) && fs.statSync(halfFullPath).isDirectory()) {
         | 
| 32 | 
            +
            			return searchInPath(halfFullPath, ['.'].concat(fullPath.split('/').slice(1)).join('/'));
         | 
| 33 | 
            +
            		}
         | 
| 34 | 
            +
            	}
         | 
| 40 35 | 
             
            }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            function searchInPath(fullPath, exportses){
         | 
| 38 | 
            +
            	const packageJsonPath = path.join(fullPath, 'package.json');
         | 
| 39 | 
            +
            	if (fs.existsSync(packageJsonPath)) {
         | 
| 40 | 
            +
            		const packageJson = require(packageJsonPath);
         | 
| 41 | 
            +
            		let main = packageJson.main || 'index.js';
         | 
| 42 | 
            +
            		if(exportses){
         | 
| 43 | 
            +
            			if(packageJson.exports){
         | 
| 44 | 
            +
            				if(exportses in packageJson.exports) main = packageJson.exports[exportses];
         | 
| 45 | 
            +
            			}
         | 
| 46 | 
            +
            		}
         | 
| 47 | 
            +
            		if(typeof main == "object"){
         | 
| 48 | 
            +
            			if(Array.isArray(main)) main = main[0].require;
         | 
| 49 | 
            +
            			else main = main.require;
         | 
| 50 | 
            +
            		}
         | 
| 51 | 
            +
            		const mainPath = path.join(fullPath, main);
         | 
| 52 | 
            +
            		if (fs.existsSync(mainPath)) {
         | 
| 53 | 
            +
            			return mainPath;
         | 
| 54 | 
            +
            		}
         | 
| 55 | 
            +
            	}
         | 
| 56 | 
            +
            	const indexPath = path.join(fullPath, 'index.js');
         | 
| 57 | 
            +
            	if (fs.existsSync(indexPath)) {
         | 
| 58 | 
            +
            		return indexPath;
         | 
| 59 | 
            +
            	}
         | 
| 60 | 
            +
            }
         | 
| @@ -42,19 +42,6 @@ module.exports.prepareContext = function ( | |
| 42 42 | 
             
                  ...defaultContext,
         | 
| 43 43 | 
             
                  ...pathLib(filepath),
         | 
| 44 44 | 
             
                  ...execLib(filepath),
         | 
| 45 | 
            -
                  require: (package) => {
         | 
| 46 | 
            -
                    try {
         | 
| 47 | 
            -
                      return execOptions.nativeRequire || package.startsWith("node:")
         | 
| 48 | 
            -
                        ? require(
         | 
| 49 | 
            -
                            package.startsWith("node:")
         | 
| 50 | 
            -
                              ? package.split("node:")[1]
         | 
| 51 | 
            -
                              : package,
         | 
| 52 | 
            -
                          )
         | 
| 53 | 
            -
                        : customRequire(package, filepath);
         | 
| 54 | 
            -
                    } catch (e) {
         | 
| 55 | 
            -
                      throw new Error("Module " + package + " not found");
         | 
| 56 | 
            -
                    }
         | 
| 57 | 
            -
                  },
         | 
| 58 45 | 
             
                  ...custom_context,
         | 
| 59 46 | 
             
                };
         | 
| 60 47 | 
             
              }
         | 
| @@ -66,6 +53,7 @@ module.exports.prepareContext = function ( | |
| 66 53 | 
             
                    off: (event, listener) => process.off(event, listener),
         | 
| 67 54 | 
             
                    emit: (event, code) => process.emit(event, code),
         | 
| 68 55 | 
             
                  },
         | 
| 56 | 
            +
                  __execFile: global.fileName,
         | 
| 69 57 | 
             
                  env: process.env,
         | 
| 70 58 | 
             
                  cwd: () => process.cwd(),
         | 
| 71 59 | 
             
                  arch: process.arch,
         | 
| @@ -74,6 +62,21 @@ module.exports.prepareContext = function ( | |
| 74 62 | 
             
              context.global = context;
         | 
| 75 63 | 
             
              context.imports.assert = options.import ?? {};
         | 
| 76 64 | 
             
              context.imp = imp(runPath, context);
         | 
| 65 | 
            +
              context.require = (package) => {
         | 
| 66 | 
            +
                try {
         | 
| 67 | 
            +
                  const search = execOptions.nativeRequire || package.startsWith("node:")
         | 
| 68 | 
            +
                    ? require(
         | 
| 69 | 
            +
                        package.startsWith("node:")
         | 
| 70 | 
            +
                          ? package.split("node:")[1]
         | 
| 71 | 
            +
                          : package,
         | 
| 72 | 
            +
                      )
         | 
| 73 | 
            +
                    : customRequire(package, filepath);
         | 
| 74 | 
            +
                    if(!search) throw new Error("Module " + package + " not found");
         | 
| 75 | 
            +
                    return search;
         | 
| 76 | 
            +
                } catch (e) {
         | 
| 77 | 
            +
                  throw e;
         | 
| 78 | 
            +
                }
         | 
| 79 | 
            +
              };
         | 
| 77 80 | 
             
              context.inc = (package, asserts) => {
         | 
| 78 81 | 
             
                try {
         | 
| 79 82 | 
             
                  if (package.startsWith("node:") || package.startsWith("pkg:"))
         | 
    
        package/lib/rew/modules/yaml.js
    CHANGED
    
    | @@ -22,7 +22,7 @@ function yamlFile(file) { | |
| 22 22 | 
             
            		}),
         | 
| 23 23 | 
             
            	]);
         | 
| 24 24 |  | 
| 25 | 
            -
            	return yaml.load(file.content, { schema });
         | 
| 25 | 
            +
            	return file.content.startsWith('---') ? yaml.loadAll(file.content, { schema })[0] : yaml.load(file.content, { schema });
         | 
| 26 26 | 
             
            }
         | 
| 27 27 |  | 
| 28 28 | 
             
            const importYaml = (module.exports.importYaml = function importYaml(filepath, file) {
         | 
    
        package/lib/rew/pkgs/conf.js
    CHANGED
    
    | @@ -14,7 +14,7 @@ module.exports = (context) => ({ | |
| 14 14 | 
             
            	CONFIG_PATH,
         | 
| 15 15 | 
             
            	_onImport() {
         | 
| 16 16 | 
             
            		if (context.app) {
         | 
| 17 | 
            -
            			return this.create(context.app.config.package);
         | 
| 17 | 
            +
            			return this.create(context.app.config.manifest.package);
         | 
| 18 18 | 
             
            		} else {
         | 
| 19 19 | 
             
            			return this.create(seededID(path.basename(context.module.filepath).replace(/[-_/\.]/g, '')));
         | 
| 20 20 | 
             
            		}
         | 
| @@ -101,6 +101,7 @@ module.exports = (context) => ({ | |
| 101 101 | 
             
            			remove: (key) => defaultCenter.remove(key),
         | 
| 102 102 | 
             
            			root: rootPath,
         | 
| 103 103 | 
             
            			package: packageName,
         | 
| 104 | 
            +
            			loadYaml: (file) => jsYaml.load(fs.readFileSync(file, { encoding: 'utf-8' }))
         | 
| 104 105 | 
             
            		};
         | 
| 105 106 | 
             
            	},
         | 
| 106 107 | 
             
            });
         |