occam-languages 2.1.17 → 2.1.18

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.
@@ -36,7 +36,20 @@ function breakable(innerFunction) {
36
36
  const continuation = remainingArguments.pop(), context = remainingArguments.pop();
37
37
  this.break(context, ()=>{
38
38
  setImmediate(()=>{
39
- innerFunction.call(this, ...remainingArguments, context, continuation);
39
+ // 1. Identify what we are about to run
40
+ const nodeString = this.getString ? this.getString() : 'Unknown Node';
41
+ const funcName = innerFunction.name || 'anonymous function';
42
+ const watchdog = setTimeout(()=>{
43
+ console.error(`\n🚨 CONTINUATION LEAK DETECTED!`);
44
+ console.error(`Function: ${funcName}`);
45
+ console.error(`Node: ${nodeString}`);
46
+ console.error(`The baton was passed here but never handed back.\n`);
47
+ }, 2000);
48
+ const safeContinuation = (...args)=>{
49
+ clearTimeout(watchdog);
50
+ continuation(...args);
51
+ };
52
+ innerFunction.call(this, ...remainingArguments, context, safeContinuation);
40
53
  });
41
54
  });
42
55
  };
@@ -79,4 +92,4 @@ const _default = {
79
92
  lineIndexFromNodeAndTokens
80
93
  };
