@makano/rew 1.1.22 → 1.1.55

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.
@@ -6,8 +6,9 @@ const { hideBin } = require('yargs/helpers');
6
6
  const { fork, exec } = require('child_process');
7
7
  const { watch } = require('chokidar');
8
8
  const utils = require('./utils');
9
- const { existsSync } = require('fs');
9
+ const { existsSync, readFileSync, writeFileSync, mkdirSync } = require('fs');
10
10
  const { log } = require('./log');
11
+ const { compileFile, compile } = require('../modules/compiler');
11
12
 
12
13
  yargs(hideBin(process.argv))
13
14
  .command(
@@ -125,9 +126,69 @@ yargs(hideBin(process.argv))
125
126
  .positional('file', {
126
127
  describe: 'File to build',
127
128
  type: 'string',
129
+ })
130
+ .option('output', {
131
+ alias: 'o',
132
+ describe: 'Output directory',
133
+ type: 'string',
128
134
  });
129
135
  }, (argv) => {
130
- console.log(`Building file: ${argv.file}`);
136
+
137
+ function readFile(filePath) {
138
+ return readFileSync(filePath, { encoding: 'utf-8' });
139
+ }
140
+
141
+ function extractImports(content) {
142
+ const importRegex = /(\w+)\s*=\s*imp\s*['"](.+?)['"]/g;
143
+ const imports = [];
144
+ let match;
145
+ while ((match = importRegex.exec(content)) !== null) {
146
+ imports.push({ variable: match[1], url: match[2] });
147
+ }
148
+ return imports;
149
+ }
150
+
151
+ function writeCompiledFile(filePath, compiledCode) {
152
+ const dirName = outputDir ? outputDir : path.dirname(filePath);
153
+ if(!existsSync(dirName)) mkdirSync(dirName, { recursive: true });
154
+ const baseName = path.basename(filePath, path.extname(filePath));
155
+ const newFilePath = path.join(dirName, `${baseName}.js`);
156
+ writeFileSync(newFilePath, compiledCode, { encoding: 'utf-8' });
157
+ log(`Compiled: ${newFilePath}`);
158
+ }
159
+
160
+ function processFile(filePath, importsArray) {
161
+ const content = readFile(filePath);
162
+ const imports = extractImports(content);
163
+
164
+ imports.forEach(importStatement => {
165
+ const importedFilePath = path.resolve(path.dirname(filePath), importStatement.url);
166
+ if (!importsArray.some(importObj => importObj.url === importStatement.url)) {
167
+
168
+ if(existsSync(importedFilePath)){
169
+ importsArray.push(importStatement);
170
+ processFile(importedFilePath, importsArray);
171
+ } else if(existsSync(importedFilePath+'.coffee')){
172
+ importsArray.push(importStatement);
173
+ processFile(importedFilePath+'.coffee', importsArray);
174
+ } else if(existsSync(importedFilePath+'.js')){
175
+ importsArray.push(importStatement);
176
+ processFile(importedFilePath+'.js', importsArray);
177
+ }
178
+
179
+ }
180
+ });
181
+
182
+ const compiled = compile({ content }, {});
183
+ writeCompiledFile(filePath, compiled);
184
+ }
185
+
186
+ const filePath = path.resolve(process.cwd(), argv.file);
187
+ const importsArray = [];
188
+ const outputDir = argv.output ? path.resolve(process.cwd(), argv.output) : null;
189
+ log('Start compile at', outputDir || 'default path');
190
+ processFile(filePath, importsArray);
191
+ log('Compiled', importsArray.length + 1, 'files.', ':end');
131
192
  })
132
193
  .help()
133
194
  .argv;
