@makano/rew 1.1.72 → 1.1.81

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. package/README.md +1 -1
  2. package/build.sh +3 -1
  3. package/lib/rew/cli/cli.js +189 -144
  4. package/lib/rew/cli/log.js +18 -19
  5. package/lib/rew/cli/run.js +7 -9
  6. package/lib/rew/cli/utils.js +109 -95
  7. package/lib/rew/const/config_path.js +4 -0
  8. package/lib/rew/const/default.js +21 -3
  9. package/lib/rew/const/files.js +11 -8
  10. package/lib/rew/const/opt.js +6 -6
  11. package/lib/rew/css/theme.css +1 -1
  12. package/lib/rew/functions/core.js +7 -9
  13. package/lib/rew/functions/emitter.js +2 -2
  14. package/lib/rew/functions/exec.js +19 -15
  15. package/lib/rew/functions/export.js +4 -6
  16. package/lib/rew/functions/fs.js +21 -18
  17. package/lib/rew/functions/future.js +1 -1
  18. package/lib/rew/functions/import.js +55 -25
  19. package/lib/rew/functions/map.js +2 -5
  20. package/lib/rew/functions/match.js +21 -5
  21. package/lib/rew/functions/path.js +2 -2
  22. package/lib/rew/functions/require.js +16 -13
  23. package/lib/rew/functions/stdout.js +11 -11
  24. package/lib/rew/functions/types.js +67 -42
  25. package/lib/rew/html/ui.html +5 -6
  26. package/lib/rew/html/ui.js +100 -58
  27. package/lib/rew/main.js +3 -3
  28. package/lib/rew/misc/findAppInfo.js +16 -0
  29. package/lib/rew/misc/findAppPath.js +21 -0
  30. package/lib/rew/misc/seededid.js +13 -0
  31. package/lib/rew/models/struct.js +1 -1
  32. package/lib/rew/modules/compiler.js +90 -58
  33. package/lib/rew/modules/context.js +35 -22
  34. package/lib/rew/modules/runtime.js +1 -1
  35. package/lib/rew/pkgs/conf.js +50 -33
  36. package/lib/rew/pkgs/data.js +7 -2
  37. package/lib/rew/pkgs/date.js +8 -9
  38. package/lib/rew/pkgs/env.js +3 -5
  39. package/lib/rew/pkgs/modules/data/bintree.js +1 -1
  40. package/lib/rew/pkgs/modules/data/doublylinked.js +1 -1
  41. package/lib/rew/pkgs/modules/data/linkedList.js +1 -1
  42. package/lib/rew/pkgs/modules/data/queue.js +1 -2
  43. package/lib/rew/pkgs/modules/data/stack.js +1 -1
  44. package/lib/rew/pkgs/modules/threads/worker.js +31 -21
  45. package/lib/rew/pkgs/modules/ui/classes.js +68 -61
  46. package/lib/rew/pkgs/pkgs.js +5 -6
  47. package/lib/rew/pkgs/rune.js +437 -0
  48. package/lib/rew/pkgs/threads.js +30 -22
  49. package/lib/rew/pkgs/ui.js +68 -44
  50. package/meson.build +1 -1
  51. package/package.json +8 -2
