@makano/rew 1.2.95 → 1.2.96
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/lib/rew/cli/cli.js +31 -4
- package/lib/rew/cli/helpers.js +26 -1
- package/lib/rew/cli/miscUtils.js +41 -0
- package/lib/rew/cli/utils.js +52 -10
- package/lib/rew/functions/import.js +18 -9
- package/lib/rew/modules/compiler.js +5 -3
- package/package.json +1 -1
package/lib/rew/cli/cli.js
CHANGED
|
@@ -338,18 +338,45 @@ yargs(hideBin(process.argv))
|
|
|
338
338
|
}
|
|
339
339
|
},
|
|
340
340
|
)
|
|
341
|
-
|
|
342
341
|
.command(
|
|
343
342
|
'cache <command>',
|
|
344
343
|
'Manage cache',
|
|
344
|
+
(yargs) => {
|
|
345
|
+
yargs
|
|
346
|
+
.positional('command', {
|
|
347
|
+
describe: 'Command to clear/list/show',
|
|
348
|
+
type: 'string',
|
|
349
|
+
})
|
|
350
|
+
.example('rew cache list', 'Lists all caches')
|
|
351
|
+
.example('rew cache clear', 'Clears all caches')
|
|
352
|
+
.example('rew cache clear all', 'Clears all caches')
|
|
353
|
+
.example('rew cache clear [id]', 'Clears all caches for id [id]')
|
|
354
|
+
.example('rew cache show [id]', 'Shows commits downloaded for [id]')
|
|
355
|
+
.example('rew cache show [id]', 'Shows commits downloaded for [id]')
|
|
356
|
+
.example('rew cache show [id]/clone', 'Shows the contents for [id]')
|
|
357
|
+
.example('rew cache show [id]#tag', 'Shows the tag for [id]')
|
|
358
|
+
.example('rew cache show [id]#commit', 'Shows the current commit for [id]')
|
|
359
|
+
.example('rew cache show [id]#name', 'Shows the name for [id]')
|
|
360
|
+
.example('rew cache show [id]/clone/app.yaml', 'Shows the app config for [id]')
|
|
361
|
+
.example('rew cache show [id]/clone/path/to/file', 'Gives you the path to the file inside [id]')
|
|
362
|
+
.example('rew cache show [id]/clone/path/to/file', 'Gives you the path to the file inside [id]')
|
|
363
|
+
.example('rew cache install [id]', 'Installs cache')
|
|
364
|
+
},
|
|
365
|
+
async (argv) => {
|
|
366
|
+
require('./utils').cache(argv.command, ...argv._.slice(1));
|
|
367
|
+
},
|
|
368
|
+
)
|
|
369
|
+
.command(
|
|
370
|
+
'misc <command>',
|
|
371
|
+
'Misc functions',
|
|
345
372
|
(yargs) => {
|
|
346
373
|
yargs.positional('command', {
|
|
347
|
-
describe: '
|
|
374
|
+
describe: 'Misc command name',
|
|
348
375
|
type: 'string',
|
|
349
376
|
});
|
|
350
377
|
},
|
|
351
|
-
|
|
352
|
-
require('./
|
|
378
|
+
(argv) => {
|
|
379
|
+
require('./miscUtils')[argv.command](...argv._.slice(1));
|
|
353
380
|
},
|
|
354
381
|
)
|
|
355
382
|
.command(
|
package/lib/rew/cli/helpers.js
CHANGED
|
@@ -35,11 +35,36 @@ function getAllPipeInput(){
|
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
*
|
|
40
|
+
* @param {string} string
|
|
41
|
+
* @param {Record<string,(replacedString: string, originalString: string) => any>} order
|
|
42
|
+
* @returns { { string: string, [key: string]: any } }
|
|
43
|
+
*/
|
|
44
|
+
function hashTags(string, order){
|
|
45
|
+
const hashes = Object.keys(order);
|
|
46
|
+
const h = {};
|
|
47
|
+
let s = string;
|
|
48
|
+
for(let i of hashes){
|
|
49
|
+
if(string.includes(`#${i}`)){
|
|
50
|
+
const str = s.replace(`#${i}`, '');
|
|
51
|
+
h[i] = order[i](str, string);
|
|
52
|
+
if(h[i]?.$set) {s = h[i].$set; string = s }
|
|
53
|
+
else s = str;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
string: s,
|
|
58
|
+
...h
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
38
62
|
module.exports = {
|
|
39
63
|
binpath,
|
|
40
64
|
logspath,
|
|
41
65
|
cachepath,
|
|
42
66
|
localBinPath,
|
|
43
67
|
npm_package_name,
|
|
44
|
-
getAllPipeInput
|
|
68
|
+
getAllPipeInput,
|
|
69
|
+
hashTags
|
|
45
70
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const { findAppInfo } = require("../misc/findAppInfo");
|
|
2
|
+
const { log } = require("./log");
|
|
3
|
+
const colors = require('colors');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const { CONFIG_PATH } = require("../const/config_path");
|
|
7
|
+
|
|
8
|
+
module.exports = {
|
|
9
|
+
types(projectPath){
|
|
10
|
+
if(!projectPath) projectPath = process.cwd();
|
|
11
|
+
else projectPath = path.resolve(process.cwd(), projectPath);
|
|
12
|
+
const projectinfo = findAppInfo(projectPath+'/app.yaml');
|
|
13
|
+
if(!projectinfo){
|
|
14
|
+
log('Path not a rew app'.red.bold, ':end')
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
let typesToLoad = ['rew'];
|
|
18
|
+
if(projectinfo.config?.types){
|
|
19
|
+
typesToLoad = projectinfo.config?.types;
|
|
20
|
+
}
|
|
21
|
+
fs.mkdirSync(path.join(projectPath, 'node_modules/@types/rew'), { recursive: true });
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
typesToLoad.forEach(name => {
|
|
25
|
+
let filename = name+'.d.ts';
|
|
26
|
+
if(name == 'rew'){
|
|
27
|
+
fs.copyFileSync(path.join(__dirname, '../../../runtime.d.ts'), path.join(projectPath, 'node_modules/@types/rew/index.d.ts'));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
let p = path.resolve(CONFIG_PATH, name, 'app', 'types.d.ts');
|
|
31
|
+
|
|
32
|
+
if(name.indexOf('/') > -1) {
|
|
33
|
+
const fn = name.split('/').slice(1).join('/')+'.d.ts';
|
|
34
|
+
p = path.resolve(CONFIG_PATH, name.split('/')[0], 'app', fn);
|
|
35
|
+
filename = name.split('/')[0]+'-'+path.basename(fn);
|
|
36
|
+
}
|
|
37
|
+
if(fs.existsSync(p)) fs.copyFileSync(p, path.join(projectPath, 'node_modules/@types/rew/'+filename));
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
}
|
package/lib/rew/cli/utils.js
CHANGED
|
@@ -12,9 +12,7 @@ const { to_qrew } = require('../qrew/compile');
|
|
|
12
12
|
const { findAppInfo } = require('../misc/findAppInfo');
|
|
13
13
|
const { req } = require('../misc/req');
|
|
14
14
|
const { CONFIG_PATH } = require('../const/config_path');
|
|
15
|
-
const {
|
|
16
|
-
const { execRewFile, runFileWithArgv } = require('./run');
|
|
17
|
-
const { seededID } = require('../misc/seededid');
|
|
15
|
+
const { runFileWithArgv } = require('./run');
|
|
18
16
|
const loading = require('loading-cli');
|
|
19
17
|
const sleep = require('../functions/sleep');
|
|
20
18
|
const { gen_key } = require('../misc/bin');
|
|
@@ -24,7 +22,8 @@ const {
|
|
|
24
22
|
binpath,
|
|
25
23
|
logspath,
|
|
26
24
|
cachepath,
|
|
27
|
-
localBinPath
|
|
25
|
+
localBinPath,
|
|
26
|
+
hashTags
|
|
28
27
|
} = require('./helpers');
|
|
29
28
|
const { input } = require('../functions/stdout');
|
|
30
29
|
|
|
@@ -94,9 +93,13 @@ module.exports = {
|
|
|
94
93
|
const project = {};
|
|
95
94
|
const create = () => {
|
|
96
95
|
fs.mkdirSync(projectPath, { recursive: true });
|
|
96
|
+
const confObj = { 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: [] } };
|
|
97
97
|
const confPath = path.join(projectPath, 'app.yaml');
|
|
98
98
|
const entryFile = path.join(projectPath, 'main'+(project.civet ? REW_FILE_TYPE.EXTENSION : '.coffee'));
|
|
99
|
-
|
|
99
|
+
if(project.intellisense) {
|
|
100
|
+
confObj.types = ['rew'];
|
|
101
|
+
}
|
|
102
|
+
fs.writeFileSync(confPath, jsYaml.dump(confObj));
|
|
100
103
|
fs.writeFileSync(entryFile, `print("Hello World!")`);
|
|
101
104
|
fs.mkdirSync(path.join(projectPath, 'assets'), { recursive: true });
|
|
102
105
|
if (project.git) {
|
|
@@ -104,8 +107,8 @@ module.exports = {
|
|
|
104
107
|
execSync('cd ' + projectPath + ' && git init . && git branch -m main', { stdio: 'ignore' });
|
|
105
108
|
}
|
|
106
109
|
if(project.intellisense){
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
require('./miscUtils')
|
|
111
|
+
.types(projectPath);
|
|
109
112
|
}
|
|
110
113
|
execSync('cd ' + projectPath + ' && npm init -y', { stdio: 'ignore' });
|
|
111
114
|
if(project.civet){
|
|
@@ -382,11 +385,50 @@ module.exports = {
|
|
|
382
385
|
processFile(filePath, importsArray);
|
|
383
386
|
log(' Compiled'.yellow, (importsArray.length + 1 + '').blue, `file${importsArray.length ? 's' : ''}.`.yellow, ':end');
|
|
384
387
|
},
|
|
385
|
-
cache(command){
|
|
388
|
+
cache(command, file){
|
|
389
|
+
|
|
390
|
+
const findGitCommitPath = (p) => {
|
|
391
|
+
const heads = path.join(p, '.git/refs/heads');
|
|
392
|
+
if(!fs.existsSync(heads)) return '';
|
|
393
|
+
const refs = fs.readdirSync(heads);
|
|
394
|
+
if(!refs.length) return '';
|
|
395
|
+
return fs.readFileSync(path.join(heads, refs[0]), { encoding: 'utf-8' }).trim();
|
|
396
|
+
}
|
|
397
|
+
|
|
386
398
|
if(command == 'list'){
|
|
387
399
|
console.log(fs.readdirSync(cachepath).join('\n').trim());
|
|
388
|
-
} else {
|
|
389
|
-
|
|
400
|
+
} else if(command == 'clear'){
|
|
401
|
+
if(file) fs.rmSync(path.join(cachepath, file), { recursive: true });
|
|
402
|
+
else if(file == 'all') fs.readdirSync(cachepath).forEach(file => fs.rmSync(path.join(cachepath, file), { recursive: true }));
|
|
403
|
+
} else if(command == 'install'){
|
|
404
|
+
if(!file) return process.exit(1);
|
|
405
|
+
this.installApp(path.join(cachepath, file, 'clone'), {
|
|
406
|
+
update: true
|
|
407
|
+
});
|
|
408
|
+
} else if(command == 'show'){
|
|
409
|
+
if(!file) return console.log(fs.readdirSync(cachepath).join('\n').trim());
|
|
410
|
+
|
|
411
|
+
const hashed = hashTags(file, {
|
|
412
|
+
tag: (str) => ({ $set: str + '#name#commit' }),
|
|
413
|
+
commit: (file) => findGitCommitPath(path.join(cachepath, file.replace(/#name/, ''), 'clone')),
|
|
414
|
+
name: (file) => jsYaml.load(fs.readFileSync(path.join(cachepath, file, 'clone/app.yaml'), { encoding: 'utf-8' }).trim()).manifest.package
|
|
415
|
+
});
|
|
416
|
+
file = hashed.string;
|
|
417
|
+
|
|
418
|
+
if(hashed.tag){
|
|
419
|
+
return console.log(hashed.name +':'+ hashed.commit);
|
|
420
|
+
}
|
|
421
|
+
if(hashed.commit) return console.log(hashed.commit);
|
|
422
|
+
if(hashed.name) return console.log(hashed.name);
|
|
423
|
+
|
|
424
|
+
const f = path.join(cachepath, file);
|
|
425
|
+
if(!fs.existsSync(f)) return;
|
|
426
|
+
if(fs.statSync(f).isDirectory()) console.log(
|
|
427
|
+
fs.readdirSync(f).join('\n')
|
|
428
|
+
);
|
|
429
|
+
else if(file.endsWith('app.yaml')){
|
|
430
|
+
console.log(fs.readFileSync(f, { encoding: 'utf-8' }).trim());
|
|
431
|
+
} else console.log(f);
|
|
390
432
|
}
|
|
391
433
|
},
|
|
392
434
|
async cloneGit(gitpath, opts) {
|
|
@@ -9,6 +9,12 @@ const { execOptions } = require('../const/opt');
|
|
|
9
9
|
const { REW_FILE_TYPE } = require('../const/ext');
|
|
10
10
|
const { straceLog } = require('../misc/strace');
|
|
11
11
|
|
|
12
|
+
const _returns = (options, content) => {
|
|
13
|
+
if(options.useDefaultForPackages){
|
|
14
|
+
return content?.default ? content : { default: content };
|
|
15
|
+
} else return content;
|
|
16
|
+
}
|
|
17
|
+
|
|
12
18
|
const cachedFiles = [];
|
|
13
19
|
module.exports.cleanCache = () => {
|
|
14
20
|
while(cachedFiles.length) cachedFiles.pop();
|
|
@@ -37,7 +43,10 @@ const lookUpInOtherApps = (fullPath) => {
|
|
|
37
43
|
module.exports.imp = function (runPath, context) {
|
|
38
44
|
return function (filename, options = {}) {
|
|
39
45
|
if (!options) options = {};
|
|
40
|
-
let type = options.type
|
|
46
|
+
let type = options.type ? options.type : filename.endsWith('.coffee') ? 'coffee' : (
|
|
47
|
+
filename.endsWith(REW_FILE_TYPE.EXTENSION) ? REW_FILE_TYPE.TYPE :
|
|
48
|
+
path.extname(filename).slice(1)
|
|
49
|
+
);
|
|
41
50
|
let exports,
|
|
42
51
|
ispkg = findPackage(filename);
|
|
43
52
|
|
|
@@ -58,10 +67,10 @@ module.exports.imp = function (runPath, context) {
|
|
|
58
67
|
else filepath = otherPath;
|
|
59
68
|
};
|
|
60
69
|
|
|
61
|
-
const foundCache = cachedFiles.find((f) => f.filepath == filepath);
|
|
70
|
+
const foundCache = cachedFiles.find((f) => f.filepath == type+':'+filepath);
|
|
62
71
|
|
|
63
72
|
if (!ispkg && foundCache) {
|
|
64
|
-
exports = foundCache.exports;
|
|
73
|
+
exports = options.useDefaultForPackages === false ? foundCache.exports.default || foundCache.exports : _returns(options, foundCache.exports);
|
|
65
74
|
}
|
|
66
75
|
|
|
67
76
|
if (!ispkg && !existsSync(filepath) && !foundCache) {
|
|
@@ -117,17 +126,17 @@ module.exports.imp = function (runPath, context) {
|
|
|
117
126
|
const f = getFile(filepath);
|
|
118
127
|
if (type == 'yaml') {
|
|
119
128
|
straceLog('===> FROM_YAML()');
|
|
120
|
-
exports = importYaml(f.path, f);
|
|
129
|
+
exports = _returns(options, importYaml(f.path, f));
|
|
121
130
|
} else if (type == 'json') {
|
|
122
131
|
straceLog('===>');
|
|
123
132
|
try {
|
|
124
|
-
exports = JSON.parse(f.content);
|
|
133
|
+
exports = _returns(options, JSON.parse(f.content));
|
|
125
134
|
} catch (e) {
|
|
126
|
-
exports = {};
|
|
135
|
+
exports = _returns(options, {});
|
|
127
136
|
}
|
|
128
137
|
} else {
|
|
129
138
|
straceLog('===> FROM_TEXT');
|
|
130
|
-
exports = f.content;
|
|
139
|
+
exports = _returns(options, f.content);
|
|
131
140
|
}
|
|
132
141
|
}
|
|
133
142
|
|
|
@@ -143,13 +152,13 @@ module.exports.imp = function (runPath, context) {
|
|
|
143
152
|
// descriptive code
|
|
144
153
|
// you put them in comment blocks
|
|
145
154
|
// and name it something
|
|
146
|
-
// then you can
|
|
155
|
+
// then you can simply see
|
|
147
156
|
// which part of a code contains a certain
|
|
148
157
|
// task. cool right?
|
|
149
158
|
|
|
150
159
|
//** If is not package, post exec section
|
|
151
160
|
/**/ if (!ispkg) context.module.imports.push(filepath);
|
|
152
|
-
/**/ if (!ispkg) cachedFiles.push({ filepath, exports });
|
|
161
|
+
/**/ if (!ispkg) cachedFiles.push({ filepath: type+':'+filepath, exports });
|
|
153
162
|
//**
|
|
154
163
|
|
|
155
164
|
//** Mock imports section
|
|
@@ -434,6 +434,7 @@ function compileRewStuff(content, options) {
|
|
|
434
434
|
straceLog('IMPORT()');
|
|
435
435
|
straceLog('==> WARN: SLOWS DOWN TOKENIZATION');
|
|
436
436
|
let ind = i + n + 2;
|
|
437
|
+
let isAs = false;
|
|
437
438
|
|
|
438
439
|
let defaultName;
|
|
439
440
|
if (nextToken.type === 'STRING') {
|
|
@@ -469,6 +470,7 @@ function compileRewStuff(content, options) {
|
|
|
469
470
|
if(useImp(nameToken, options)) updateAliases(aliases);
|
|
470
471
|
result += `${defaultName} ${options.type == 'coffee' ? '=' : ':='} inc ${nameToken.value}`;
|
|
471
472
|
i = ind + 6;
|
|
473
|
+
isAs = true;
|
|
472
474
|
}
|
|
473
475
|
} else if (nextToken) {
|
|
474
476
|
const nameToken = fnextToken(ind, tokens, 'STRING');
|
|
@@ -505,14 +507,14 @@ function compileRewStuff(content, options) {
|
|
|
505
507
|
if(assertionToken.token.type == 'OTHER' && assertionToken.token.value == '{'){
|
|
506
508
|
hooks.push({
|
|
507
509
|
index: assertionToken.token.ti,
|
|
508
|
-
value: ' useDefaultForPackages: true, '
|
|
510
|
+
value: ' useDefaultForPackages: '+(isAs?'false':'true')+', '
|
|
509
511
|
})
|
|
510
512
|
} else {
|
|
511
|
-
result += 'useDefaultForPackages: true, '
|
|
513
|
+
result += 'useDefaultForPackages: '+(isAs?'false':'true')+', '
|
|
512
514
|
}
|
|
513
515
|
i += 3;
|
|
514
516
|
} else {
|
|
515
|
-
result += ", { useDefaultForPackages: true }"
|
|
517
|
+
result += ", { useDefaultForPackages: "+(isAs?'false':'true')+" }"
|
|
516
518
|
}
|
|
517
519
|
|
|
518
520
|
continue;
|