Skip to content
This repository was archived by the owner on Apr 23, 2023. It is now read-only.

Commit 2000fe1

Browse files
committed
support firefox's callstack format (issue #3)
1 parent 9f00f3b commit 2000fe1

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

.vscode/settings.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"liveServer.settings.port": 5501,
33
"cSpell.words": [
44
"bootcamp",
5-
"bootcamps"
5+
"bootcamps",
6+
"huggle"
67
]
78
}

index.js

+42-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,20 @@ Object.prototype.toMarkdown = function (hint) {
1919

2020
(() => {
2121
const markdownConverter = new showdown.Converter()
22-
const skills = localStorage.getItem('skills') ?? {};
22+
23+
function retrieveSkills() {
24+
let storedSkills = localStorage.getItem('skills');
25+
if (storedSkills) {
26+
if (typeof (storedSkills = JSON.parse(storedSkills)) !== 'object')
27+
console.warn("Error reading skills from local storage.");
28+
else
29+
return storedSkills;
30+
}
31+
32+
return {};
33+
}
34+
35+
const skills = retrieveSkills();
2336

2437
function parseURL(url) {
2538
const options = {};
@@ -458,9 +471,26 @@ Object.prototype.toMarkdown = function (hint) {
458471
}
459472

460473
function retrieveCallStack() {
461-
return Array.from((new Error().stack)
462-
.matchAll(/^[ \t]+at[ \t]+([^ :]+)/mg))
463-
.map(match => match[1]).slice(1);
474+
const errorText = new Error().stack;
475+
476+
const matchFFCallStack = stack =>
477+
[...stack.matchAll(/^([^@]*)@.*$/gm)];
478+
const isFFCallStack = stack =>
479+
matchFFCallStack(stack).length === stack.trim().split('\n').length;
480+
const retrieveFFCallStack = stack =>
481+
matchFFCallStack(stack).map(m => m[1].replace(/\(.*$/,''));
482+
const retrieveChromeCallStack = stack =>
483+
[...stack.matchAll(/^[ \t]+at[ \t]+([^ :]+)/mg)]
484+
.map(m => m[1]);
485+
const fastforwardStack = stackArray =>
486+
stackArray.slice(1 + stackArray
487+
.findIndex(e => e === 'retrieveCallStack'));
488+
489+
return fastforwardStack(
490+
isFFCallStack(errorText) ?
491+
retrieveFFCallStack(errorText) :
492+
retrieveChromeCallStack(errorText)
493+
);
464494
}
465495

466496
function messageHelper(callstack) {
@@ -809,9 +839,15 @@ Orwa is incredibly impressed by you!!!
809839
);
810840
}
811841

812-
function solve() {
842+
function updateSkills() {
843+
localStorage.setItem('skills',
844+
JSON.stringify(skills));
845+
}
846+
847+
function solve(acquiredSkills = {}) {
813848
showTransition();
814-
849+
updateSkills();
850+
815851
// Increment level number and refresh view in a few seconds.
816852
// localStorage.setItem('level', ++gameState.level)
817853
// setTimeout(refresh, gameState.transitionTime);

0 commit comments

Comments
 (0)