81
94
 
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvYnJlYWtQb2ludC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEJyZWFrUG9pbnQgZnJvbSBcIi4uL2JyZWFrUG9pbnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJyZWFrYWJsZShpbm5lckZ1bmN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbiguLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBjb250aW51YXRpb24gPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCksXG4gICAgICAgICAgY29udGV4dCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICAgIHRoaXMuYnJlYWsoY29udGV4dCwgKCkgPT4ge1xuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaW5uZXJGdW5jdGlvbi5jYWxsKHRoaXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJlYWtQb2ludEZyb21KU09OKGpzb24pIHtcbiAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgKHsgYnJlYWtQb2ludCB9ID0ganNvbik7XG5cbiAgaWYgKGJyZWFrUG9pbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnQ7ICAvLy9cblxuICAgIGpzb24gPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgYnJlYWtQb2ludCA9IEJyZWFrUG9pbnQuZnJvbUpTT04oanNvbik7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBicmVha1BvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCkge1xuICBsZXQgYnJlYWtQb2ludEpTT04gPSBudWxsO1xuXG4gIGlmIChicmVha1BvaW50ICE9PSBudWxsKSB7XG4gICAgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50LnRvSlNPTigpO1xuICB9XG5cbiAgcmV0dXJuIGJyZWFrUG9pbnRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuXG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpO1xuXG4gIHRva2Vucy5zb21lKCh0b2tlbiwgdG9rZW5JbmRleCkgPT4ge1xuICAgIGNvbnN0IHRva2VuRW5kT2ZMaW5lVG9rZW4gPSB0b2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICBpZiAodG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgbGluZUluZGV4ICs9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuSW5kZXggPT09IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsaW5lSW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYnJlYWthYmxlLFxuICBicmVha1BvaW50RnJvbUpTT04sXG4gIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OLFxuICBsaW5lSW5kZXhGcm9tTm9kZUFuZFRva2Vuc1xufTtcbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrYWJsZSIsImxpbmVJbmRleEZyb21Ob2RlQW5kVG9rZW5zIiwiaW5uZXJGdW5jdGlvbiIsInJlbWFpbmluZ0FyZ3VtZW50cyIsImNvbnRpbnVhdGlvbiIsInBvcCIsImNvbnRleHQiLCJicmVhayIsInNldEltbWVkaWF0ZSIsImNhbGwiLCJqc29uIiwiYnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiQnJlYWtQb2ludCIsImZyb21KU09OIiwidG9KU09OIiwibm9kZSIsInRva2VucyIsImxpbmVJbmRleCIsImZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJzb21lIiwidG9rZW4iLCJ0b2tlbkluZGV4IiwidG9rZW5FbmRPZkxpbmVUb2tlbiIsImlzRW5kT2ZMaW5lVG9rZW4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWlCZ0JBO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBN0JBQztlQUFBQTs7UUEyRGhCO2VBQUE7O1FBcEJnQkM7ZUFBQUE7OzttRUF6Q087Ozs7OztBQUVoQixTQUFTRCxVQUFVRSxhQUFhO0lBQ3JDLE9BQU8sU0FBUyxHQUFHQyxrQkFBa0I7UUFDbkMsTUFBTUMsZUFBZUQsbUJBQW1CRSxHQUFHLElBQ3JDQyxVQUFVSCxtQkFBbUJFLEdBQUc7UUFFdEMsSUFBSSxDQUFDRSxLQUFLLENBQUNELFNBQVM7WUFDbEJFLGFBQWE7Z0JBQ1hOLGNBQWNPLElBQUksQ0FBQyxJQUFJLEtBQUtOLG9CQUFvQkcsU0FBU0Y7WUFDM0Q7UUFDRjtJQUNGO0FBQ0Y7QUFFTyxTQUFTTixtQkFBbUJZLElBQUk7SUFDckMsSUFBSUM7SUFFSCxDQUFBLEVBQUVBLFVBQVUsRUFBRSxHQUFHRCxJQUFHO0lBRXJCLElBQUlDLGVBQWUsTUFBTTtRQUN2QixNQUFNQyxpQkFBaUJELFlBQWEsR0FBRztRQUV2Q0QsT0FBT0UsZ0JBQWlCLEdBQUc7UUFFM0JELGFBQWFFLG1CQUFVLENBQUNDLFFBQVEsQ0FBQ0osT0FBUSxHQUFHO0lBQzlDO0lBRUEsT0FBT0M7QUFDVDtBQUVPLFNBQVNaLDJCQUEyQlksVUFBVTtJQUNuRCxJQUFJQyxpQkFBaUI7SUFFckIsSUFBSUQsZUFBZSxNQUFNO1FBQ3ZCQyxpQkFBaUJELFdBQVdJLE1BQU07SUFDcEM7SUFFQSxPQUFPSDtBQUNUO0FBRU8sU0FBU1gsMkJBQTJCZSxJQUFJLEVBQUVDLE1BQU07SUFDckQsSUFBSUMsWUFBWTtJQUVoQixNQUFNQyw2QkFBNkJILEtBQUtJLDZCQUE2QixDQUFDSDtJQUV0RUEsT0FBT0ksSUFBSSxDQUFDLENBQUNDLE9BQU9DO1FBQ2xCLE1BQU1DLHNCQUFzQkYsTUFBTUcsZ0JBQWdCO1FBRWxELElBQUlELHFCQUFxQjtZQUN2Qk4sYUFBYTtRQUNmO1FBRUEsSUFBSUssZUFBZUosNEJBQTRCO1lBQzdDLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBT0Q7QUFDVDtNQUVBLFdBQWU7SUFDYmxCO0lBQ0FGO0lBQ0FDO0lBQ0FFO0FBQ0YifQ==
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvYnJlYWtQb2ludC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEJyZWFrUG9pbnQgZnJvbSBcIi4uL2JyZWFrUG9pbnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJyZWFrYWJsZShpbm5lckZ1bmN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbiguLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBjb250aW51YXRpb24gPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCksXG4gICAgICAgICAgY29udGV4dCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICAgIHRoaXMuYnJlYWsoY29udGV4dCwgKCkgPT4ge1xuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgLy8gMS4gSWRlbnRpZnkgd2hhdCB3ZSBhcmUgYWJvdXQgdG8gcnVuXG4gICAgICAgIGNvbnN0IG5vZGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZyA/IHRoaXMuZ2V0U3RyaW5nKCkgOiAnVW5rbm93biBOb2RlJztcbiAgICAgICAgY29uc3QgZnVuY05hbWUgPSBpbm5lckZ1bmN0aW9uLm5hbWUgfHwgJ2Fub255bW91cyBmdW5jdGlvbic7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hkb2cgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5qoIENPTlRJTlVBVElPTiBMRUFLIERFVEVDVEVEIWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZ1bmN0aW9uOiAke2Z1bmNOYW1lfWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE5vZGU6ICR7bm9kZVN0cmluZ31gKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBUaGUgYmF0b24gd2FzIHBhc3NlZCBoZXJlIGJ1dCBuZXZlciBoYW5kZWQgYmFjay5cXG5gKTtcbiAgICAgICAgfSwgMjAwMCk7XG5cbiAgICAgICAgY29uc3Qgc2FmZUNvbnRpbnVhdGlvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHdhdGNoZG9nKTtcbiAgICAgICAgICBjb250aW51YXRpb24oLi4uYXJncyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW5uZXJGdW5jdGlvbi5jYWxsKHRoaXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgY29udGV4dCwgc2FmZUNvbnRpbnVhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuLy8gZXhwb3J0IGZ1bmN0aW9uIF9icmVha2FibGUoaW5uZXJGdW5jdGlvbikge1xuLy8gICByZXR1cm4gZnVuY3Rpb24oLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4vLyAgICAgY29uc3QgY29udGludWF0aW9uID0gcmVtYWluaW5nQXJndW1lbnRzLnBvcCgpLFxuLy8gICAgICAgICAgIGNvbnRleHQgPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCk7XG4vL1xuLy8gICAgIHRoaXMuYnJlYWsoY29udGV4dCwgKCkgPT4ge1xuLy8gICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbi8vICAgICAgICAgaW5uZXJGdW5jdGlvbi5jYWxsKHRoaXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgY29udGV4dCwgY29udGludWF0aW9uKTtcbi8vICAgICAgIH0pO1xuLy8gICAgIH0pO1xuLy8gICB9O1xuLy8gfVxuXG5leHBvcnQgZnVuY3Rpb24gYnJlYWtQb2ludEZyb21KU09OKGpzb24pIHtcbiAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgKHsgYnJlYWtQb2ludCB9ID0ganNvbik7XG5cbiAgaWYgKGJyZWFrUG9pbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnQ7ICAvLy9cblxuICAgIGpzb24gPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgYnJlYWtQb2ludCA9IEJyZWFrUG9pbnQuZnJvbUpTT04oanNvbik7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBicmVha1BvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCkge1xuICBsZXQgYnJlYWtQb2ludEpTT04gPSBudWxsO1xuXG4gIGlmIChicmVha1BvaW50ICE9PSBudWxsKSB7XG4gICAgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50LnRvSlNPTigpO1xuICB9XG5cbiAgcmV0dXJuIGJyZWFrUG9pbnRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuXG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpO1xuXG4gIHRva2Vucy5zb21lKCh0b2tlbiwgdG9rZW5JbmRleCkgPT4ge1xuICAgIGNvbnN0IHRva2VuRW5kT2ZMaW5lVG9rZW4gPSB0b2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICBpZiAodG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgbGluZUluZGV4ICs9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuSW5kZXggPT09IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsaW5lSW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYnJlYWthYmxlLFxuICBicmVha1BvaW50RnJvbUpTT04sXG4gIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OLFxuICBsaW5lSW5kZXhGcm9tTm9kZUFuZFRva2Vuc1xufTtcbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrYWJsZSIsImxpbmVJbmRleEZyb21Ob2RlQW5kVG9rZW5zIiwiaW5uZXJGdW5jdGlvbiIsInJlbWFpbmluZ0FyZ3VtZW50cyIsImNvbnRpbnVhdGlvbiIsInBvcCIsImNvbnRleHQiLCJicmVhayIsInNldEltbWVkaWF0ZSIsIm5vZGVTdHJpbmciLCJnZXRTdHJpbmciLCJmdW5jTmFtZSIsIm5hbWUiLCJ3YXRjaGRvZyIsInNldFRpbWVvdXQiLCJjb25zb2xlIiwiZXJyb3IiLCJzYWZlQ29udGludWF0aW9uIiwiYXJncyIsImNsZWFyVGltZW91dCIsImNhbGwiLCJqc29uIiwiYnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiQnJlYWtQb2ludCIsImZyb21KU09OIiwidG9KU09OIiwibm9kZSIsInRva2VucyIsImxpbmVJbmRleCIsImZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJzb21lIiwidG9rZW4iLCJ0b2tlbkluZGV4IiwidG9rZW5FbmRPZkxpbmVUb2tlbiIsImlzRW5kT2ZMaW5lVG9rZW4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQThDZ0JBO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBMURBQztlQUFBQTs7UUF3RmhCO2VBQUE7O1FBcEJnQkM7ZUFBQUE7OzttRUF0RU87Ozs7OztBQUVoQixTQUFTRCxVQUFVRSxhQUFhO0lBQ3JDLE9BQU8sU0FBUyxHQUFHQyxrQkFBa0I7UUFDbkMsTUFBTUMsZUFBZUQsbUJBQW1CRSxHQUFHLElBQ3JDQyxVQUFVSCxtQkFBbUJFLEdBQUc7UUFFdEMsSUFBSSxDQUFDRSxLQUFLLENBQUNELFNBQVM7WUFDbEJFLGFBQWE7Z0JBQ1gsdUNBQXVDO2dCQUN2QyxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxHQUFHLElBQUksQ0FBQ0EsU0FBUyxLQUFLO2dCQUN2RCxNQUFNQyxXQUFXVCxjQUFjVSxJQUFJLElBQUk7Z0JBRXZDLE1BQU1DLFdBQVdDLFdBQVc7b0JBQzFCQyxRQUFRQyxLQUFLLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztvQkFDaERELFFBQVFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRUwsVUFBVTtvQkFDckNJLFFBQVFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRVAsWUFBWTtvQkFDbkNNLFFBQVFDLEtBQUssQ0FBQyxDQUFDLGtEQUFrRCxDQUFDO2dCQUNwRSxHQUFHO2dCQUVILE1BQU1DLG1CQUFtQixDQUFDLEdBQUdDO29CQUMzQkMsYUFBYU47b0JBQ2JULGdCQUFnQmM7Z0JBQ2xCO2dCQUVBaEIsY0FBY2tCLElBQUksQ0FBQyxJQUFJLEtBQUtqQixvQkFBb0JHLFNBQVNXO1lBQzNEO1FBQ0Y7SUFDRjtBQUNGO0FBZU8sU0FBU25CLG1CQUFtQnVCLElBQUk7SUFDckMsSUFBSUM7SUFFSCxDQUFBLEVBQUVBLFVBQVUsRUFBRSxHQUFHRCxJQUFHO0lBRXJCLElBQUlDLGVBQWUsTUFBTTtRQUN2QixNQUFNQyxpQkFBaUJELFlBQWEsR0FBRztRQUV2Q0QsT0FBT0UsZ0JBQWlCLEdBQUc7UUFFM0JELGFBQWFFLG1CQUFVLENBQUNDLFFBQVEsQ0FBQ0osT0FBUSxHQUFHO0lBQzlDO0lBRUEsT0FBT0M7QUFDVDtBQUVPLFNBQVN2QiwyQkFBMkJ1QixVQUFVO0lBQ25ELElBQUlDLGlCQUFpQjtJQUVyQixJQUFJRCxlQUFlLE1BQU07UUFDdkJDLGlCQUFpQkQsV0FBV0ksTUFBTTtJQUNwQztJQUVBLE9BQU9IO0FBQ1Q7QUFFTyxTQUFTdEIsMkJBQTJCMEIsSUFBSSxFQUFFQyxNQUFNO0lBQ3JELElBQUlDLFlBQVk7SUFFaEIsTUFBTUMsNkJBQTZCSCxLQUFLSSw2QkFBNkIsQ0FBQ0g7SUFFdEVBLE9BQU9JLElBQUksQ0FBQyxDQUFDQyxPQUFPQztRQUNsQixNQUFNQyxzQkFBc0JGLE1BQU1HLGdCQUFnQjtRQUVsRCxJQUFJRCxxQkFBcUI7WUFDdkJOLGFBQWE7UUFDZjtRQUVBLElBQUlLLGVBQWVKLDRCQUE0QjtZQUM3QyxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU9EO0FBQ1Q7TUFFQSxXQUFlO0lBQ2I3QjtJQUNBRjtJQUNBQztJQUNBRTtBQUNGIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-languages",
3
3
  "author": "James Smith",
