@makano/rew 1.1.12 → 1.1.15
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/rew +1 -1
- package/lib/rew/cli/cli.js +0 -2
- package/lib/rew/cli/run.js +5 -8
- package/lib/rew/cli/utils.js +1 -1
- package/lib/rew/const/opt.js +7 -0
- package/lib/rew/functions/import.js +34 -11
- package/lib/rew/functions/require.js +45 -0
- package/lib/rew/modules/context.js +13 -2
- package/lib/rew/pkgs/env.js +9 -0
- package/package.json +1 -1
package/bin/rew
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
2
|
const path = require('path');
|
3
3
|
const fs = require('fs');
|
4
|
-
const rew_mod = path.resolve(process.cwd(), '
|
4
|
+
const rew_mod = path.resolve(process.cwd(), 'snode_moduless/@makano/rew');
|
5
5
|
if(fs.existsSync(rew_mod)){
|
6
6
|
require(path.join(rew_mod, 'lib/rew/cli/cli.js'));
|
7
7
|
} else {
|
package/lib/rew/cli/cli.js
CHANGED
package/lib/rew/cli/run.js
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
const path = require('path');
|
2
1
|
const { run } = require('../main');
|
3
|
-
const { watch } = require('fs');
|
4
2
|
|
5
3
|
|
6
4
|
function exec(filePath){
|
@@ -8,13 +6,12 @@ function exec(filePath){
|
|
8
6
|
.context.module.imports;
|
9
7
|
}
|
10
8
|
|
11
|
-
|
12
|
-
process.on('message', ({ filePath, watch }) => {
|
9
|
+
const onmsg = ({ filePath, watch }) => {
|
13
10
|
const imports = exec(filePath);
|
14
11
|
if(watch){
|
15
12
|
process.send(imports);
|
16
|
-
process.exit();
|
17
|
-
} else {
|
18
|
-
process.exit();
|
19
13
|
}
|
20
|
-
|
14
|
+
process.off('message', onmsg);
|
15
|
+
}
|
16
|
+
|
17
|
+
process.on('message', onmsg);
|
package/lib/rew/cli/utils.js
CHANGED
@@ -107,7 +107,7 @@ module.exports = {
|
|
107
107
|
const c = jsYaml.load(fs.readFileSync(confPath, { encoding: 'utf-8' }));
|
108
108
|
if(c.entry){
|
109
109
|
const r = path.resolve(root, c.entry);
|
110
|
-
const mod_path = path.resolve(root, '
|
110
|
+
const mod_path = path.resolve(root, 'snode_moduless/@makano/rew');
|
111
111
|
const mod_path_lib = path.join(mod_path, 'lib/rew/cli');
|
112
112
|
if(fs.existsSync(mod_path) && __dirname !== mod_path_lib){
|
113
113
|
const mod_path_utilsjs = path.join(mod_path_lib, '../main.js');
|
@@ -5,6 +5,9 @@ const { findPackage, getPackage } = require("../pkgs/pkgs");
|
|
5
5
|
const { existsSync, readFileSync } = require("fs");
|
6
6
|
const conf = require("../pkgs/conf");
|
7
7
|
const jsYaml = require("js-yaml");
|
8
|
+
const { execOptions } = require("../const/opt");
|
9
|
+
|
10
|
+
const cachedFiles = [];
|
8
11
|
|
9
12
|
const lookUpInOtherApps = (fullPath) => {
|
10
13
|
const con = conf({});
|
@@ -30,26 +33,45 @@ module.exports.imp = function (runPath, context) {
|
|
30
33
|
|
31
34
|
// console.log(typeof runPath);
|
32
35
|
|
33
|
-
|
36
|
+
const lookUp = () => {
|
34
37
|
const otherPath = lookUpInOtherApps(filename);
|
35
38
|
if(!otherPath) throw new Error('Module "'+filename+'" not found');
|
36
39
|
else filepath = otherPath;
|
37
40
|
}
|
38
41
|
|
42
|
+
const foundCache = cachedFiles.find(f => f.filepath == filepath);
|
43
|
+
|
44
|
+
if(!ispkg && foundCache){
|
45
|
+
exports = foundCache.exports;
|
46
|
+
}
|
47
|
+
|
48
|
+
if(!ispkg && !existsSync(filepath)){
|
49
|
+
if(Array.isArray(execOptions.resolveExtensions) && execOptions.resolveExtensions.length){
|
50
|
+
const resolve = execOptions.resolveExtensions.find(ext => typeof ext == "string" ? existsSync(filepath+ext) : existsSync(filepath+(ext.ext || '')));
|
51
|
+
if(resolve) {
|
52
|
+
filepath += typeof resolve == "string" ? resolve : resolve.ext;
|
53
|
+
if(typeof resolve == "object" && resolve.options){
|
54
|
+
if(resolve.options.type) type = resolve.options.type;
|
55
|
+
for(let i in resolve.options) options[i] = resolve.options[i];
|
56
|
+
}
|
57
|
+
} else lookUp();
|
58
|
+
} else lookUp();
|
59
|
+
}
|
60
|
+
|
61
|
+
const exec = (coptions = {}) => runPath(
|
62
|
+
filepath,
|
63
|
+
{ ...options, useContext: execOptions.sharedContext == false ? false : true, ...coptions },
|
64
|
+
execOptions.sharedContext == false ? {} : context,
|
65
|
+
).context.module.exports;
|
66
|
+
|
39
67
|
if (ispkg) {
|
40
68
|
exports = getPackage(filename)(context);
|
69
|
+
} else if(foundCache) {
|
70
|
+
|
41
71
|
} else if (type == "coffee") {
|
42
|
-
exports =
|
43
|
-
filepath,
|
44
|
-
{ ...options, useContext: true },
|
45
|
-
context,
|
46
|
-
).context.module.exports;
|
72
|
+
exports = exec({ });
|
47
73
|
} else if (type == "js") {
|
48
|
-
exports =
|
49
|
-
filepath,
|
50
|
-
{ ...options, useContext: true, compile: false },
|
51
|
-
context,
|
52
|
-
).context.module.exports;
|
74
|
+
exports = exec({ compile: false });
|
53
75
|
} else if (type == "yaml" || type == "json" || type == "text") {
|
54
76
|
const f = getFile(filepath);
|
55
77
|
if (type == "yaml") {
|
@@ -74,6 +96,7 @@ module.exports.imp = function (runPath, context) {
|
|
74
96
|
}
|
75
97
|
|
76
98
|
if(!ispkg) context.module.imports.push(filepath);
|
99
|
+
if(!ispkg) cachedFiles.push({ filepath, exports });
|
77
100
|
|
78
101
|
return exports;
|
79
102
|
};
|
@@ -0,0 +1,45 @@
|
|
1
|
+
const fs = require('fs');
|
2
|
+
const path = require('path');
|
3
|
+
|
4
|
+
|
5
|
+
module.exports.customRequire = function customRequire(modulePath, filePath) {
|
6
|
+
try{
|
7
|
+
return require(modulePath)
|
8
|
+
} catch(e){
|
9
|
+
const resolvedPath = resolveModulePath(modulePath, filePath);
|
10
|
+
return require(resolvedPath);
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
function resolveModulePath(modulePath, filePath) {
|
15
|
+
if (modulePath.startsWith('./') || modulePath.startsWith('../') || path.isAbsolute(modulePath)) {
|
16
|
+
return path.resolve(modulePath);
|
17
|
+
}
|
18
|
+
|
19
|
+
const paths = module.constructor._nodeModulePaths(path.dirname(filePath));
|
20
|
+
for (const basePath of paths) {
|
21
|
+
const fullPath = path.join(basePath, modulePath);
|
22
|
+
if (fs.existsSync(fullPath + '.js')) {
|
23
|
+
return fullPath + '.js';
|
24
|
+
}
|
25
|
+
if (fs.existsSync(fullPath + '.json')) {
|
26
|
+
return fullPath + '.json';
|
27
|
+
}
|
28
|
+
if (fs.existsSync(fullPath) && fs.statSync(fullPath).isDirectory()) {
|
29
|
+
const packageJsonPath = path.join(fullPath, 'package.json');
|
30
|
+
if (fs.existsSync(packageJsonPath)) {
|
31
|
+
const main = require(packageJsonPath).main || 'index.js';
|
32
|
+
const mainPath = path.join(fullPath, main);
|
33
|
+
if (fs.existsSync(mainPath)) {
|
34
|
+
return mainPath;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
const indexPath = path.join(fullPath, 'index.js');
|
38
|
+
if (fs.existsSync(indexPath)) {
|
39
|
+
return indexPath;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
throw new Error(`Cannot find module '${modulePath}'`);
|
45
|
+
}
|
@@ -1,7 +1,10 @@
|
|
1
1
|
const defaultContext = require("../const/default");
|
2
|
+
const { execOptions } = require("../const/opt");
|
2
3
|
const emitter = require("../functions/emitter");
|
3
4
|
const { exportsFunction } = require("../functions/export");
|
4
5
|
const { imp } = require("../functions/import");
|
6
|
+
const { customRequire } = require("../functions/require");
|
7
|
+
|
5
8
|
|
6
9
|
module.exports.prepareContext = function (
|
7
10
|
custom_context,
|
@@ -16,6 +19,12 @@ module.exports.prepareContext = function (
|
|
16
19
|
filepath,
|
17
20
|
imports: []
|
18
21
|
},
|
22
|
+
opt: {
|
23
|
+
set: (key, value) => execOptions[key] = value,
|
24
|
+
get: (key) => execOptions[key],
|
25
|
+
push: (key, value) => execOptions[key]?.push(value),
|
26
|
+
pop: (key) => execOptions[key]?.pop()
|
27
|
+
}
|
19
28
|
};
|
20
29
|
if (options.useContext) {
|
21
30
|
context = {
|
@@ -28,9 +37,9 @@ module.exports.prepareContext = function (
|
|
28
37
|
...defaultContext,
|
29
38
|
require: (package) => {
|
30
39
|
try {
|
31
|
-
return require(package);
|
40
|
+
return execOptions.nativeRequire ? require(package) : customRequire(package, filepath);
|
32
41
|
} catch (e) {
|
33
|
-
throw new Error("Module not found");
|
42
|
+
throw new Error("Module "+package+" not found");
|
34
43
|
}
|
35
44
|
},
|
36
45
|
...custom_context,
|
@@ -44,6 +53,8 @@ module.exports.prepareContext = function (
|
|
44
53
|
argv: process.argv,
|
45
54
|
target: emitter(),
|
46
55
|
env: process.env,
|
56
|
+
cwd: () => process.cwd(),
|
57
|
+
arch: process.arch
|
47
58
|
};
|
48
59
|
// console.log(custom_context);
|
49
60
|
return context;
|