@@ -0,0 +1,27 @@
1
+ const shell = require('child_process');
2
+
3
+
4
+ module.exports = (currentFile) => {
5
+
6
+ function exec(command, options){
7
+ return shell.execSync(command, { stdio: options?.output == false ? null : 'inherit' });
8
+ }
9
+
10
+ exec.background = function execAsync(command, options, callback){
11
+ if(typeof options == "function" && !callback){
12
+ callback = options;
13
+ options = {};
14
+ }
15
+ if(!options) options = {};
16
+ if(!callback) callback = () => {};
17
+ return shell.exec(command, {
18
+ ...options,
19
+ }, callback);
20
+ }
21
+
22
+ function spawn(command, options){
23
+ return shell.spawn(command, options);
24
+ }
25
+
26
+ return { exec, spawn };
27
+ }
@@ -1,9 +1,27 @@
1
+
2
+ function exportsThe(item, name, context){
3
+ if (name) {
4
+ if(!context.module.exports) context.module.exports = {};
5
+ context.module.exports[name] = item;
6
+ } else {
7
+ if(context.module.exports) context.module.exports.default = item;
8
+ else context.module.exports = item;
9
+ }
10
+ }
11
+
12
+ module.exports.pubFunction = function (context) {
13
+ return function (name, item) {
14
+ if(name && !item){
15
+ item = name;
16
+ name = null;
17
+ }
18
+ exportsThe(item, name, context);
19
+ };
20
+ };
21
+
1
22
  module.exports.exportsFunction = function (context) {
2
23
  return function (item, name) {
3
- if (name) {
4
- context.module.exports[name] = item;
5
- } else {
6
- context.module.exports = item;
7
- }
24
+ exportsThe(item, name, context);
8
25
  };
9
26
  };
