@makano/rew 1.1.73 → 1.2.0

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.
Files changed (73) hide show
  1. package/lib/coffeescript/browser.js +144 -139
  2. package/lib/coffeescript/cake.js +132 -133
  3. package/lib/coffeescript/coffeescript.js +437 -381
  4. package/lib/coffeescript/command.js +806 -724
  5. package/lib/coffeescript/grammar.js +1908 -2474
  6. package/lib/coffeescript/helpers.js +509 -473
  7. package/lib/coffeescript/index.js +228 -215
  8. package/lib/coffeescript/lexer.js +2282 -1909
  9. package/lib/coffeescript/nodes.js +9782 -9202
  10. package/lib/coffeescript/optparse.js +255 -227
  11. package/lib/coffeescript/parser.js +20305 -1265
  12. package/lib/coffeescript/register.js +107 -87
  13. package/lib/coffeescript/repl.js +307 -284
  14. package/lib/coffeescript/rewriter.js +1389 -1079
  15. package/lib/coffeescript/scope.js +176 -172
  16. package/lib/coffeescript/sourcemap.js +242 -227
  17. package/lib/rew/cli/cli.js +288 -186
  18. package/lib/rew/cli/log.js +31 -32
  19. package/lib/rew/cli/run.js +10 -12
  20. package/lib/rew/cli/utils.js +344 -176
  21. package/lib/rew/const/config_path.js +4 -0
  22. package/lib/rew/const/default.js +38 -35
  23. package/lib/rew/const/files.js +9 -9
  24. package/lib/rew/const/opt.js +8 -8
  25. package/lib/rew/css/theme.css +2 -2
  26. package/lib/rew/functions/core.js +55 -57
  27. package/lib/rew/functions/curl.js +23 -0
  28. package/lib/rew/functions/emitter.js +52 -55
  29. package/lib/rew/functions/exec.js +25 -21
  30. package/lib/rew/functions/export.js +18 -20
  31. package/lib/rew/functions/fs.js +55 -54
  32. package/lib/rew/functions/future.js +29 -21
  33. package/lib/rew/functions/id.js +8 -9
  34. package/lib/rew/functions/import.js +107 -93
  35. package/lib/rew/functions/map.js +13 -16
  36. package/lib/rew/functions/match.js +35 -26
  37. package/lib/rew/functions/path.js +8 -8
  38. package/lib/rew/functions/require.js +32 -33
  39. package/lib/rew/functions/sleep.js +2 -2
  40. package/lib/rew/functions/stdout.js +20 -20
  41. package/lib/rew/functions/types.js +96 -95
  42. package/lib/rew/html/ui.html +12 -13
  43. package/lib/rew/html/ui.js +205 -168
  44. package/lib/rew/main.js +14 -14
  45. package/lib/rew/misc/bin.js +37 -0
  46. package/lib/rew/misc/findAppInfo.js +16 -0
  47. package/lib/rew/misc/findAppPath.js +21 -0
  48. package/lib/rew/misc/req.js +7 -0
  49. package/lib/rew/misc/seededid.js +13 -0
  50. package/lib/rew/models/enum.js +12 -12
  51. package/lib/rew/models/struct.js +30 -32
  52. package/lib/rew/modules/compiler.js +237 -177
  53. package/lib/rew/modules/context.js +35 -22
  54. package/lib/rew/modules/fs.js +10 -10
  55. package/lib/rew/modules/runtime.js +17 -21
  56. package/lib/rew/modules/yaml.js +27 -30
  57. package/lib/rew/pkgs/conf.js +82 -75
  58. package/lib/rew/pkgs/data.js +12 -7
  59. package/lib/rew/pkgs/date.js +27 -28
  60. package/lib/rew/pkgs/env.js +6 -8
  61. package/lib/rew/pkgs/modules/data/bintree.js +52 -52
  62. package/lib/rew/pkgs/modules/data/doublylinked.js +85 -85
  63. package/lib/rew/pkgs/modules/data/linkedList.js +73 -73
  64. package/lib/rew/pkgs/modules/data/queue.js +19 -20
  65. package/lib/rew/pkgs/modules/data/stack.js +19 -19
  66. package/lib/rew/pkgs/modules/threads/worker.js +36 -26
  67. package/lib/rew/pkgs/modules/ui/classes.js +182 -178
  68. package/lib/rew/pkgs/pkgs.js +9 -10
  69. package/lib/rew/pkgs/rune.js +400 -0
  70. package/lib/rew/pkgs/threads.js +57 -53
  71. package/lib/rew/pkgs/ui.js +148 -136
  72. package/lib/rew/qrew/compile.js +12 -0
  73. package/package.json +11 -4
