@@ -19,7 +19,20 @@ Object.prototype.toMarkdown = function (hint) {
19
19
20
20
( ( ) => {
21
21
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 ( ) ;
23
36
24
37
function parseURL ( url ) {
25
38
const options = { } ;
@@ -458,9 +471,26 @@ Object.prototype.toMarkdown = function (hint) {
458
471
}
459
472
460
473
function retrieveCallStack ( ) {
461
- return Array . from ( ( new Error ( ) . stack )
462
- . matchAll ( / ^ [ \t ] + a t [ \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 ] + a t [ \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
+ ) ;
464
494
}
465
495
466
496
function messageHelper ( callstack ) {
@@ -809,9 +839,15 @@ Orwa is incredibly impressed by you!!!
809
839
) ;
810
840
}
811
841
812
- function solve ( ) {
842
+ function updateSkills ( ) {
843
+ localStorage . setItem ( 'skills' ,
844
+ JSON . stringify ( skills ) ) ;
845
+ }
846
+
847
+ function solve ( acquiredSkills = { } ) {
813
848
showTransition ( ) ;
814
-
849
+ updateSkills ( ) ;
850
+
815
851
// Increment level number and refresh view in a few seconds.
816
852
// localStorage.setItem('level', ++gameState.level)
817
853
// setTimeout(refresh, gameState.transitionTime);
0 commit comments