27
+
@@ -14,17 +14,18 @@ const lookUpInOtherApps = (fullPath) => {
14
14
  const name = fullPath.indexOf('/') ? fullPath.split('/')[0] : fullPath;
15
15
  let dpath = fullPath.indexOf('/') ? fullPath.split('/')[1] : '';
16
16
  let ppath = path.join(con.CONFIG_PATH, name, 'app');
17
- if(!existsSync(ppath)) return null;
18
- if(!dpath){
17
+ if (!existsSync(ppath)) return null;
18
+ if (!dpath) {
19
19
  dpath = jsYaml.load(readFileSync(path.join(ppath, 'app.yaml'), 'utf-8')).entry;
20
20
  }
21
21
  ppath = path.join(ppath, dpath);
22
- if(existsSync(ppath)) return ppath;
22
+ if (existsSync(ppath)) return ppath;
23
23
  else return null;
24
24
  }
25
25
 
26
26
  module.exports.imp = function (runPath, context) {
27
27
  return function (filename, options = {}) {
28
+ if (!options) options = {};
28
29
  let type = options.type || "coffee";
29
30
  let exports,
30
31
  ispkg = findPackage(filename);
@@ -35,24 +36,24 @@ module.exports.imp = function (runPath, context) {
35
36
 
36
37
  const lookUp = () => {
37
38
  const otherPath = lookUpInOtherApps(filename);
38
- if(!otherPath) throw new Error('Module "'+filename+'" not found');
39
+ if (!otherPath) throw new Error('Module "' + filename + '" not found');
39
40
  else filepath = otherPath;
40
41
  }
41
42
 
42
43
  const foundCache = cachedFiles.find(f => f.filepath == filepath);
43
44
 
44
- if(!ispkg && foundCache){
45
+ if (!ispkg && foundCache) {
45
46
  exports = foundCache.exports;
46
47
  }
47
48
 
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) {
49
+ if (!ispkg && !existsSync(filepath)) {
50
+ if (Array.isArray(execOptions.resolveExtensions) && execOptions.resolveExtensions.length) {
51
+ const resolve = execOptions.resolveExtensions.find(ext => typeof ext == "string" ? existsSync(filepath + ext) : existsSync(filepath + (ext.ext || '')));
52
+ if (resolve) {
52
53
  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];
54
+ if (typeof resolve == "object" && resolve.options) {
55
+ if (resolve.options.type) type = resolve.options.type;
56
+ for (let i in resolve.options) options[i] = resolve.options[i];
56
57
  }
57
58
  } else lookUp();
58
59
  } else lookUp();
@@ -60,16 +61,24 @@ module.exports.imp = function (runPath, context) {
60
61
 
61
62
  const exec = (coptions = {}) => runPath(
62
63
  filepath,
63
- { ...options, useContext: execOptions.sharedContext == false ? false : true, ...coptions },
64
- execOptions.sharedContext == false ? {} : context,
64
+ {
65
+ import: options,
66
+ main: false,
67
+ useContext: execOptions.sharedContext == false ? false : !(options.context && options.context == 'new'),
68
+ ...coptions,
69
+ as: options.as == 'main' ? context.module.main ? 'main' : 'parent' : options.as == 'parent' ? 'parent' : 'child',
70
+ fromMain: context.module.main
71
+ },
72
+ execOptions.sharedContext == false ? {} :
73
+ options.context && options.context == 'new' ? {} : context,
65
74
  ).context.module.exports;
66
75
 
67
76
  if (ispkg) {
68
77
  exports = getPackage(filename)(context);
69
- } else if(foundCache) {
70
-
78
+ } else if (foundCache) {
79
+
71
80
  } else if (type == "coffee") {
72
- exports = exec({ });
81
+ exports = exec({});
73
82
  } else if (type == "js") {
74
83
  exports = exec({ compile: false });
75
84
  } else if (type == "yaml" || type == "json" || type == "text") {
@@ -95,8 +104,8 @@ module.exports.imp = function (runPath, context) {
95
104
  }
96
105
  }
97
106
 
98
- if(!ispkg) context.module.imports.push(filepath);
99
- if(!ispkg) cachedFiles.push({ filepath, exports });
107
+ if (!ispkg) context.module.imports.push(filepath);
108
+ if (!ispkg) cachedFiles.push({ filepath, exports });
100
109
 
101
110
  return exports;
102
111
  };
@@ -1,8 +1,160 @@
1
1
  const { compile } = require("../../coffeescript/coffeescript");
2
2
  const { getFile } = require("./fs");
3
3
 
4
+ function tokenizeCoffeeScript(code) {
5
+ const tokens = [];
6
+ let currentToken = '';
7
+
8
+ for (let i = 0; i < code.length; i++) {
9
+ const char = code[i];
10
+ const nextChar = code[i + 1];
11
+
12
+ if (char === '#') {
13
+ // Comment
14
+ tokens.push({ type: 'COMMENT', value: char + code.substring(i + 1).split('\n')[0] });
15
+ i = code.indexOf('\n', i);
16
+ } else if (char === '"' || char === "'") {
17
+ // String
18
+ let string = char;
19
+ let escaped = false;
20
+ i++;
21
+ while (i < code.length && (code[i] !== char || escaped)) {
22
+ string += code[i];
23
+ if (code[i] === '\\' && !escaped) {
24
+ escaped = true;
25
+ } else {
26
+ escaped = false;
27
+ }
28
+ i++;
29
+ }
30
+ string += char; // Include closing quote
31
+ tokens.push({ type: 'STRING', value: string });
32
+ } else if (char === '/' && (nextChar === '/' || nextChar === '*')) {
33
+ // Regular expression
34
+ let regex = char;
35
+ i++;
36
+ while (i < code.length && (code[i] !== '/' || regex.endsWith('\\'))) {
37
+ regex += code[i];
38
+ i++;
39
+ }
40
+ regex += '/';
41
+ tokens.push({ type: 'REGEX', value: regex });
42
+ } else if (/\s/.test(char)) {
43
+ // Whitespace
44
+ if(tokens[tokens.length-1]?.type == 'WHITESPACE'
45
+ && tokens[tokens.length-1].value[0] == char
46
+ ){
47
+ tokens[tokens.length-1].value += char;
48
+ } else {
49
+ tokens.push({ type: 'WHITESPACE', value: char });
50
+ }
51
+ } else if (/[a-zA-Z_$]/.test(char)) {
52
+ // Identifier
53
+ let identifier = char;
54
+ i++;
55
+ while (i < code.length && /[a-zA-Z0-9_$]/.test(code[i])) {
56
+ identifier += code[i];
57
+ i++;
58
+ }
59
+ tokens.push({ type: 'IDENTIFIER', value: identifier });
60
+ i--; // Move back one character to recheck
61
+ } else {
62
+ // Other characters
63
+ tokens.push({ type: 'OTHER', value: char });
64
+ }
65
+ }
66
+
67
+ return tokens;
68
+ }
69
+
70
+ const gnextToken = (i, n, tokens) => {
71
+ return tokens[i + n] ? tokens[i + n].type == 'WHITESPACE' ? gnextToken(i, n + 1, tokens) : { nextToken: tokens[i + n], n } : null;
72
+ }
73
+
74
+ const fnextToken = (i, tokens, type, value) => {
75
+ return tokens.map((t, ind) => { t.ti = ind; return t }).slice(i, tokens.length - 1).map((t, ind) => { t.ri = ind; t.index = ind - i; return t }).find(t => t.type == type && (value ? t.value == value : true));
76
+ }
77
+
78
+ function compileRewStuff(content) {
79
+ const tokens = tokenizeCoffeeScript(content);
80
+ let result = '';
81
+
82
+ let hooks = [];
83
+
84
+ for (let i = 0; i < tokens.length; i++) {
85
+ const token = tokens[i];
86
+ let { nextToken, n } = gnextToken(i, 1, tokens) || {};
87
+
88
+ if (token.type === 'IDENTIFIER' && token.value === 'import') {
89
+ // console.log(nextToken.type);
90
+ let ind = i + n + 2;
91
+
92
+ let defaultName;
93
+ if (nextToken.value === '{') {
94
+ const closingBraceToken = fnextToken(ind, tokens, 'OTHER', '}');
95
+ const nameToken = fnextToken(ind, tokens, 'STRING');
96
+ if (closingBraceToken) {
97
+ const exportsTokens = tokens.slice(ind, closingBraceToken.ti);
98
+ const exports = exportsTokens.filter(t => t.type === 'IDENTIFIER').map(t => t.value).join(', ');
99
+ result += `{ ${exports} } = inc ${nameToken.value}`;
100
+ i = nameToken.ti;
101
+ }
102
+ } else if (nextToken.value === '*') {
103
+ const asToken = fnextToken(ind, tokens, 'IDENTIFIER', 'as');
104
+ const nameToken = fnextToken(asToken.ri, tokens, 'STRING');
105
+ if (asToken) {
106
+ const nextToken = fnextToken(asToken.ti + 1, tokens, 'IDENTIFIER');
107
+ defaultName = nextToken.value;
108
+ result += `${defaultName} = inc ${nameToken.value}`;
109
+ i = ind + 6;
110
+ }
111
+ } else {
112
+ const nameToken = fnextToken(ind, tokens, 'STRING');
113
+ defaultName = nextToken.value;
114
+ result += `{ default: ${defaultName} } = inc ${nameToken.value}`;
115
+ i = ind + 2;
116
+ }
117
+
118
+ const nextLastToken = fnextToken(i, tokens, 'IDENTIFIER');
119
+
120
+ if(nextLastToken?.value == 'assert'){
121
+ result += ', ';
122
+ i += 3;
123
+ }
124
+
125
+ continue;
126
+ }
127
+
128
+
129
+ if (token.type === 'IDENTIFIER' && token.value === 'pub' &&
130
+ nextToken && nextToken.type === 'IDENTIFIER' &&
131
+ nextToken.value && nextToken.value !== 'undefined') {
132
+
133
+ hooks.push({
134
+ index: i + 1,
135
+ value: `"${nextToken.value}", `
136
+ });
137
+ }
138
+
139
+ result += token.value;
140
+ if (hooks.length) {
141
+ hooks.forEach((hook, ind) => {
142
+ if (i == hook.index) {
143
+ result += hook.value;
144
+ hooks.splice(ind, 1);
145
+ }
146
+ });
147
+ }
148
+ }
149
+
150
+ // console.log(result)
151
+
152
+ return result;
153
+ }
154
+
155
+
4
156
  const cpl = (module.exports.compile = function (file, options = {}) {
5
- return compile(file.content, options);
157
+ return compile(compileRewStuff(file.content), { ...options, filename: file.path, bare: true, inlineMap: true });
6
158
  });
7
159
 
8
160
  module.exports.compileFile = function (filepath, options = {}) {
@@ -1,37 +1,46 @@
1
1
  const defaultContext = require("../const/default");
2
2
  const { execOptions } = require("../const/opt");
3
3
  const emitter = require("../functions/emitter");
4
- const { exportsFunction } = require("../functions/export");
4
+ const { exportsFunction, pubFunction } = require("../functions/export");
5
5
  const { imp } = require("../functions/import");
6
6
  const { customRequire } = require("../functions/require");
7
7
  const fsLib = require('../functions/fs');
8
8
  const pathLib = require('../functions/path');
9
+ const execLib = require('../functions/exec');
9
10
 
11
+ let mainFile = "";
12
+ const isMainFile = filepath => filepath == mainFile;
10
13
  module.exports.prepareContext = function (
11
14
  custom_context,
12
15
  options,
13
16
  filepath = "",
14
17
  runPath = () => {},
15
18
  ) {
19
+ if(mainFile == "") mainFile = filepath;
16
20
  let context = {
17
21
  module: {
18
22
  exports: null,
19
- options,
20
23
  filepath,
24
+ main: isMainFile(filepath),
21
25
  imports: []
22
26
  },
23
- ...fsLib(filepath)
27
+ imports: {
28
+ meta: {},
29
+ assert: options.import ?? {}
30
+ },
31
+ ...fsLib(filepath),
24
32
  };
25
33
  if (options.useContext) {
26
34
  context = {
27
- ...context,
28
35
  ...custom_context,
36
+ ...context
29
37
  };
30
38
  } else {
31
39
  context = {
32
40
  ...context,
33
41
  ...defaultContext,
34
42
  ...pathLib(filepath),
43
+ ...execLib(filepath),
35
44
  require: (package) => {
36
45
  try {
37
46
  return execOptions.nativeRequire || package.startsWith('node:') ? require(package.startsWith('node:') ? package.split('node:')[1] : package) : customRequire(package, filepath);
@@ -39,26 +48,43 @@ module.exports.prepareContext = function (
39
48
  throw new Error("Module "+package+" not found");
40
49
  }
41
50
  },
42
- opt: {
43
- set: (key, value) => execOptions[key] = value,
44
- get: (key) => execOptions[key],
45
- push: (key, value) => execOptions[key]?.push(value),
46
- pop: (key) => execOptions[key]?.pop()
47
- },
48
51
  ...custom_context,
49
52
  };
50
- context.imp = imp(runPath, context);
51
- context.exports = exportsFunction(context);
52
53
  }
53
- if (!context.global) context.global = context;
54
54
  if (!context.process)
55
55
  context.process = {
56
56
  argv: process.argv,
57
- target: emitter(),
57
+ target: {
58
+ on: (event, listener) => process.on(event, listener),
59
+ off: (event, listener) => process.off(event, listener),
60
+ emit: (event, code) => process.emit(event, code)
61
+ },
58
62
  env: process.env,
59
63
  cwd: () => process.cwd(),
60
64
  arch: process.arch
61
65
  };
62
- // console.log(custom_context);
66
+
67
+ context.global = context;
68
+ context.imports.assert = options.import ?? {};
69
+ context.imp = imp(runPath, context);
70
+ context.inc = (package, asserts) => {
71
+ try{
72
+ if(package.startsWith('node:') || package.startsWith('pkg:')) throw new Error('');
73
+ return context.imp(package, asserts);
74
+ } catch(e) {
75
+ return context.require(package.startsWith('pkg:') ? package.split('pkg:')[1] : package);
76
+ }
77
+ };
78
+ context.pub = pubFunction(context);
79
+ context.exports = exportsFunction(context);
80
+
81
+ if(context.module.main || (options.fromMain == true && options.as == 'main')){
82
+ context.opt = {
83
+ set: (key, value) => execOptions[key] = value,
84
+ get: (key) => execOptions[key],
85
+ push: (key, value) => execOptions[key]?.push(value),
86
+ pop: (key) => execOptions[key]?.pop()
87
+ };
88
+ } else delete context.opt
63
89
  return context;
64
90
  };
@@ -26,7 +26,7 @@ const defaultOptions = {
26
26
  onExit: () => process.exit(),
27
27
  style: '',
28
28
  stylePath: THEME_PATH,
29
- exec: () => {},
29
+ exec: () => { },
30
30
  execContext: {}
31
31
  };
32
32
 
@@ -44,18 +44,22 @@ module.exports = (context) => ({
44
44
 
45
45
  options.runId = runId;
46
46
 
47
- if(fs.existsSync(options.stylePath)) options.style = fs.readFileSync(options.stylePath, { encoding: 'utf-8' }) + '\n' + options.style;
47
+ if (fs.existsSync(options.stylePath)) options.style = fs.readFileSync(options.stylePath, { encoding: 'utf-8' }) + '\n' + options.style;
48
48
 
49
- options.style = ' */\n'+options.style+'\n/* ';
49
+ options.style = ' */\n' + options.style + '\n/* ';
50
50
 
51
51
  const HTML = replaceString(HTML_STRING, options);
52
52
  const JS = replaceString(JS_STRING, options);
53
53
 
54
+ /**
55
+ * Queue for future writes
56
+ * @type {string[]}
57
+ * */
54
58
  const queue = [];
55
59
 
56
60
  const send = (data) => {
57
61
  const content = fs.readFileSync(tmpFile, { encoding: 'utf-8' });
58
- if(content) {
62
+ if (content) {
59
63
  queue.push(data);
60
64
  } else {
61
65
  fs.writeFileSync(tmpFile, typeof data !== "string" ? JSON.stringify(data) : data);
@@ -77,20 +81,20 @@ module.exports = (context) => ({
77
81
  output: process.stdout
78
82
  });
79
83
 
80
- rl.question('', () => {});
84
+ rl.question('', () => { });
81
85
 
82
86
  fs.writeFileSync(tmpFile, '');
83
87
 
84
88
  fs.watch(tmpFile, { encoding: 'utf-8' })
85
- .on('change', () => {
86
- if(queue.length){
87
- send(queue.pop());
88
- }
89
- });
89
+ .on('change', () => {
90
+ if (queue.length) {
91
+ send(queue.pop());
92
+ }
93
+ });
90
94
 
91
95
  const p = spawn(BIN_PATH, [runId]);
92
96
 
93
-
97
+
94
98
 
95
99
  p.on("close", (code) => {
96
100
  rl.close();
@@ -103,12 +107,12 @@ module.exports = (context) => ({
103
107
  });
104
108
 
105
109
  g_emitter.on('recieve', (edata) => {
106
- if(edata.action.startsWith('hook:')){
110
+ if (edata.action.startsWith('hook:')) {
107
111
  const hook = hookedSocketListeners[edata.data.rid];
108
112
  const type = edata.action.split('hook:')[1];
109
- if(hook && hook.type == type) {
113
+ if (hook && hook.type == type) {
110
114
  hookedSocketListeners[edata.data.rid].cb(edata.data.object);
111
- if(hook.once) delete hookedSocketListeners[edata.data.rid];
115
+ if (hook.once) delete hookedSocketListeners[edata.data.rid];
112
116
  }
113
117
  }
114
118
  });
@@ -119,7 +123,7 @@ module.exports = (context) => ({
119
123
  const d = data.toString().split("RESPONSE::")[1];
120
124
  const jd = JSON.parse(d);
121
125
  recieve(jd);
122
- } else if(data.toString().trim().endsWith('SETUP::READY')) {
126
+ } else if (data.toString().trim().endsWith('SETUP::READY')) {
123
127
  console.log('READY');
124
128
  r(uiClasses(context, options, sendEvent, (cb) => {
125
129
  g_emitter.on('recieve', cb);
@@ -128,15 +132,15 @@ module.exports = (context) => ({
128
132
  }, (rid) => { // Remove hook
129
133
  delete hookedSocketListeners[rid];
130
134
  }));
131
- } else if(data.toString().endsWith('SETUP::HTML')) {
132
- send({action: 'JS2', data: JS, isSetup: true});
133
- } else if(data.toString() == 'INIT::READY') {
134
- send({action: 'HTML', data: HTML});
135
+ } else if (data.toString().endsWith('SETUP::HTML')) {
136
+ send({ action: 'JS2', data: JS, isSetup: true });
137
+ } else if (data.toString() == 'INIT::READY') {
138
+ send({ action: 'HTML', data: HTML });
135
139
  } else {
136
140
  console.log(data.toString());
137
141
  }
138
142
  });
139
-
143
+
140
144
  p.stderr.on("data", (data) => {
141
145
  console.error(data.toString());
142
146
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makano/rew",
3
- "version": "1.1.22",
3
+ "version": "1.1.55",
4
4
  "description": "A simple coffescript runtime",
5
5
  "main": "lib/rew/main.js",
6
6
  "directories": {