@@ -1,145 +1,157 @@
1
- const path = require("path");
2
- const { spawn, exec } = require("child_process");
3
- const fs = require("fs");
4
- const { uiClasses } = require("./modules/ui/classes");
5
- const { generateRandomID } = require("../functions/id");
6
- const { THEME_PATH } = require("../const/files");
1
+ const path = require('path');
2
+ const { spawn, exec } = require('child_process');
3
+ const fs = require('fs');
4
+ const { uiClasses } = require('./modules/ui/classes');
5
+ const { generateRandomID } = require('../functions/id');
6
+ const { THEME_PATH } = require('../const/files');
7
7
  const readline = require('readline');
8
- const emitter = require("../functions/emitter");
8
+ const emitter = require('../functions/emitter');
9
9
 
10
- const BIN_PATH = path.resolve(__dirname, "../../../bin/ui");
11
- const HTML_STRING = fs.readFileSync(
12
- path.resolve(__dirname, "../html/ui.html"),
13
- { encoding: "utf-8" },
14
- );
15
- const JS_STRING = fs.readFileSync(
16
- path.resolve(__dirname, "../html/ui.js"),
17
- { encoding: "utf-8" },
18
- );
10
+ const BIN_PATH = path.resolve(__dirname, '../../../bin/ui');
11
+ const HTML_STRING = fs.readFileSync(path.resolve(__dirname, '../html/ui.html'), { encoding: 'utf-8' });
12
+ const JS_STRING = fs.readFileSync(path.resolve(__dirname, '../html/ui.js'), {
13
+ encoding: 'utf-8',
14
+ });
19
15
 
20
- const replaceString = (string, options) => string.replace(/\$OPTIONS\(([^)]+)\)/g, (_, n) => n.startsWith('json.') ? JSON.stringify(options[n.split('json.')[1]] || '{}') : options[n] || _);
16
+ const replaceString = (string, options) =>
17
+ string.replace(/\$OPTIONS\(([^)]+)\)/g, (_, n) =>
18
+ n.startsWith('json.') ? JSON.stringify(options[n.split('json.')[1]] || '{}') : options[n] || _,
19
+ );
21
20
 
22
21
  const defaultOptions = {
23
- title: "Title",
24
- onExit: () => process.exit(),
25
- style: '',
26
- stylePath: THEME_PATH,
27
- exec: () => { },
28
- execContext: {}
22
+ title: 'Title',
23
+ onExit: () => process.exit(),
24
+ style: '',
25
+ stylePath: THEME_PATH,
26
+ exec: () => {},
27
+ execContext: {},
29
28
  };
30
29
 