4
- "version": "2.1.17",
4
+ "version": "2.1.18",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-languages",
7
7
  "description": "Occam's common language functionality.",
@@ -9,12 +9,41 @@ export function breakable(innerFunction) {
9
9
 
10
10
  this.break(context, () => {
11
11
  setImmediate(() => {
12
- innerFunction.call(this, ...remainingArguments, context, continuation);
12
+ // 1. Identify what we are about to run
13
+ const nodeString = this.getString ? this.getString() : 'Unknown Node';
14
+ const funcName = innerFunction.name || 'anonymous function';
15
+
16
+ const watchdog = setTimeout(() => {
17
+ console.error(`\n🚨 CONTINUATION LEAK DETECTED!`);
18
+ console.error(`Function: ${funcName}`);
19
+ console.error(`Node: ${nodeString}`);
20
+ console.error(`The baton was passed here but never handed back.\n`);
21
+ }, 2000);
22
+
23
+ const safeContinuation = (...args) => {
24
+ clearTimeout(watchdog);
25
+ continuation(...args);
26
+ };
27
+
28
+ innerFunction.call(this, ...remainingArguments, context, safeContinuation);
13
29
  });
14
30
  });
15
31
  };
16
32
  }
17
33
 
34
+ // export function _breakable(innerFunction) {
35
+ // return function(...remainingArguments) {
36
+ // const continuation = remainingArguments.pop(),
37
+ // context = remainingArguments.pop();
38
+ //
39
+ // this.break(context, () => {
40
+ // setImmediate(() => {
41
+ // innerFunction.call(this, ...remainingArguments, context, continuation);
42
+ // });
43
+ // });
44
+ // };
45
+ // }
46
+
18
47
  export function breakPointFromJSON(json) {
19
48
  let breakPoint;
20
49