@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 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(), 'node_modules/@makano/rew');
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 {
@@ -47,8 +47,6 @@ yargs(hideBin(process.argv))
47
47
  data.forEach(file => {
48
48
  watchIt(file);
49
49
  });
50
- } else {
51
- process.exit();
52
50
  }
53
51
  }).send({ filePath, watch: argv.watch });
54
52
  if(argv.watch) watchIt(filePath);
@@ -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);
@@ -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, 'node_modules/@makano/rew');
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');
@@ -0,0 +1,7 @@
1
+ const execOptions = {
2
+ sharedContext: true,
3
+ resolveExtensions: [{ext: '.js', options: { type: 'js' }}, '.coffee'],
4
+ nativeRequire: false
5
+ }
6
+
7
+ module.exports.execOptions = execOptions;
@@ -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
- if(!ispkg && !existsSync(filepath)){
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 = runPath(
43
- filepath,
44
- { ...options, useContext: true },
45
- context,
46
- ).context.module.exports;
72
+ exports = exec({ });
47
73
  } else if (type == "js") {
48
- exports = runPath(
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;
@@ -0,0 +1,9 @@
1
+
2
+
3
+ module.exports = (context) => ({
4
+ has: (key) => key in process.env,
5
+ get: (key) => process.env[key],
6
+ set: (key, value) => process.env[key] = value,
7
+ rm: (key) => delete process.env[key],
8
+ is: (key, value) => process.env[key] == value
9
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makano/rew",
3
- "version": "1.1.12",
3
+ "version": "1.1.15",
4
4
  "description": "A simple coffescript runtime",
5
5
  "main": "lib/rew/main.js",
6
6
  "directories": {