31
30
  module.exports = (context) => ({
32
- start: (o = {}) => {
33
- const options = {
34
- ...defaultOptions,
35
- ...o
36
- };
37
-
38
- const hookedSocketListeners = {};
39
-
40
- const runId = generateRandomID();
41
- const tmpFile = "/tmp/" + runId + ".ruw.ui.socket";
42
-
43
- options.runId = runId;
44
-
45
- if (fs.existsSync(options.stylePath)) options.style = fs.readFileSync(options.stylePath, { encoding: 'utf-8' }) + '\n' + options.style;
46
-
47
- options.style = ' */\n' + options.style + '\n/* ';
48
-
49
- const HTML = replaceString(HTML_STRING, options);
50
- const JS = replaceString(JS_STRING, options);
51
-
52
- /**
53
- * Queue for future writes
54
- * @type {string[]}
55
- * */
56
- const queue = [];
57
-
58
- const send = (data) => {
59
- const content = fs.readFileSync(tmpFile, { encoding: 'utf-8' });
60
- if (content) {
61
- queue.push(data);
62
- } else {
63
- fs.writeFileSync(tmpFile, typeof data !== "string" ? JSON.stringify(data) : data);
64
- }
65
- }
66
-
67
- const sendEvent = (data) => {
68
- send({ action: 'JS', data: `window.recieveMessage(${JSON.stringify(data)})` })
69
- }
70
-
71
- const g_emitter = emitter();
72
-
73
- const recieve = (data) => {
74
- g_emitter.emit('recieve', data);
75
- }
76
-
77
- const rl = readline.createInterface({
78
- input: process.stdin,
79
- output: process.stdout
80
- });
81
-
82
- rl.question('', () => { });
83
-
84
- fs.writeFileSync(tmpFile, '');
85
-
86
- fs.watch(tmpFile, { encoding: 'utf-8' })
87
- .on('change', () => {
88
- if (queue.length) {
89
- send(queue.pop());
90
- }
91
- });
92
-
93
- const p = spawn(options.bin || BIN_PATH, [runId]);
94
-
95
- p.on("close", (code) => {
96
- rl.close();
97
- options.onExit(code);
98
- });
99
-
100
- process.on("beforeExit", () => {
101
- p.kill();
102
- fs.unlinkSync(tmpFile);
103
- });
104
-
105
- g_emitter.on('recieve', (edata) => {
106
- if (edata.action.startsWith('hook:')) {
107
- const hook = hookedSocketListeners[edata.data.rid];
108
- const type = edata.action.split('hook:')[1];
109
- if (hook && hook.type == type) {
110
- hookedSocketListeners[edata.data.rid].cb(edata.data.object);
111
- if (hook.once) delete hookedSocketListeners[edata.data.rid];
112
- }
113
- }
114
- });
115
-
116
- return new Promise((r) => {
117
- p.stdout.on("data", (data) => {
118
- if (data.toString().startsWith("RESPONSE::")) {
119
- const d = data.toString().split("RESPONSE::")[1];
120
- const jd = JSON.parse(d);
121
- recieve(jd);
122
- } else if (data.toString().trim().endsWith('SETUP::READY')) {
123
- console.log('READY');
124
- r(uiClasses(context, options, sendEvent, (cb) => {
125
- g_emitter.on('recieve', cb);
126
- }, (rid, type, cb, once = true) => { // Add hook
127
- hookedSocketListeners[rid] = { type, cb, once };
128
- }, (rid) => { // Remove hook
129
- delete hookedSocketListeners[rid];
130
- }));
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 {
136
- console.log(data.toString());
137
- }
138
- });
139
-
140
- p.stderr.on("data", (data) => {
141
- console.error(data.toString());
142
- });
143
- });
144
- },
31
+ start: (o = {}) => {
32
+ const options = {
33
+ ...defaultOptions,
34
+ ...o,
35
+ };
36
+
37
+ const hookedSocketListeners = {};
38
+
39
+ const runId = generateRandomID();
40
+ const tmpFile = '/tmp/' + runId + '.ruw.ui.socket';
41
+
42
+ options.runId = runId;
43
+
44
+ if (fs.existsSync(options.stylePath)) options.style = fs.readFileSync(options.stylePath, { encoding: 'utf-8' }) + '\n' + options.style;
45
+
46
+ options.style = ' */\n' + options.style + '\n/* ';
47
+
48
+ const HTML = replaceString(HTML_STRING, options);
49
+ const JS = replaceString(JS_STRING, options);
50
+
51
+ /**
52
+ * Queue for future writes
53
+ * @type {string[]}
54
+ * */
55
+ const queue = [];
56
+
57
+ const send = (data) => {
58
+ const content = fs.readFileSync(tmpFile, { encoding: 'utf-8' });
59
+ if (content) {
60
+ queue.push(data);
61
+ } else {
62
+ fs.writeFileSync(tmpFile, typeof data !== 'string' ? JSON.stringify(data) : data);
63
+ }
64
+ };
65
+
66
+ const sendEvent = (data) => {
67
+ send({
68
+ action: 'JS',
69
+ data: `window.recieveMessage(${JSON.stringify(data)})`,
70
+ });
71
+ };
72
+
73
+ const g_emitter = emitter();
74
+
75
+ const recieve = (data) => {
76
+ g_emitter.emit('recieve', data);
77
+ };
78
+
79
+ const rl = readline.createInterface({
80
+ input: process.stdin,
81
+ output: process.stdout,
82
+ });
83
+
84
+ rl.question('', () => {});
85
+
86
+ fs.writeFileSync(tmpFile, '');
87
+
88
+ fs.watch(tmpFile, { encoding: 'utf-8' }).on('change', () => {
89
+ if (queue.length) {
90
+ send(queue.pop());
91
+ }
92
+ });
93
+
94
+ const p = spawn(options.bin || BIN_PATH, [runId]);
95
+
96
+ p.on('close', (code) => {
97
+ rl.close();
98
+ options.onExit(code);
99
+ });
100
+
101
+ process.on('beforeExit', () => {
102
+ p.kill();
103
+ fs.unlinkSync(tmpFile);
104
+ });
105
+
106
+ g_emitter.on('recieve', (edata) => {
107
+ if (edata.action.startsWith('hook:')) {
108
+ const hook = hookedSocketListeners[edata.data.rid];
109
+ const type = edata.action.split('hook:')[1];
110
+ if (hook && hook.type == type) {
111
+ hookedSocketListeners[edata.data.rid].cb(edata.data.object);
112
+ if (hook.once) delete hookedSocketListeners[edata.data.rid];
113
+ }
114
+ }
115
+ });
116
+
117
+ return new Promise((r) => {
118
+ p.stdout.on('data', (data) => {
119
+ if (data.toString().startsWith('RESPONSE::')) {
120
+ const d = data.toString().split('RESPONSE::')[1];
121
+ const jd = JSON.parse(d);
122
+ recieve(jd);
123
+ } else if (data.toString().trim().endsWith('SETUP::READY')) {
124
+ console.log('READY');
125
+ r(
126
+ uiClasses(
127
+ context,
128
+ options,
129
+ sendEvent,
130
+ (cb) => {
131
+ g_emitter.on('recieve', cb);
132
+ },
133
+ (rid, type, cb, once = true) => {
134
+ // Add hook
135
+ hookedSocketListeners[rid] = { type, cb, once };
136
+ },
137
+ (rid) => {
138
+ // Remove hook
139
+ delete hookedSocketListeners[rid];
140
+ },
141
+ ),
142
+ );
143
+ } else if (data.toString().endsWith('SETUP::HTML')) {
144
+ send({ action: 'JS2', data: JS, isSetup: true });
145
+ } else if (data.toString() == 'INIT::READY') {
146
+ send({ action: 'HTML', data: HTML });
147
+ } else {
148
+ console.log(data.toString());
149
+ }
150
+ });
151
+
152
+ p.stderr.on('data', (data) => {
153
+ console.error(data.toString());
154
+ });
155
+ });
156
+ },
145
157
  });
@@ -0,0 +1,12 @@
1
+ const { deserializeData, serializeData, gen_key } = require("../misc/bin");
2
+
3
+
4
+
5
+
6
+ module.exports.to_qrew = (fileContent, secret) => {
7
+ return serializeData(Buffer.from(fileContent), gen_key(secret));
8
+ }
9
+
10
+ module.exports.from_qrew = (fileBuffer, secret) => {
11
+ return deserializeData(Buffer.from(fileBuffer), gen_key(secret));
12
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@makano/rew",
3
- "version": "1.1.73",
4
- "description": "A simple coffescript runtime",
3
+ "version": "1.2.0",
4
+ "description": "A simple coffescript runtime and app manager",
5
5
  "main": "lib/rew/main.js",
6
6
  "directories": {
7
7
  "lib": "lib"
@@ -24,16 +24,23 @@
24
24
  "type": "git",
25
25
  "url": "git+https://github.com/kevinj045/rew.git"
26
26
  },
27
- "keywords": ["coffescript", "rew", "runtime"],
27
+ "keywords": [
28
+ "coffescript",
29
+ "rew",
30
+ "runtime"
31
+ ],
28
32
  "author": "makano",
29
33
  "license": "ISC",
30
34
  "dependencies": {
31
35
  "@babel/core": "^7.24.6",
32
36
  "@babel/preset-react": "^7.24.6",
37
+ "axios": "^1.7.2",
33
38
  "babel-plugin-jsx": "^1.2.0",
34
- "chalk": "^5.3.0",
35
39
  "chokidar": "^3.6.0",
40
+ "colors": "^1.4.0",
36
41
  "js-yaml": "^4.1.0",
42
+ "tiny-msgpack": "^2.2.0",
43
+ "uuid": "^9.0.1",
37
44
  "vm": "^0.1.0",
38
45
  "yargs": "^17.7.2"
39
46
  },