lilact 0.28.1 → 0.28.4

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lilact",
3
- "version": "0.28.1",
3
+ "version": "0.28.4",
4
4
  "description": "A Little React/JSX Runtime Implementation for Browser",
5
5
  "repository": "github:arashkazemi/lilact",
6
6
  "homepage": "https://arashkazemi.github.io/lilact/",
package/src/errors.jsx CHANGED
@@ -37,6 +37,15 @@ import Lilact from "./lilact.jsx";
37
37
  import { required_scripts } from "./run.jsx";
38
38
  import { css } from "@emotion/css";
39
39
 
40
+ function isSafari() {
41
+ const userAgent = navigator.userAgent;
42
+
43
+ return (
44
+ /Safari/.test(userAgent) &&
45
+ !/Chrome|Chromium|CriOS|FxiOS|EdgiOS|OPiOS/.test(userAgent)
46
+ );
47
+ }
48
+
40
49
  function number(value) {
41
50
  const result = Number(value);
42
51
  return Number.isFinite(result) ? result : null;
@@ -87,22 +96,29 @@ function stackLocation(stack) {
87
96
  }
88
97
 
89
98
  function browserLocation(error) {
90
- const line = number(
91
- error?.lineNumber ??
92
- error?.lineno ??
93
- error?.line
94
- );
95
-
96
- const column = number(
97
- error?.columnNumber ??
98
- error?.colno ??
99
- error?.column
100
- );
101
-
102
- return {
103
- line: line == null ? null : Math.max(0, line - 1),
104
- column: column == null ? null : Math.max(0, column - 1),
105
- };
99
+ const line = number(
100
+ error?.lineNumber ??
101
+ error?.lineno ??
102
+ error?.line
103
+ );
104
+ const column = number(
105
+ error?.columnNumber ??
106
+ error?.colno ??
107
+ error?.column
108
+ );
109
+
110
+ const lineOffset = isSafari() ? 0 : 1;
111
+
112
+ return {
113
+ line:
114
+ line == null
115
+ ? null
116
+ : Math.max(0, line - lineOffset),
117
+ column:
118
+ column == null
119
+ ? null
120
+ : Math.max(0, column - 1),
121
+ };
106
122
  }
107
123
 
108
124
  function traceBlock(error) {
@@ -203,15 +219,20 @@ export function traceError(value, runPath) {
203
219
  runPath ||
204
220
  null;
205
221
 
222
+ const sameSource =
223
+ !source?.path ||
224
+ !stack?.path ||
225
+ source.path === stack.path;
226
+
206
227
  let line =
207
- stack?.line ??
208
- browser.line ??
209
- null;
228
+ sameSource
229
+ ? stack?.line ?? browser.line ?? null
230
+ : browser.line ?? null;
210
231
 
211
232
  let column =
212
- stack?.column ??
213
- browser.column ??
214
- null;
233
+ sameSource
234
+ ? stack?.column ?? browser.column ?? null
235
+ : browser.column ?? null;
215
236
 
216
237
  const result = {
217
238
  fileName,
@@ -253,7 +274,7 @@ export function traceError(value, runPath) {
253
274
  ) {
254
275
  result.fileName ||= block.path || runPath || null;
255
276
  result.lineNumber ??= block.line;
256
- result.columnNumber ??= block.col;
277
+ result.columnNumber ??= block.column;
257
278
  result.label = block.desc;
258
279
  }
259
280
 
@@ -390,7 +411,7 @@ export function scanBlockLabels(code, path) {
390
411
  Lilact.blocks_info.labels[match[1]] = {
391
412
  path,
392
413
  line: Number(match[2]),
393
- col: Number(match[3]),
414
+ column: Number(match[3]),
394
415
  desc: match[4],
395
416
  };
396
417
  }
package/src/jsx.js CHANGED
@@ -950,8 +950,10 @@ function generateSourceMap(json, path, jsx_eols, out_eols, mappings=[])
950
950
  }
951
951
  sourcemap.mappings = mstr.substring(1).replace(/;,/g, ";");
952
952
 
953
- return "\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(JSON.stringify(sourcemap));
953
+ let out = "\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(JSON.stringify(sourcemap));
954
+ out += `\n//# sourceURL=eval:/${path}`;
954
955
 
956
+ return out;
955
957
  }
956
958
 
957
959
 
package/src/run.jsx CHANGED
@@ -181,20 +181,19 @@ export function run(
181
181
  path,
182
182
  mappings: module.mappings,
183
183
  factory: "createComponent",
184
- appendSourcemap: false,
184
+ appendSourcemap: true,
185
185
  injectTraceLabels: true,
186
186
  produceCJS: true,
187
187
  blocks_info: Lilact.blocks_info,
188
188
  });
189
- } catch (value) {
189
+ }
190
+ catch (value) {
190
191
  const error = asError(value);
191
-
192
192
  error.fileName ??= path;
193
+ error.lilact_source ??= {path};
193
194
  error.sourcePhase = "transpile";
194
-
195
195
  module.error = error;
196
196
  Lilact.error = error;
197
-
198
197
  throw error;
199
198
  }
200
199
 
@@ -206,30 +205,23 @@ export function run(
206
205
  * sourceURL helps when the browser includes eval locations in its stack.
207
206
  * It is not used as the authoritative source; the catch block below is.
208
207
  */
209
- processed += `\n//# sourceURL=eval:/${path}`;
210
208
 
211
209
  try {
210
+ new Function(processed);
211
+
212
212
  globalThis.Lilact = Lilact;
213
213
  globalThis.createComponent = Lilact.createComponent;
214
214
  globalThis.Fragment = Lilact.Fragment;
215
215
 
216
216
  const result = eval(processed);
217
-
218
217
  module.loaded = true;
219
218
 
220
- return isEmpty(module.exports)
221
- ? result
222
- : module.exports;
223
- } catch (value) {
224
- /*
225
- * This catch executes in the module whose eval failed, including
226
- * generated-JavaScript syntax errors. Therefore path is authoritative.
227
- */
219
+ return isEmpty(module.exports) ? result : module.exports;
220
+ }
221
+ catch (value) {
228
222
  const error = report(value, path);
229
-
230
223
  error.sourcePhase ??= "runtime";
231
224
  module.error = error;
232
-
233
225
  throw error;
234
226
  }
235
227
  }