@@ -1,13 +1,13 @@
1
- try{
1
+ try {
2
2
  window.execContext = $OPTIONS(json.execContext);
3
- } catch(e){
3
+ } catch (e) {
4
4
  window.execContext = {};
5
5
  }
6
6
 
7
- try{
7
+ try {
8
8
  window.exec = $OPTIONS(exec);
9
- } catch(e){
10
- window.exec = function(){};
9
+ } catch (e) {
10
+ window.exec = function () {};
11
11
  }
12
12
 
13
13
  const DOM = [];
@@ -27,31 +27,31 @@ const addTo = (el, parent) => {
27
27
  };
28
28
 
29
29
  const initElement = (el, options, update = false) => {
30
- if(el.widgetOptions){
30
+ if (el.widgetOptions) {
31
31
  if (el.widgetOptions.style) {
32
- for(let i in options.style){
32
+ for (let i in options.style) {
33
33
  el.style.removeProperty(i, el.widgetOptions.style[i]);
34
34
  }
35
35
  }
36
36
  if (el.widgetOptions.attr) {
37
- for(let i in el.widgetOptions.attr){
37
+ for (let i in el.widgetOptions.attr) {
38
38
  el.removeAttribute(i);
39
39
  }
40
40
  }
41
41
  }
42
-
42
+
43
43
  el.widgetOptions = options;
44
44
  el.id = options.id;
45
45
  el.textContent = options.data.text;
46
46
 
47
47
  if (options.style) {
48
- for(let i in options.style){
48
+ for (let i in options.style) {
49
49
  el.style.setProperty(i, options.style[i]);
50
50
  }
51
51
  }
52
52
 
53
53
  if (options.attr) {
54
- for(let i in options.attr){
54
+ for (let i in options.attr) {
55
55
  el.setAttribute(i, options.attr[i]);
56
56
  }
57
57
  }
@@ -59,7 +59,7 @@ const initElement = (el, options, update = false) => {
59
59
  if (options.children.length) {
60
60
  options.children.forEach((option) => {
61
61
  option.parent = options.uuid;
62
- if(update) updateElement(findInDom(option.uuid), option);
62
+ if (update) updateElement(findInDom(option.uuid), option);
63
63
  else createElement(option);
64
64
  });
65
65
  }
@@ -67,46 +67,75 @@ const initElement = (el, options, update = false) => {
67
67
  if (options.parent) {
68
68
  addTo(el, options.parent);
69
69
  }
70
- }
70
+ };
71
71
 
72
72
  const updateElement = (el, options) => {
73
- if(!el) return;
73
+ if (!el) return;
74
74
  initElement(el, options, true);
75
75
  return el;
76
- }
76
+ };
77
77
 
78
78
  const events = [
79
- "click", "dblclick", "mousedown", "mouseup", "mouseover", "mouseout",
80
- "mousemove", "mouseenter", "mouseleave", "keydown", "keypress", "keyup",
81
- "change", "input", "submit", "focus", "blur", "copy", "cut", "paste",
82
- "scroll", "wheel", "resize", "contextmenu", "drag", "dragstart", "dragend",
83
- "dragenter", "dragleave", "dragover", "drop", "error", "load", "abort"
79
+ "click",
80
+ "dblclick",
81
+ "mousedown",
82
+ "mouseup",
83
+ "mouseover",
84
+ "mouseout",
85
+ "mousemove",
86
+ "mouseenter",
87
+ "mouseleave",
88
+ "keydown",
89
+ "keypress",
90
+ "keyup",
91
+ "change",
92
+ "input",
93
+ "submit",
94
+ "focus",
95
+ "blur",
96
+ "copy",
97
+ "cut",
98
+ "paste",
99
+ "scroll",
100
+ "wheel",
101
+ "resize",
102
+ "contextmenu",
103
+ "drag",
104
+ "dragstart",
105
+ "dragend",
106
+ "dragenter",
107
+ "dragleave",
108
+ "dragover",
109
+ "drop",
110
+ "error",
111
+ "load",
112
+ "abort",
84
113
  ];
85
114
  const handleListeners = (el) => {
86
- events.forEach(event => {
115
+ events.forEach((event) => {
87
116
  el.addEventListener(event, (e) => {
88
117
  sendData({
89
- action: 'hook:eventTrigger',
118
+ action: "hook:eventTrigger",
90
119
  data: {
91
- rid: 'event_trigger',
120
+ rid: "event_trigger",
92
121
  object: {
93
122
  uuid: el.widgetOptions.uuid,
94
123
  event,
95
124
  data: {
96
125
  mouse: { x: e.clientX, y: e.clientY },
97
- key: { code: e.keyCode, key: e.key }
98
- }
99
- }
100
- }
126
+ key: { code: e.keyCode, key: e.key },
127
+ },
128
+ },
129
+ },
101
130
  });
102
131
  });
103
132
  });
104
- }
133
+ };
105
134
 
106
- function eventHandlerFunction({ uuid, hookID, event }){
107
- return function(e){
135
+ function eventHandlerFunction({ uuid, hookID, event }) {
136
+ return function (e) {
108
137
  sendData({
109
- action: 'hook:event_'+event,
138
+ action: "hook:event_" + event,
110
139
  data: {
111
140
  rid: hookID,
112
141
  object: {
@@ -114,12 +143,12 @@ function eventHandlerFunction({ uuid, hookID, event }){
114
143
  event,
115
144
  data: {
116
145
  mouse: { x: e.clientX, y: e.clientY },
117
- key: { code: e.keyCode, key: e.key }
118
- }
119
- }
120
- }
146
+ key: { code: e.keyCode, key: e.key },
147
+ },
148
+ },
149
+ },
121
150
  });
122
- }
151
+ };
123
152
  }
124
153
 
125
154
  const createElement = (options) => {
@@ -139,18 +168,25 @@ const stringifyJSON = (json) => {
139
168
 
140
169
  const log = (...strings) => {
141
170
  window.webkit.messageHandlers.external.postMessage(
142
- JSON.stringify({"action": "log", "data": strings
143
- .map((r) =>
144
- typeof r == "object" ? stringifyJSON(r) : `${r.toString()}`,
145
- )
146
- // .map((i) => i.replace(/\"/g, '\\\\"').replace(/\n/g, "\\\\n"))
147
- .join("\n")}, null, 4)
171
+ JSON.stringify(
172
+ {
173
+ action: "log",
174
+ data: strings
175
+ .map((r) =>
176
+ typeof r == "object" ? stringifyJSON(r) : `${r.toString()}`,
177
+ )
178
+ // .map((i) => i.replace(/\"/g, '\\\\"').replace(/\n/g, "\\\\n"))
179
+ .join("\n"),
180
+ },
181
+ null,
182
+ 4,
183
+ ),
148
184
  );
149
185
  };
150
186
 
151
187
  const sendData = (data) => {
152
- log("RESPONSE::"+stringifyJSON(data));
153
- }
188
+ log("RESPONSE::" + stringifyJSON(data));
189
+ };
154
190
 
155
191
  function process_data(data) {
156
192
  return JSON.parse(data);
@@ -158,10 +194,10 @@ function process_data(data) {
158
194
 
159
195
  window.recieveMessage = (data) => {
160
196
  const edata = data;
161
- if(edata.action == 'eventListen') {
197
+ if (edata.action == "eventListen") {
162
198
  const el = findInDom(edata.data.uuid);
163
- if(el){
164
- el.addEventListener(edata.data.event, eventHandlerFunction(edata.data))
199
+ if (el) {
200
+ el.addEventListener(edata.data.event, eventHandlerFunction(edata.data));
165
201
  }
166
202
  } else if (edata.action == "createElement") {
167
203
  const options = edata.data;
@@ -171,7 +207,7 @@ window.recieveMessage = (data) => {
171
207
  log(e.toString());
172
208
  }
173
209
  } else if (edata.action == "addStyleSheet") {
174
- const style = document.createElement('style');
210
+ const style = document.createElement("style");
175
211
  style.textContent = edata.data;
176
212
  document.head.appendChild(style);
177
213
  } else if (edata.action == "updateElement") {
@@ -185,24 +221,30 @@ window.recieveMessage = (data) => {
185
221
  const id = edata.data.id;
186
222
  const rid = edata.data.rid;
187
223
  try {
188
- sendData({ action: 'hook:findElement', data: { rid, object: findInDom(id)?.widgetOptions } });
224
+ sendData({
225
+ action: "hook:findElement",
226
+ data: { rid, object: findInDom(id)?.widgetOptions },
227
+ });
189
228
  } catch (e) {
190
229
  log(e.toString());
191
230
  }
192
- } else if(edata.action == 'message') {
193
- window.dispatchEvent(new CustomEvent('message', {
194
- detail: edata.data
195
- }));
231
+ } else if (edata.action == "message") {
232
+ window.dispatchEvent(
233
+ new CustomEvent("message", {
234
+ detail: edata.data,
235
+ }),
236
+ );
196
237
  }
197
238
  };
198
239
 
199
- window.addEventListener('load', () => {
240
+ window.addEventListener("load", () => {
200
241
  window.exec({
201
242
  ...window.execContext,
202
243
  window,
203
244
  log,
204
- send: (data) => sendData({ action: 'message', data }),
205
- onRecieve: (cb) => window.addEventListener('message', (e) => cb(e.detail || {}))
245
+ send: (data) => sendData({ action: "message", data }),
246
+ onRecieve: (cb) =>
247
+ window.addEventListener("message", (e) => cb(e.detail || {})),
206
248
  });
207
- log('SETUP::READY');
208
- });
249
+ log("SETUP::READY");
250
+ });
package/lib/rew/main.js CHANGED
@@ -5,9 +5,9 @@ const { imp } = require("./functions/import");
5
5
  const { FILES } = require("./const/files");
6
6
 
7
7
  module.exports.run = function (filepath, options = {}, custom_context = {}) {
8
- FILES.forEach(file => {
9
- if(fs.existsSync(file.path)) return;
10
- if(file.content){
8
+ FILES.forEach((file) => {
9
+ if (fs.existsSync(file.path)) return;
10
+ if (file.content) {
11
11
  fs.writeFileSync(file.path, file.content);
12
12
  } else {
13
13
  fs.mkdirSync(file.path, { recursive: true });
@@ -0,0 +1,16 @@
1
+ const jsYaml = require("js-yaml");
2
+ const { findAppPath } = require("./findAppPath");
3
+ const path = require("path");
4
+ const { readFileSync } = require("fs");
5
+
6
+ module.exports.findAppInfo = function (filepath) {
7
+ const appPath = findAppPath(path.dirname(filepath));
8
+ if (appPath) {
9
+ const config = jsYaml.load(readFileSync(path.join(appPath, "app.yaml")));
10
+ return {
11
+ path: appPath,
12
+ config,
13
+ };
14
+ }
15
+ return null;
16
+ };
@@ -0,0 +1,21 @@
1
+ const path = require("path"); // Import the 'path' module
2
+ const fs = require("fs"); // Import the 'path' module
3
+
4
+ module.exports.findAppPath = (currentDir = __dirname) => {
5
+ // Check if app.yaml exists in the current directory
6
+ const appYamlPath = path.join(currentDir, "app.yaml");
7
+ if (fs.existsSync(appYamlPath)) {
8
+ return currentDir;
9
+ }
10
+
11
+ // If not found, move up a directory level
12
+ const parentDir = path.dirname(currentDir);
13
+
14
+ // Check if we reached the root directory
15
+ if (parentDir === currentDir) {
16
+ return null; // Not found
17
+ }
18
+
19
+ // Recursively call the function on the parent directory
20
+ return module.exports.findAppPath(parentDir);
21
+ };
@@ -0,0 +1,13 @@
1
+ module.exports.seededID = function (seed) {
2
+ const charCodes = seed.split("").map((char) => char.charCodeAt(0));
3
+
4
+ let result = "";
5
+ let sum = 0;
6
+
7
+ for (let i = 0; i < charCodes.length; i++) {
8
+ sum += charCodes[i];
9
+ result += String.fromCharCode(((charCodes[i] + sum) % 26) + 97);
10
+ }
11
+
12
+ return result.slice(0, 12);
13
+ };
@@ -26,7 +26,7 @@ module.exports.struct = function struct(template) {
26
26
  instance[key] = defaultValue == "!any" ? null : defaultValue;
27
27
  }
28
28
  }
29
- instance.__proto__ = { '@instance': fun };
29
+ instance.__proto__ = { "@instance": fun };
30
30
  return instance;
31
31
  };
32
32
 
@@ -1,21 +1,24 @@
1
1
  const { compile } = require("../../coffeescript/coffeescript");
2
2
  const { execOptions } = require("../const/opt");
3
3
  const { getFile } = require("./fs");
4
- const babel = require('@babel/core');
5
- const babelReact = require('@babel/preset-react');
4
+ const babel = require("@babel/core");
5
+ const babelReact = require("@babel/preset-react");
6
6
 
7
7
  function tokenizeCoffeeScript(code) {
8
8
  const tokens = [];
9
- let currentToken = '';
9
+ let currentToken = "";
10
10
 
11
11
  for (let i = 0; i < code.length; i++) {
12
12
  const char = code[i];
13
13
  const nextChar = code[i + 1];
14
14
 
15
- if (char === '#') {
15
+ if (char === "#") {
16
16
  // Comment
17
- tokens.push({ type: 'COMMENT', value: char + code.substring(i + 1).split('\n')[0]+'\n' });
18
- i = code.indexOf('\n', i);
17
+ tokens.push({
18
+ type: "COMMENT",
19
+ value: char + code.substring(i + 1).split("\n")[0] + "\n",
20
+ });
21
+ i = code.indexOf("\n", i);
19
22
  } else if (char === '"' || char === "'") {
20
23
  // String
21
24
  let string = char;
@@ -23,7 +26,7 @@ function tokenizeCoffeeScript(code) {
23
26
  i++;
24
27
  while (i < code.length && (code[i] !== char || escaped)) {
25
28
  string += code[i];
26
- if (code[i] === '\\' && !escaped) {
29
+ if (code[i] === "\\" && !escaped) {
27
30
  escaped = true;
28
31
  } else {
29
32
  escaped = false;
@@ -31,25 +34,26 @@ function tokenizeCoffeeScript(code) {
31
34
  i++;
32
35
  }
33
36
  string += char; // Include closing quote
34
- tokens.push({ type: 'STRING', value: string });
35
- } else if (char === '/' && (nextChar === '/' || nextChar === '*')) {
37
+ tokens.push({ type: "STRING", value: string });
38
+ } else if (char === "/" && (nextChar === "/" || nextChar === "*")) {
36
39
  // Regular expression
37
40
  let regex = char;
38
41
  i++;
39
- while (i < code.length && (code[i] !== '/' || regex.endsWith('\\'))) {
42
+ while (i < code.length && (code[i] !== "/" || regex.endsWith("\\"))) {
40
43
  regex += code[i];
41
44
  i++;
42
45
  }
43
- regex += '/';
44
- tokens.push({ type: 'REGEX', value: regex });
46
+ regex += "/";
47
+ tokens.push({ type: "REGEX", value: regex });
45
48
  } else if (/\s/.test(char)) {
46
49
  // Whitespace
47
- if(tokens[tokens.length-1]?.type == 'WHITESPACE'
48
- && tokens[tokens.length-1].value[0] == char
49
- ){
50
- tokens[tokens.length-1].value += char;
50
+ if (
51
+ tokens[tokens.length - 1]?.type == "WHITESPACE" &&
52
+ tokens[tokens.length - 1].value[0] == char
53
+ ) {
54
+ tokens[tokens.length - 1].value += char;
51
55
  } else {
52
- tokens.push({ type: 'WHITESPACE', value: char });
56
+ tokens.push({ type: "WHITESPACE", value: char });
53
57
  }
54
58
  } else if (/[a-zA-Z_$]/.test(char)) {
55
59
  // Identifier
@@ -59,11 +63,11 @@ function tokenizeCoffeeScript(code) {
59
63
  identifier += code[i];
60
64
  i++;
61
65
  }
62
- tokens.push({ type: 'IDENTIFIER', value: identifier });
66
+ tokens.push({ type: "IDENTIFIER", value: identifier });
63
67
  i--; // Move back one character to recheck
64
68
  } else {
65
69
  // Other characters
66
- tokens.push({ type: 'OTHER', value: char });
70
+ tokens.push({ type: "OTHER", value: char });
67
71
  }
68
72
  }
69
73
 
@@ -71,16 +75,31 @@ function tokenizeCoffeeScript(code) {
71
75
  }
72
76
 
73
77
  const gnextToken = (i, n, tokens) => {
74
- return tokens[i + n] ? tokens[i + n].type == 'WHITESPACE' ? gnextToken(i, n + 1, tokens) : { nextToken: tokens[i + n], n } : null;
75
- }
78
+ return tokens[i + n]
79
+ ? tokens[i + n].type == "WHITESPACE"
80
+ ? gnextToken(i, n + 1, tokens)
81
+ : { nextToken: tokens[i + n], n }
82
+ : null;
83
+ };
76
84
 
77
85
  const fnextToken = (i, tokens, type, value) => {
78
- 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));
79
- }
86
+ return tokens
87
+ .map((t, ind) => {
88
+ t.ti = ind;
89
+ return t;
90
+ })
91
+ .slice(i, tokens.length - 1)
92
+ .map((t, ind) => {
93
+ t.ri = ind;
94
+ t.index = ind - i;
95
+ return t;
96
+ })
97
+ .find((t) => t.type == type && (value ? t.value == value : true));
98
+ };
80
99
 
81
100
  function compileRewStuff(content, options) {
82
101
  const tokens = tokenizeCoffeeScript(content);
83
- let result = '';
102
+ let result = "";
84
103
 
85
104
  let hooks = [];
86
105
 
@@ -88,53 +107,60 @@ function compileRewStuff(content, options) {
88
107
  const token = tokens[i];
89
108
  let { nextToken, n } = gnextToken(i, 1, tokens) || {};
90
109
 
91
- if (token.type === 'IDENTIFIER' && token.value === 'opt') {
110
+ if (token.type === "IDENTIFIER" && token.value === "opt") {
92
111
  const { nextToken: nextNextToken } = gnextToken(i, 2, tokens) || {};
93
- if(nextNextToken && nextNextToken.value == 'jsxPragma'){
112
+ if (nextNextToken && nextNextToken.value == "jsxPragma") {
94
113
  const { nextToken: nextLastToken } = gnextToken(i, 5, tokens) || {};
95
114
  execOptions.jsxPragma = nextLastToken.value.slice(1).slice(0, -1);
96
115
  }
97
116
  }
98
117
 
99
- if (token.type === 'COMMENT' && token.value.slice(1).trim() === '@jsx') {
118
+ if (token.type === "COMMENT" && token.value.slice(1).trim() === "@jsx") {
100
119
  options.jsx = true;
101
120
  }
102
121
 
103
- if (token.type === 'IDENTIFIER' && token.value === 'import') {
122
+ if (token.type === "IDENTIFIER" && token.value === "import") {
104
123
  // console.log(nextToken.type);
105
124
  let ind = i + n + 2;
106
125
 
107
126
  let defaultName;
108
- if (nextToken.type === 'STRING') {
127
+ if (nextToken.type === "STRING") {
109
128
  result += `inc ${nextToken.value}`;
110
129
  i += n;
111
- } else if (nextToken.value === '{') {
112
- const closingBraceToken = fnextToken(ind, tokens, 'OTHER', '}');
113
- const nameToken = fnextToken(ind, tokens, 'STRING');
130
+ } else if (nextToken.value === "{") {
131
+ const closingBraceToken = fnextToken(ind, tokens, "OTHER", "}");
132
+ const nameToken = fnextToken(ind, tokens, "STRING");
114
133
  if (closingBraceToken) {
115
134
  const exportsTokens = tokens.slice(ind, closingBraceToken.ti);
116
- const exports = exportsTokens.filter(t => t.type === 'IDENTIFIER').map(t => t.value).join(', ');
135
+ const exports = exportsTokens
136
+ .filter((t) => t.type === "IDENTIFIER")
137
+ .map((t) => t.value)
138
+ .join(", ");
117
139
  result += `{ ${exports} } = inc ${nameToken.value}`;
118
140
  i = nameToken.ti;
119
141
  }
120
- } else if (nextToken.value === '*') {
121
- const asToken = fnextToken(ind, tokens, 'IDENTIFIER', 'as');
122
- const nameToken = fnextToken(asToken.ri, tokens, 'STRING');
142
+ } else if (nextToken.value === "*") {
143
+ const asToken = fnextToken(ind, tokens, "IDENTIFIER", "as");
144
+ const nameToken = fnextToken(asToken.ri, tokens, "STRING");
123
145
  if (asToken) {
124
- const nextToken = fnextToken(asToken.ti + 1, tokens, 'IDENTIFIER');
146
+ const nextToken = fnextToken(asToken.ti + 1, tokens, "IDENTIFIER");
125
147
  defaultName = nextToken.value;
126
148
  result += `${defaultName} = inc ${nameToken.value}`;
127
149
  i = ind + 6;
128
150
  }
129
- } else if(nextToken) {
130
- const nameToken = fnextToken(ind, tokens, 'STRING');
151
+ } else if (nextToken) {
152
+ const nameToken = fnextToken(ind, tokens, "STRING");
131
153
  defaultName = nextToken.value;
132
- let { nextToken: nextNextToken, n: n2 } = gnextToken(i + 2, 1, tokens) || {};
133
- if(nextNextToken?.type == 'OTHER' && nextNextToken?.value == ','){
134
- const closingBraceToken = fnextToken(ind, tokens, 'OTHER', '}');
135
- if(closingBraceToken){
154
+ let { nextToken: nextNextToken, n: n2 } =
155
+ gnextToken(i + 2, 1, tokens) || {};
156
+ if (nextNextToken?.type == "OTHER" && nextNextToken?.value == ",") {
157
+ const closingBraceToken = fnextToken(ind, tokens, "OTHER", "}");
158
+ if (closingBraceToken) {
136
159
  const exportsTokens = tokens.slice(ind, closingBraceToken.ti);
137
- const exports = exportsTokens.filter(t => t.type === 'IDENTIFIER').map(t => t.value).join(', ');
160
+ const exports = exportsTokens
161
+ .filter((t) => t.type === "IDENTIFIER")
162
+ .map((t) => t.value)
163
+ .join(", ");
138
164
  result += `{ default: ${defaultName}, ${exports} } = inc ${nameToken?.value || ""}`;
139
165
  i = closingBraceToken.ti + 4;
140
166
  }
@@ -142,27 +168,29 @@ function compileRewStuff(content, options) {
142
168
  result += `{ default: ${defaultName} } = inc ${nameToken?.value || ""}`;
143
169
  i = ind + 2;
144
170
  }
145
-
146
171
  }
147
172
 
148
- const nextLastToken = fnextToken(i, tokens, 'IDENTIFIER');
173
+ const nextLastToken = fnextToken(i, tokens, "IDENTIFIER");
149
174
 
150
- if(nextLastToken?.value == 'assert'){
151
- result += ', ';
175
+ if (nextLastToken?.value == "assert") {
176
+ result += ", ";
152
177
  i += 3;
153
178
  }
154
179
 
155
180
  continue;
156
181
  }
157
182
 
158
-
159
- if (token.type === 'IDENTIFIER' && token.value === 'pub' &&
160
- nextToken && nextToken.type === 'IDENTIFIER' &&
161
- nextToken.value && nextToken.value !== 'undefined') {
162
-
183
+ if (
184
+ token.type === "IDENTIFIER" &&
185
+ token.value === "pub" &&
186
+ nextToken &&
187
+ nextToken.type === "IDENTIFIER" &&
188
+ nextToken.value &&
189
+ nextToken.value !== "undefined"
190
+ ) {
163
191
  hooks.push({
164
192
  index: i + 1,
165
- value: `"${nextToken.value}", `
193
+ value: `"${nextToken.value}", `,
166
194
  });
167
195
  }
168
196
 
@@ -182,13 +210,17 @@ function compileRewStuff(content, options) {
182
210
  return result;
183
211
  }
184
212
 
185
-
186
213
  const cpl = (module.exports.compile = function (file, options = {}) {
187
- let c = compile(compileRewStuff(file.content, options), { ...options, filename: file.path, bare: false, inlineMap: false });
188
- if(execOptions.jsx || options.jsx) {
214
+ let c = compile(compileRewStuff(file.content, options), {
215
+ ...options,
216
+ filename: file.path,
217
+ bare: false,
218
+ inlineMap: false,
219
+ });
220
+ if (execOptions.jsx || options.jsx) {
189
221
  c = babel.transformSync(c, {
190
222
  presets: [[babelReact, { pragma: execOptions.jsxPragma }]],
191
- plugins: []
223
+ plugins: [],
192
224
  }).code;
193
225
  }
194
226
  return c;