diff --git a/package-lock.json b/package-lock.json index 190ba0ab..99ee60b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7109,8 +7109,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -7131,14 +7130,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7153,20 +7150,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -7283,8 +7277,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -7296,7 +7289,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7311,7 +7303,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7319,14 +7310,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -7345,7 +7334,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -7426,8 +7414,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -7439,7 +7426,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -7525,8 +7511,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -7562,7 +7547,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7582,7 +7566,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -7626,14 +7609,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, diff --git a/src/node/api.mjs b/src/node/api.mjs index 7d53084b..3d28d0ce 100644 --- a/src/node/api.mjs +++ b/src/node/api.mjs @@ -191,7 +191,30 @@ export function _wrap(OpClass) { */ wrapped = async (input, args=null) => { const {transformedInput, transformedArgs} = prepareOp(opInstance, input, args); + + // SPECIAL CASE for Magic. + if (opInstance.flowControl) { + opInstance.ingValues = transformedArgs; + + let state = { + "progress": 0, + "dish": ensureIsDish(transformedInput), + "opList": [opInstance], + "numJumps": 0, + "numRegisters": 0, + "forkOffset": 0 + } + + const updatedState = await opInstance.run(state); + + return new NodeDish({ + value: updatedState.dish.value, + type: opInstance.outputType, + }); + } + const result = await opInstance.run(transformedInput, transformedArgs); + return new NodeDish({ value: result, type: opInstance.outputType, diff --git a/tests/node/tests/operations.mjs b/tests/node/tests/operations.mjs index 0ad10029..e9263eac 100644 --- a/tests/node/tests/operations.mjs +++ b/tests/node/tests/operations.mjs @@ -1076,5 +1076,330 @@ ExifImageHeight: 57`); }), + it("performs MAGIC", async () => { + const input = "WUagwsiae6mP8gNtCCLUFpCpCB26RmBDoDD8PacdAmzAzBVjkK2QstFXaKhpC6iUS7RHqXrJtFisoRSgoJ4whjm1arm864qaNq4RcfUmLHrcsAaZc5TXCYifNdgS83gDeejGX46gaiMyuBV6EskHt1scgJ88x2tNSotQDwbGY1mmCob2ARGFvCKYNqiN9ipMq1ZU1mgkdbNuGcb76aRtYWhCGUc8g93UJudhb8htsheZnwTpgqhx83SVJSZXMXUjJT2zmpC7uXWtumqokbdSi88YtkWDAc1Toouh2oH4D4ddmNKJWUDpMwmngUmK14xwmomccPQE9hM172APnSqwxdKQ172RkcAsysnmj5gGtRmVNNh2s359wr6mS2QRP"; + const output = [ + { + recipe: [ + { op: 'From Base58', args: ['123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', false] }, + { op: 'Zlib Inflate', args: [0, 0, 'Adaptive', false, false] }, + { op: 'From Hex', args: ['Space'] } + ], + data: 'The last ever dolphin message was misinterpreted as a surprisingly sophisticated attempt to do a dou', + languageScores: [ + { lang: 'en', + score: 125.2242215463834, + probability: 0.9999999999995666 }, + { lang: 'de', + score: 139.07214598442948, + probability: 0.9999999996948968 }, + { lang: 'da', + score: 163.5912872923829, + probability: 0.9999982307179437 }, + { lang: 'nn', + score: 184.87781010323778, + probability: 0.9996824311001093 }, + { lang: 'nl', + score: 186.65400017962355, + probability: 0.9995478923448857 }, + { lang: 'id', + score: 195.10783158286532, + probability: 0.9979061805092018 }, + { lang: 'no', + score: 195.9426356809362, + probability: 0.9975948291599267 }, + { lang: 'cs', + score: 198.6413087683924, + probability: 0.9962906782769531 }, + { lang: 'ro', + score: 210.86139006654741, + probability: 0.979830327546602 }, + { lang: 'pl', + score: 239.0004171307482, + probability: 0.7562182144228224 }, + { lang: 'tr', + score: 242.98185937693376, + probability: 0.6953741146251353 }, + { lang: 'sv', + score: 255.14597866546873, + probability: 0.4856581623250311 }, + { lang: 'et', + score: 263.34457729011217, + probability: 0.34642367921615513 }, + { lang: 'fr', + score: 296.13887840675034, + probability: 0.03910697796810625 }, + { lang: 'sk', + score: 328.80097683234993, + probability: 0.00123907684578628 }, + { lang: 'hu', + score: 343.0914264767343, + probability: 0.0001900103812403353 }, + { lang: 'it', + score: 363.228683918485, + probability: 0.00000962963279593776 }, + { lang: 'pt', + score: 371.9006025110216, + probability: 0.00000237778274370104 }, + { lang: 'ca', + score: 371.95107438550946, + probability: 0.0000023580510432053003 }, + { lang: 'hr', + score: 399.73398118377037, + probability: 1.744982047746646e-8 }, + { lang: 'es', + score: 400.84646089553183, + probability: 1.4156720240521281e-8 }, + { lang: 'vi', + score: 402.10107920399264, + probability: 1.1169764224661094e-8 }, + { lang: 'sl', + score: 405.5457655647606, + probability: 5.792252788516805e-9 }, + { lang: 'lt', score: 596.5783206516687, probability: 0 }, + { lang: 'lv', score: 655.561080051702, probability: 0 }, + { lang: 'fi', score: 1680.5988867104547, probability: 0 }, + { lang: 'sr', score: 3852.241870759605, probability: 0 }, + { lang: 'zh', score: 5599.531932355281, probability: 0 }, + { lang: 'el', score: 6315.400534582482, probability: 0 }, + { lang: 'ko', score: 7277.2489575276995, probability: 0 }, + { lang: 'bg', score: 9247.807749861991, probability: 0 }, + { lang: 'th', score: 9491.8009000258, probability: 0 }, + { lang: 'ja', score: 10449.51313154949, probability: 0 }, + { lang: 'he', score: 11347.28346104089, probability: 0 }, + { lang: 'ru', score: 11814.689579434824, probability: 0 }, + { lang: 'uk', score: 12174.95110880415, probability: 0 }, + { lang: 'fa', score: 13260.658274652691, probability: 0 }, + { lang: 'ar', score: 14716.3920118038, probability: 0 }, + { lang: 'hi', score: 15391.252264306175, probability: 0 } + ], + fileType: null, + isUTF8: true, + entropy: 4.359286179828585, + matchingOps: [], + useful: false, + matchesCrib: null + }, + { + recipe: [ { op: 'From Base58', args: ['123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', false] } ], + data: 'xœ’ÑqÃ0\fCWá\b‰cKò8mâì?B\u001eAŠUûÕ»œOb@\u0010€xìֆµÃ¶›µ§µ»õ‡õ]×ÃzÓwÓ\u0015äÛ13-§µKõ—0t=¼½õdë\u001c˘S\u0000uÁ\u001f´Pñõ³*ŒppuÝÅ\u0003', + languageScores:[ + { lang: 'zh', score: 215110.97112616687, probability: 0 }, + { lang: 'tr', score: 220681.60597877944, probability: 0 }, + { lang: 'vi', score: 222456.65881904965, probability: 0 }, + { lang: 'id', score: 224044.62863298706, probability: 0 }, + { lang: 'ko', score: 224251.7770504099, probability: 0 }, + { lang: 'ca', score: 226341.0410197607, probability: 0 }, + { lang: 'et', score: 228065.41105887358, probability: 0 }, + { lang: 'pt', score: 229721.1668924617, probability: 0 }, + { lang: 'hr', score: 231653.8278878275, probability: 0 }, + { lang: 'nn', score: 232634.26616193476, probability: 0 }, + { lang: 'ro', score: 237315.86995651436, probability: 0 }, + { lang: 'uk', score: 238647.09334894008, probability: 0 }, + { lang: 'ja', score: 240068.05259944845, probability: 0 }, + { lang: 'no', score: 241300.63523473177, probability: 0 }, + { lang: 'hu', score: 242303.62403450147, probability: 0 }, + { lang: 'pl', score: 242419.22474038566, probability: 0 }, + { lang: 'lt', score: 242433.7049552153, probability: 0 }, + { lang: 'bg', score: 242693.77923288214, probability: 0 }, + { lang: 'cs', score: 243439.71687130767, probability: 0 }, + { lang: 'sl', score: 244783.8516143228, probability: 0 }, + { lang: 'sr', score: 245641.447561803, probability: 0 }, + { lang: 'el', score: 245869.9941369833, probability: 0 }, + { lang: 'th', score: 245932.33916414433, probability: 0 }, + { lang: 'ru', score: 246782.7072075852, probability: 0 }, + { lang: 'ar', score: 247312.3407109036, probability: 0 }, + { lang: 'fr', score: 253209.2034747157, probability: 0 }, + { lang: 'en', score: 253317.63072843806, probability: 0 }, + { lang: 'da', score: 253653.71939518297, probability: 0 }, + { lang: 'es', score: 253945.01214035793, probability: 0 }, + { lang: 'nl', score: 254511.98408778434, probability: 0 }, + { lang: 'sv', score: 256230.51131455088, probability: 0 }, + { lang: 'fa', score: 256413.26329932833, probability: 0 }, + { lang: 'sk', score: 259674.11030614204, probability: 0 }, + { lang: 'lv', score: 262504.9549152398, probability: 0 }, + { lang: 'he', score: 264875.43235331005, probability: 0 }, + { lang: 'it', score: 274601.6513992457, probability: 0 }, + { lang: 'de', score: 277043.4679615947, probability: 0 }, + { lang: 'fi', score: 281253.27398870926, probability: 0 }, + { lang: 'hi', score: 288881.45337660616, probability: 0 } + ], + fileType:{ + name: 'Zlib Deflate', + ext: 'zlib', + mime: 'application/x-deflate', + desc: '' + }, + isUTF8: false, + entropy: 7.195097600311693, + matchingOps:[ + { + op: 'Zlib Inflate', + match: '^\\x78(\\x01|\\x9c|\\xda|\\x5e)', + flags: '', + args: [0, 0, 'Adaptive', false, false], + useful: false + } + ], + useful: false, + matchesCrib: null + }, + { + recipe: [ + { op: 'From Base58', args: ['123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', false] }, + { op: 'Zlib Inflate', args: [0, 0, 'Adaptive', false, false] } + ], + data: '54 68 65 20 6c 61 73 74 20 65 76 65 72 20 64 6f 6c 70 68 69 6e 20 6d 65 73 73 61 67 65 20 77 61 73 2', + languageScores:[ + { lang: 'lt', score: 4020.942783100774, probability: 0 }, + { lang: 'et', score: 4037.782493918477, probability: 0 }, + { lang: 'pl', score: 4071.733116138693, probability: 0 }, + { lang: 'ca', score: 4239.945529560806, probability: 0 }, + { lang: 'da', score: 4275.663552658962, probability: 0 }, + { lang: 'nn', score: 4307.015160080877, probability: 0 }, + { lang: 'no', score: 4379.829861046261, probability: 0 }, + { lang: 'sk', score: 4633.456180672558, probability: 0 }, + { lang: 'de', score: 4719.603246008054, probability: 0 }, + { lang: 'sl', score: 4726.246618156058, probability: 0 }, + { lang: 'fi', score: 4794.237435613583, probability: 0 }, + { lang: 'lv', score: 4806.998921950214, probability: 0 }, + { lang: 'cs', score: 4868.721721210801, probability: 0 }, + { lang: 'en', score: 4950.0684965334995, probability: 0 }, + { lang: 'hu', score: 4995.323898913292, probability: 0 }, + { lang: 'nl', score: 4999.432835113283, probability: 0 }, + { lang: 'ro', score: 5162.242153914779, probability: 0 }, + { lang: 'tr', score: 5265.836504599617, probability: 0 }, + { lang: 'pt', score: 5312.023757903025, probability: 0 }, + { lang: 'hr', score: 5345.380617593091, probability: 0 }, + { lang: 'ko', score: 5381.6478783926905, probability: 0 }, + { lang: 'vi', score: 5718.828322653147, probability: 0 }, + { lang: 'it', score: 5875.9231271621875, probability: 0 }, + { lang: 'es', score: 5983.873285673707, probability: 0 }, + { lang: 'fr', score: 6262.080912550161, probability: 0 }, + { lang: 'id', score: 6601.300797911038, probability: 0 }, + { lang: 'sr', score: 6654.144639340762, probability: 0 }, + { lang: 'uk', score: 7782.677033025678, probability: 0 }, + { lang: 'ru', score: 8053.479010942278, probability: 0 }, + { lang: 'sv', score: 8090.580294809194, probability: 0 }, + { lang: 'zh', score: 8177.896267663754, probability: 0 }, + { lang: 'bg', score: 8236.236191303162, probability: 0 }, + { lang: 'he', score: 9635.83876515383, probability: 0 }, + { lang: 'ar', score: 9828.272236809067, probability: 0 }, + { lang: 'ja', score: 9872.065475623614, probability: 0 }, + { lang: 'el', score: 10153.124281359962, probability: 0 }, + { lang: 'th', score: 16395.75614813131, probability: 0 }, + { lang: 'hi', score: 27382.573660336377, probability: 0 }, + { lang: 'fa', score: 170691.27147588678, probability: 0 } + ], + fileType: null, + isUTF8: true, + entropy: 3.1498667149804396, + matchingOps:[ + { op: 'From Hex', + match: '^[\\dA-F]{2}(?: [\\dA-F]{2})*$', + flags: 'i', + args: ['Space'], + useful: false + }, + { op: 'From Hexdump', + match: '^(?:(?:[\\dA-F]{4,16}h?:?)?[ \\t]*((?:[\\dA-F]{2} ){1,8}(?:[ \\t]|[\\dA-F]{2}-)(?:[\\dA-F]{2} ){1,8}|(?:[\\dA-F]{4} )*[\\dA-F]{4}|(?:[\\dA-F]{2} )*[\\dA-F]{2})[^\\n]*\\n?){2,}$', + flags: 'i', + args: [], + useful: false + } + ], + useful: false, + matchesCrib: null + }, + { + recipe: [], + data: 'WUagwsiae6mP8gNtCCLUFpCpCB26RmBDoDD8PacdAmzAzBVjkK2QstFXaKhpC6iUS7RHqXrJtFisoRSgoJ4whjm1arm864qaNq4R', + languageScores: [ + { lang: 'en', score: 1322.88712942794, probability: 0 }, + { lang: 'pt', score: 1328.9071778467946, probability: 0 }, + { lang: 'es', score: 1499.8082245346486, probability: 0 }, + { lang: 'ca', score: 1563.0091696371378, probability: 0 }, + { lang: 'it', score: 1570.1642147427024, probability: 0 }, + { lang: 'vi', score: 1618.2318632861754, probability: 0 }, + { lang: 'fr', score: 1749.7489968143416, probability: 0 }, + { lang: 'de', score: 1770.6756390171297, probability: 0 }, + { lang: 'id', score: 1784.9300193685633, probability: 0 }, + { lang: 'sv', score: 2099.0743314846904, probability: 0 }, + { lang: 'nl', score: 2144.1470604048636, probability: 0 }, + { lang: 'pl', score: 2194.198150325025, probability: 0 }, + { lang: 'nn', score: 2268.3275668395354, probability: 0 }, + { lang: 'ro', score: 2276.237691757556, probability: 0 }, + { lang: 'no', score: 2293.9213133644007, probability: 0 }, + { lang: 'hr', score: 2565.2302900308428, probability: 0 }, + { lang: 'da', score: 2617.902713714368, probability: 0 }, + { lang: 'tr', score: 2723.61992089351, probability: 0 }, + { lang: 'fi', score: 2758.0636034887684, probability: 0 }, + { lang: 'sk', score: 2850.6382152940587, probability: 0 }, + { lang: 'sl', score: 2884.394383865182, probability: 0 }, + { lang: 'cs', score: 3012.2448524304577, probability: 0 }, + { lang: 'et', score: 3109.3957721509546, probability: 0 }, + { lang: 'hu', score: 3116.6065874254855, probability: 0 }, + { lang: 'lt', score: 4030.1831236307294, probability: 0 }, + { lang: 'lv', score: 4891.534029615823, probability: 0 }, + { lang: 'zh', score: 10308.630736378773, probability: 0 }, + { lang: 'ja', score: 14512.600885650681, probability: 0 }, + { lang: 'ko', score: 14746.71957673977, probability: 0 }, + { lang: 'el', score: 17825.432781080377, probability: 0 }, + { lang: 'sr', score: 18718.151933023175, probability: 0 }, + { lang: 'bg', score: 25514.40356919307, probability: 0 }, + { lang: 'ru', score: 27069.357131947643, probability: 0 }, + { lang: 'he', score: 27192.837699276748, probability: 0 }, + { lang: 'uk', score: 27436.685419942954, probability: 0 }, + { lang: 'th', score: 28783.84766499238, probability: 0 }, + { lang: 'ar', score: 36435.92420598504, probability: 0 }, + { lang: 'fa', score: 42141.35472527937, probability: 0 }, + { lang: 'hi', score: 58009.58379895255, probability: 0 } + ], + fileType: null, + isUTF8: true, + entropy: 5.6887987925007035, + matchingOps: [ + { op: 'From Base58', + match: '^[1-9A-HJ-NP-Za-km-z]{20,}$', + flags: '', + args: ['123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', false], + useful: false }, + { op: 'From Base58', + match: '^[1-9A-HJ-NP-Za-km-z]{20,}$', + flags: '', + args: ['rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz', false], + useful: false }, + { op: 'From Base64', + match: '^\\s*[A-Z\\d\\-_]{20,}\\s*$', + flags: 'i', + args: ['A-Za-z0-9-_', true], + useful: false }, + { op: 'From Base64', + match: '^\\s*[A-Z\\d_.]{20,}\\s*$', + flags: 'i', + args: ['A-Za-z0-9_.', true], + useful: false }, + { op: 'From Base64', + match: '^\\s*[A-Z\\d+\\-]{20,}\\s*$', + flags: 'i', + args: ['+\\-0-9A-Za-z', true], + useful: false }, + { op: 'From Base64', + match: '^\\s*[A-Z\\d./]{20,}\\s*$', + flags: 'i', + args: ['./0-9A-Za-z', true], + useful: false } + ], + useful: false, + matchesCrib: null + } + ]; + + const res = await chef.magic(input); + + assert.deepStrictEqual(output, res.value); + }), + + ]);