@makano/rew 1.2.95 → 1.2.97
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +7 -1
- 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/const/stdns.js +1 -0
- package/lib/rew/const/usage.js +41 -2
- package/lib/rew/functions/import.js +19 -9
- package/lib/rew/functions/types.js +2 -2
- package/lib/rew/modules/compiler.js +14 -7
- package/lib/rew/modules/context.js +41 -32
- package/lib/rew/modules/runtime.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -12,9 +12,15 @@ Rew
|
|
12
12
|
<a href="https://www.npmjs.com/package/rayous"> <img src="https://img.shields.io/npm/v/@makano/rew?style=for-the-badge&logo=npm&color=b4befe&logoColor=9399b2&labelColor=181825" alt="npm version" /></a>
|
13
13
|
</p>
|
14
14
|
|
15
|
-
Rew is a simple lightweight coffeescript runtime, made to
|
15
|
+
Rew is a simple lightweight coffeescript runtime, made to simplify using coffescript and revive it
|
16
16
|
in the process.
|
17
17
|
|
18
|
+
```coffee
|
19
|
+
using namespace std::ns ->
|
20
|
+
define Main ->
|
21
|
+
print 'hello world' |> str
|
22
|
+
```
|
23
|
+
|
18
24
|
## Getting Started
|
19
25
|
1. Install `rew` globally
|
20
26
|
```bash
|
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) {
|
@@ -0,0 +1 @@
|
|
1
|
+
module.exports = class STDNS {}
|
package/lib/rew/const/usage.js
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
const STDNS = require("./stdns");
|
1
2
|
|
2
3
|
|
3
4
|
|
4
5
|
const JSX_FRAGMENT_SYMBOL = Symbol('fragment');
|
5
|
-
module.exports.USING_DEFAULT = {
|
6
|
+
const USING_DEFAULT = module.exports.USING_DEFAULT = {
|
6
7
|
JSX: {
|
7
8
|
param: (param, fragment) => param ? ({ createElement: param, Fragment: fragment || param(JSX_FRAGMENT_SYMBOL, { isFragment: true }), fragmentSymbol: JSX_FRAGMENT_SYMBOL }) : {},
|
8
9
|
use: (options) => options.jsx = true
|
@@ -15,7 +16,7 @@ module.exports.USING_DEFAULT = {
|
|
15
16
|
}
|
16
17
|
}
|
17
18
|
|
18
|
-
|
19
|
+
class Usage {
|
19
20
|
name = "null";
|
20
21
|
trigger = () => {};
|
21
22
|
save = true;
|
@@ -61,6 +62,7 @@ module.exports.Usage = class Usage {
|
|
61
62
|
}
|
62
63
|
}
|
63
64
|
}
|
65
|
+
module.exports.Usage = Usage;
|
64
66
|
|
65
67
|
class Namespace extends module.exports.Usage {
|
66
68
|
namespace = {};
|
@@ -84,7 +86,44 @@ class Namespace extends module.exports.Usage {
|
|
84
86
|
module.exports.Namespace = Namespace;
|
85
87
|
|
86
88
|
module.exports.namespace = (namespace, cb, parent) => {
|
89
|
+
if(namespace instanceof STDNS) {
|
90
|
+
if(namespace['@cb'] && !cb) {
|
91
|
+
cb = namespace['@cb'];
|
92
|
+
delete namespace['@cb'];
|
93
|
+
}
|
94
|
+
}
|
87
95
|
return new Namespace(namespace, cb, parent);
|
88
96
|
}
|
89
97
|
|
98
|
+
module.exports.usingFunction = (context, runtime) => {
|
99
|
+
return function using(name, ...params) {
|
100
|
+
if(name instanceof Usage.Group){
|
101
|
+
params.unshift(...name.g.slice(1));
|
102
|
+
name = name.g[0];
|
103
|
+
}
|
104
|
+
if(USING_DEFAULT[name]){
|
105
|
+
if(USING_DEFAULT[name].param) {
|
106
|
+
context.__using__[name] = USING_DEFAULT[name].param(...params);
|
107
|
+
}
|
108
|
+
} else if(name instanceof Namespace) {
|
109
|
+
const trigger = name.trigger;
|
110
|
+
const parentContext = name.parent || context;
|
111
|
+
const childContext = {...parentContext, ...name.namespace, trigger};
|
112
|
+
childContext.$self = name.namespace;
|
113
|
+
childContext.$parent = parentContext;
|
114
|
+
const code = `(${trigger.toString()})()`;
|
115
|
+
if(name.onUse) name.onUse();
|
116
|
+
const r = runtime.exec(code, childContext, code, context.module.filepath);
|
117
|
+
if(name.onAfterUse) name.onAfterUse();
|
118
|
+
return r;
|
119
|
+
} else if(name instanceof Usage) {
|
120
|
+
const v = name.trigger(...params) || true;
|
121
|
+
if(name.save !== false) context.__using__[name.name] = v;
|
122
|
+
return v;
|
123
|
+
} else {
|
124
|
+
context.__using__[name] = params.length ? params.length > 1 ? [...params] : params : true;
|
125
|
+
}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
90
129
|
module.exports.namespace.group = (group, props) => new Namespace.Group(group, props);
|
@@ -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,11 @@ const lookUpInOtherApps = (fullPath) => {
|
|
37
43
|
module.exports.imp = function (runPath, context) {
|
38
44
|
return function (filename, options = {}) {
|
39
45
|
if (!options) options = {};
|
40
|
-
|
46
|
+
if(filename == 'std' || filename == '#std') return {};
|
47
|
+
let type = options.type ? options.type : filename.endsWith('.coffee') ? 'coffee' : (
|
48
|
+
filename.endsWith(REW_FILE_TYPE.EXTENSION) ? REW_FILE_TYPE.TYPE :
|
49
|
+
path.extname(filename).slice(1)
|
50
|
+
);
|
41
51
|
let exports,
|
42
52
|
ispkg = findPackage(filename);
|
43
53
|
|
@@ -58,10 +68,10 @@ module.exports.imp = function (runPath, context) {
|
|
58
68
|
else filepath = otherPath;
|
59
69
|
};
|
60
70
|
|
61
|
-
const foundCache = cachedFiles.find((f) => f.filepath == filepath);
|
71
|
+
const foundCache = cachedFiles.find((f) => f.filepath == type+':'+filepath);
|
62
72
|
|
63
73
|
if (!ispkg && foundCache) {
|
64
|
-
exports = foundCache.exports;
|
74
|
+
exports = options.useDefaultForPackages === false ? foundCache.exports.default || foundCache.exports : _returns(options, foundCache.exports);
|
65
75
|
}
|
66
76
|
|
67
77
|
if (!ispkg && !existsSync(filepath) && !foundCache) {
|
@@ -117,17 +127,17 @@ module.exports.imp = function (runPath, context) {
|
|
117
127
|
const f = getFile(filepath);
|
118
128
|
if (type == 'yaml') {
|
119
129
|
straceLog('===> FROM_YAML()');
|
120
|
-
exports = importYaml(f.path, f);
|
130
|
+
exports = _returns(options, importYaml(f.path, f));
|
121
131
|
} else if (type == 'json') {
|
122
132
|
straceLog('===>');
|
123
133
|
try {
|
124
|
-
exports = JSON.parse(f.content);
|
134
|
+
exports = _returns(options, JSON.parse(f.content));
|
125
135
|
} catch (e) {
|
126
|
-
exports = {};
|
136
|
+
exports = _returns(options, {});
|
127
137
|
}
|
128
138
|
} else {
|
129
139
|
straceLog('===> FROM_TEXT');
|
130
|
-
exports = f.content;
|
140
|
+
exports = _returns(options, f.content);
|
131
141
|
}
|
132
142
|
}
|
133
143
|
|
@@ -143,13 +153,13 @@ module.exports.imp = function (runPath, context) {
|
|
143
153
|
// descriptive code
|
144
154
|
// you put them in comment blocks
|
145
155
|
// and name it something
|
146
|
-
// then you can
|
156
|
+
// then you can simply see
|
147
157
|
// which part of a code contains a certain
|
148
158
|
// task. cool right?
|
149
159
|
|
150
160
|
//** If is not package, post exec section
|
151
161
|
/**/ if (!ispkg) context.module.imports.push(filepath);
|
152
|
-
/**/ if (!ispkg) cachedFiles.push({ filepath, exports });
|
162
|
+
/**/ if (!ispkg) cachedFiles.push({ filepath: type+':'+filepath, exports });
|
153
163
|
//**
|
154
164
|
|
155
165
|
//** Mock imports section
|
@@ -36,7 +36,7 @@ function typedef(value, strict = false) {
|
|
36
36
|
? value.constructor
|
37
37
|
: _defaultConstructors[getType(value)],
|
38
38
|
type: getType(value),
|
39
|
-
|
39
|
+
isConstructed: typeof value === 'object' && value !== null && !Array.isArray(value),
|
40
40
|
isEmpty: typeof value == 'object' ? !Object.keys(value).length : typeof value == 'string' ? value == '' : typeof value !== 'function',
|
41
41
|
});
|
42
42
|
}
|
@@ -70,7 +70,7 @@ function typeis(obj, typeDef, missingObjects = false) {
|
|
70
70
|
// Resolve Type
|
71
71
|
if (typeof typeDef == 'function' && typeDef.type instanceof Type) typeDef = typeDef.type;
|
72
72
|
|
73
|
-
if (typeDef.
|
73
|
+
if (typeDef.isConstructed && typeDef.class && !(obj instanceof typeDef.class)) {
|
74
74
|
return missingObjects ? [false] : false;
|
75
75
|
}
|
76
76
|
|
@@ -285,7 +285,7 @@ function useImp(token, options){
|
|
285
285
|
let packageName = value.slice(1);
|
286
286
|
token.value = dem+packageName+dem;
|
287
287
|
straceLog('IMP() with HEADER for', packageName);
|
288
|
-
return includeFile(packageName, options);
|
288
|
+
return includeFile(packageName !== 'std' ? packageName : '*'+packageName, options);
|
289
289
|
}
|
290
290
|
return '';
|
291
291
|
}
|
@@ -378,7 +378,7 @@ function compileRewStuff(content, options) {
|
|
378
378
|
|
379
379
|
if (token.type === 'COMMENT' && token.value.slice(1).trim() === '@cls') {
|
380
380
|
options.cls = true;
|
381
|
-
straceLog('
|
381
|
+
straceLog('CLI_SYNTAX() ENABLE');
|
382
382
|
straceLog('===> HIGHLY EXPERIMENTAL FEATURE DETECTED');
|
383
383
|
}
|
384
384
|
|
@@ -401,6 +401,11 @@ function compileRewStuff(content, options) {
|
|
401
401
|
token.value = 'pub';
|
402
402
|
straceLog('EXPORT() => TRANSLATING TO pub');
|
403
403
|
}
|
404
|
+
|
405
|
+
if (token.type === 'IDENTIFIER' && token.value === 'package' && nextToken.type == 'STRING') {
|
406
|
+
token.value = 'appPackage';
|
407
|
+
straceLog('APP_PACKAGE_CHANGE()');
|
408
|
+
}
|
404
409
|
|
405
410
|
if (token.type === 'IDENTIFIER' && token.value === 'using' && !options.disableUse) {
|
406
411
|
straceLog('USING()');
|
@@ -432,14 +437,15 @@ function compileRewStuff(content, options) {
|
|
432
437
|
if (token.type === 'IDENTIFIER' && token.value === 'import' && !options.keepImports) {
|
433
438
|
// console.log(nextToken.type);
|
434
439
|
straceLog('IMPORT()');
|
435
|
-
straceLog('==> WARN: SLOWS DOWN
|
440
|
+
straceLog('==> WARN: SLOWS DOWN COMPILATION');
|
436
441
|
let ind = i + n + 2;
|
442
|
+
let isAs = false;
|
437
443
|
|
438
444
|
let defaultName;
|
439
445
|
if (nextToken.type === 'STRING') {
|
440
446
|
straceLog('==> SIMPLE');
|
447
|
+
if(useImp(nextToken, options)) updateAliases(aliases);
|
441
448
|
result += `inc ${nextToken.value}`;
|
442
|
-
if(useImp(nameToken, options)) updateAliases(aliases);
|
443
449
|
i += n;
|
444
450
|
} else if (nextToken.value === '{') {
|
445
451
|
const closingBraceToken = fnextToken(ind, tokens, 'OTHER', '}');
|
@@ -469,6 +475,7 @@ function compileRewStuff(content, options) {
|
|
469
475
|
if(useImp(nameToken, options)) updateAliases(aliases);
|
470
476
|
result += `${defaultName} ${options.type == 'coffee' ? '=' : ':='} inc ${nameToken.value}`;
|
471
477
|
i = ind + 6;
|
478
|
+
isAs = true;
|
472
479
|
}
|
473
480
|
} else if (nextToken) {
|
474
481
|
const nameToken = fnextToken(ind, tokens, 'STRING');
|
@@ -505,14 +512,14 @@ function compileRewStuff(content, options) {
|
|
505
512
|
if(assertionToken.token.type == 'OTHER' && assertionToken.token.value == '{'){
|
506
513
|
hooks.push({
|
507
514
|
index: assertionToken.token.ti,
|
508
|
-
value: ' useDefaultForPackages: true, '
|
515
|
+
value: ' useDefaultForPackages: '+(isAs?'false':'true')+', '
|
509
516
|
})
|
510
517
|
} else {
|
511
|
-
result += 'useDefaultForPackages: true, '
|
518
|
+
result += 'useDefaultForPackages: '+(isAs?'false':'true')+', '
|
512
519
|
}
|
513
520
|
i += 3;
|
514
521
|
} else {
|
515
|
-
result += ", { useDefaultForPackages: true }"
|
522
|
+
result += ", { useDefaultForPackages: "+(isAs?'false':'true')+" }"
|
516
523
|
}
|
517
524
|
|
518
525
|
continue;
|
@@ -8,11 +8,11 @@ const pathLib = require("../functions/path");
|
|
8
8
|
const path = require("path");
|
9
9
|
const execLib = require("../functions/exec");
|
10
10
|
const { findAppInfo } = require("../misc/findAppInfo");
|
11
|
-
const {
|
11
|
+
const { Usage, usingFunction } = require("../const/usage");
|
12
12
|
const runtime = require("./runtime");
|
13
|
-
const { permission } = require("process");
|
14
13
|
const { straceLog } = require("../misc/strace");
|
15
14
|
const reval = require("../functions/reval");
|
15
|
+
const STDNS = require("../const/stdns");
|
16
16
|
|
17
17
|
let mainFile = "";
|
18
18
|
const isMainFile = (filepath) => filepath == mainFile;
|
@@ -47,14 +47,41 @@ module.exports.prepareContext = function (
|
|
47
47
|
...context,
|
48
48
|
};
|
49
49
|
} else {
|
50
|
+
const std = {...defaultContext};
|
50
51
|
context = {
|
51
52
|
...context,
|
52
|
-
...
|
53
|
+
...std,
|
53
54
|
...pathLib(filepath),
|
54
55
|
...execLib(filepath),
|
55
56
|
...custom_context,
|
56
57
|
Usage
|
57
58
|
};
|
59
|
+
std.prototype = { ns: (cb) => {
|
60
|
+
return new (class extends STDNS {
|
61
|
+
constructor(){
|
62
|
+
super();
|
63
|
+
for(let i in std){
|
64
|
+
this[i] = std[i];
|
65
|
+
}
|
66
|
+
this.define = std.prototype.define;
|
67
|
+
this.Main = std.prototype.Main;
|
68
|
+
this['@cb'] = cb;
|
69
|
+
}
|
70
|
+
});
|
71
|
+
}, define: (name, object) => {
|
72
|
+
if(Array.isArray(name) && name.length == 2 && typeof name[0] == 'string'){
|
73
|
+
object = name[1];
|
74
|
+
name = name[0];
|
75
|
+
}
|
76
|
+
if(!context.module.exports) context.module.exports = {};
|
77
|
+
context.module.exports[name] = object;
|
78
|
+
context[name] = object;
|
79
|
+
}, Main: (cb) => (['main', cb?.main ?? cb]), attach: (object) => {
|
80
|
+
for(let i in object){
|
81
|
+
if(!context[i]) context[i] = object[i];
|
82
|
+
}
|
83
|
+
} }
|
84
|
+
context.std = std;
|
58
85
|
}
|
59
86
|
if (!context.process)
|
60
87
|
context.process = {
|
@@ -70,10 +97,19 @@ module.exports.prepareContext = function (
|
|
70
97
|
abort: () => process.abort(),
|
71
98
|
kill: () => process.kill(),
|
72
99
|
exit: (code) => process.exit(code),
|
100
|
+
chdir: (dir) => process.chdir(dir),
|
101
|
+
disconnect: () => process.disconnect(),
|
73
102
|
arch: process.arch,
|
74
103
|
pid: process.pid,
|
75
104
|
platform: process.platform,
|
76
|
-
|
105
|
+
channel: process.channel,
|
106
|
+
uptime: () => process.uptime(),
|
107
|
+
nextTick: (callback, ...args) => process.nextTick(callback, ...args),
|
108
|
+
permission: process.permission,
|
109
|
+
transmit: {
|
110
|
+
send: (...data) => process.send(...data),
|
111
|
+
recieve: (cb) => process.on('message', cb)
|
112
|
+
}
|
77
113
|
};
|
78
114
|
|
79
115
|
context.global = context;
|
@@ -120,34 +156,7 @@ module.exports.prepareContext = function (
|
|
120
156
|
context.pub = pubFunction(context);
|
121
157
|
context.exports = exportsFunction(context);
|
122
158
|
|
123
|
-
context.using = (
|
124
|
-
if(name instanceof Usage.Group){
|
125
|
-
params.unshift(...name.g.slice(1));
|
126
|
-
name = name.g[0];
|
127
|
-
}
|
128
|
-
if(USING_DEFAULT[name]){
|
129
|
-
if(USING_DEFAULT[name].param) {
|
130
|
-
context.__using__[name] = USING_DEFAULT[name].param(...params);
|
131
|
-
}
|
132
|
-
} else if(name instanceof Namespace) {
|
133
|
-
const trigger = name.trigger;
|
134
|
-
const parentContext = name.parent || context;
|
135
|
-
const childContext = {...parentContext, ...name.namespace, trigger};
|
136
|
-
childContext.currentNamespace = name.namespace;
|
137
|
-
childContext.parentNamespace = parentContext;
|
138
|
-
const code = `(${trigger.toString()})()`;
|
139
|
-
if(name.onUse) name.onUse();
|
140
|
-
const r = runtime.exec(code, childContext, code, context.module.filepath);
|
141
|
-
if(name.onAfterUse) name.onAfterUse();
|
142
|
-
return r;
|
143
|
-
} else if(name instanceof Usage) {
|
144
|
-
const v = name.trigger(...params) || true;
|
145
|
-
if(name.save !== false) context.__using__[name.name] = v;
|
146
|
-
return v;
|
147
|
-
} else {
|
148
|
-
context.__using__[name] = params.length ? params.length > 1 ? [...params] : params : true;
|
149
|
-
}
|
150
|
-
};
|
159
|
+
context.using = usingFunction(context, runtime);
|
151
160
|
|
152
161
|
if(context.app?.config?.exec?.['auto import']){
|
153
162
|
const autoipath = path.join(context.app.path, context.app.config?.exec?.['auto import']);
|
@@ -54,7 +54,7 @@ module.exports.runPath = function runPath(filepath, options = {}, custom_context
|
|
54
54
|
const mainFn = context.module.exports.main ?? context.module.exports;
|
55
55
|
return {
|
56
56
|
context,
|
57
|
-
returns: mainFn(context.process.argv)
|
57
|
+
returns: mainFn.call(context, context.process.argv)
|
58
58
|
}
|
59
59
|
} else {
|
60
60
|
return {
|