locutus 2.0.30 → 2.0.32

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.
@@ -2,15 +2,20 @@
2
2
 
3
3
  var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
4
4
 
5
+ var visitedObjects = new Map(); // Initialize a map to track visited objects
6
+
5
7
  module.exports = function var_dump() {
6
8
  // discuss at: https://locutus.io/php/var_dump/
7
9
  // original by: Brett Zamir (https://brett-zamir.me)
8
10
  // improved by: Zahlii
9
11
  // improved by: Brett Zamir (https://brett-zamir.me)
10
12
  // note 1: For returning a string, use var_export() with the second argument set to true
11
- // test: skip-all
12
13
  // example 1: var_dump(1)
13
14
  // returns 1: 'int(1)'
15
+ // example 2: const simpleCircular = {}
16
+ // example 2: simpleCircular.self = simpleCircular
17
+ // example 2: var_dump(simpleCircular)
18
+ // returns 2: 'array(1) {\n [self] =>\n Circular Reference Detected\n}\n'
14
19
 
15
20
  var echo = require('../strings/echo');
16
21
  var output = '';
@@ -111,7 +116,7 @@ module.exports = function var_dump() {
111
116
  return ret;
112
117
  };
113
118
 
114
- var _formatArray = function _formatArray(obj, curDepth, padVal, padChar) {
119
+ var _formatArray = function _formatArray(obj, curDepth, padVal, padChar, visitedObjects) {
115
120
  if (curDepth > 0) {
116
121
  curDepth++;
117
122
  }
@@ -122,6 +127,14 @@ module.exports = function var_dump() {
122
127
  var val = '';
123
128
 
124
129
  if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null) {
130
+ if (visitedObjects.has(obj)) {
131
+ // Circular reference detected, return a placeholder or a message
132
+ return 'Circular Reference Detected\n';
133
+ } else {
134
+ // Mark this object as visited by adding it to the map
135
+ visitedObjects.set(obj, true);
136
+ }
137
+
125
138
  if (obj.constructor && _getFuncName(obj.constructor) === 'LOCUTUS_Resource') {
126
139
  return obj.var_dump();
127
140
  }
@@ -140,7 +153,7 @@ module.exports = function var_dump() {
140
153
  str += key;
141
154
  str += '] =>\n';
142
155
  str += thickPad;
143
- str += _formatArray(objVal, curDepth + 1, padVal, padChar);
156
+ str += _formatArray(objVal, curDepth + 1, padVal, padChar, visitedObjects);
144
157
  } else {
145
158
  val = _getInnerVal(objVal, thickPad);
146
159
  str += thickPad;
@@ -159,9 +172,9 @@ module.exports = function var_dump() {
159
172
  return str;
160
173
  };
161
174
 
162
- output = _formatArray(arguments[0], 0, padVal, padChar);
175
+ output = _formatArray(arguments[0], 0, padVal, padChar, visitedObjects);
163
176
  for (i = 1; i < arguments.length; i++) {
164
- output += '\n' + _formatArray(arguments[i], 0, padVal, padChar);
177
+ output += '\n' + _formatArray(arguments[i], 0, padVal, padChar, visitedObjects);
165
178
  }
166
179
 
167
180
  echo(output);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/php/var/var_dump.js"],"names":["module","exports","var_dump","echo","require","output","padChar","padVal","lgth","i","_getFuncName","fn","name","exec","_repeatChar","len","str","_getInnerVal","val","thickPad","ret","length","parseFloat","parseInt","funcLines","toString","split","fll","Date","RegExp","nodeName","nodeType","namespaceURI","nodeValue","_formatArray","obj","curDepth","basePad","constructor","someProp","hasOwnProperty","key","objVal","arguments"],"mappings":"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","file":"var_dump.js","sourcesContent":["module.exports = function var_dump() {\n // discuss at: https://locutus.io/php/var_dump/\n // original by: Brett Zamir (https://brett-zamir.me)\n // improved by: Zahlii\n // improved by: Brett Zamir (https://brett-zamir.me)\n // note 1: For returning a string, use var_export() with the second argument set to true\n // test: skip-all\n // example 1: var_dump(1)\n // returns 1: 'int(1)'\n\n const echo = require('../strings/echo')\n let output = ''\n const padChar = ' '\n const padVal = 4\n let lgth = 0\n let i = 0\n\n const _getFuncName = function (fn) {\n const name = /\\W*function\\s+([\\w$]+)\\s*\\(/.exec(fn)\n if (!name) {\n return '(Anonymous)'\n }\n return name[1]\n }\n\n const _repeatChar = function (len, padChar) {\n let str = ''\n for (let i = 0; i < len; i++) {\n str += padChar\n }\n return str\n }\n const _getInnerVal = function (val, thickPad) {\n let ret = ''\n if (val === null) {\n ret = 'NULL'\n } else if (typeof val === 'boolean') {\n ret = 'bool(' + val + ')'\n } else if (typeof val === 'string') {\n ret = 'string(' + val.length + ') \"' + val + '\"'\n } else if (typeof val === 'number') {\n if (parseFloat(val) === parseInt(val, 10)) {\n ret = 'int(' + val + ')'\n } else {\n ret = 'float(' + val + ')'\n }\n } else if (typeof val === 'undefined') {\n // The remaining are not PHP behavior because these values\n // only exist in this exact form in JavaScript\n ret = 'undefined'\n } else if (typeof val === 'function') {\n const funcLines = val.toString().split('\\n')\n ret = ''\n for (let i = 0, fll = funcLines.length; i < fll; i++) {\n ret += (i !== 0 ? '\\n' + thickPad : '') + funcLines[i]\n }\n } else if (val instanceof Date) {\n ret = 'Date(' + val + ')'\n } else if (val instanceof RegExp) {\n ret = 'RegExp(' + val + ')'\n } else if (val.nodeName) {\n // Different than PHP's DOMElement\n switch (val.nodeType) {\n case 1:\n if (typeof val.namespaceURI === 'undefined' || val.namespaceURI === 'https://www.w3.org/1999/xhtml') {\n // Undefined namespace could be plain XML, but namespaceURI not widely supported\n ret = 'HTMLElement(\"' + val.nodeName + '\")'\n } else {\n ret = 'XML Element(\"' + val.nodeName + '\")'\n }\n break\n case 2:\n ret = 'ATTRIBUTE_NODE(' + val.nodeName + ')'\n break\n case 3:\n ret = 'TEXT_NODE(' + val.nodeValue + ')'\n break\n case 4:\n ret = 'CDATA_SECTION_NODE(' + val.nodeValue + ')'\n break\n case 5:\n ret = 'ENTITY_REFERENCE_NODE'\n break\n case 6:\n ret = 'ENTITY_NODE'\n break\n case 7:\n ret = 'PROCESSING_INSTRUCTION_NODE(' + val.nodeName + ':' + val.nodeValue + ')'\n break\n case 8:\n ret = 'COMMENT_NODE(' + val.nodeValue + ')'\n break\n case 9:\n ret = 'DOCUMENT_NODE'\n break\n case 10:\n ret = 'DOCUMENT_TYPE_NODE'\n break\n case 11:\n ret = 'DOCUMENT_FRAGMENT_NODE'\n break\n case 12:\n ret = 'NOTATION_NODE'\n break\n }\n }\n return ret\n }\n\n const _formatArray = function (obj, curDepth, padVal, padChar) {\n if (curDepth > 0) {\n curDepth++\n }\n\n const basePad = _repeatChar(padVal * (curDepth - 1), padChar)\n const thickPad = _repeatChar(padVal * (curDepth + 1), padChar)\n let str = ''\n let val = ''\n\n if (typeof obj === 'object' && obj !== null) {\n if (obj.constructor && _getFuncName(obj.constructor) === 'LOCUTUS_Resource') {\n return obj.var_dump()\n }\n lgth = 0\n for (const someProp in obj) {\n if (obj.hasOwnProperty(someProp)) {\n lgth++\n }\n }\n str += 'array(' + lgth + ') {\\n'\n for (const key in obj) {\n const objVal = obj[key]\n if (\n typeof objVal === 'object' &&\n objVal !== null &&\n !(objVal instanceof Date) &&\n !(objVal instanceof RegExp) &&\n !objVal.nodeName\n ) {\n str += thickPad\n str += '['\n str += key\n str += '] =>\\n'\n str += thickPad\n str += _formatArray(objVal, curDepth + 1, padVal, padChar)\n } else {\n val = _getInnerVal(objVal, thickPad)\n str += thickPad\n str += '['\n str += key\n str += '] =>\\n'\n str += thickPad\n str += val\n str += '\\n'\n }\n }\n str += basePad + '}\\n'\n } else {\n str = _getInnerVal(obj, thickPad)\n }\n return str\n }\n\n output = _formatArray(arguments[0], 0, padVal, padChar)\n for (i = 1; i < arguments.length; i++) {\n output += '\\n' + _formatArray(arguments[i], 0, padVal, padChar)\n }\n\n echo(output)\n\n // Not how PHP does it, but helps us test:\n return output\n}\n"]}
1
+ {"version":3,"sources":["../../../src/php/var/var_dump.js"],"names":["visitedObjects","Map","module","exports","var_dump","echo","require","output","padChar","padVal","lgth","i","_getFuncName","fn","name","exec","_repeatChar","len","str","_getInnerVal","val","thickPad","ret","length","parseFloat","parseInt","funcLines","toString","split","fll","Date","RegExp","nodeName","nodeType","namespaceURI","nodeValue","_formatArray","obj","curDepth","basePad","has","set","constructor","someProp","hasOwnProperty","key","objVal","arguments"],"mappings":"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","file":"var_dump.js","sourcesContent":["const visitedObjects = new Map() // Initialize a map to track visited objects\n\nmodule.exports = function var_dump() {\n // discuss at: https://locutus.io/php/var_dump/\n // original by: Brett Zamir (https://brett-zamir.me)\n // improved by: Zahlii\n // improved by: Brett Zamir (https://brett-zamir.me)\n // note 1: For returning a string, use var_export() with the second argument set to true\n // example 1: var_dump(1)\n // returns 1: 'int(1)'\n // example 2: const simpleCircular = {}\n // example 2: simpleCircular.self = simpleCircular\n // example 2: var_dump(simpleCircular)\n // returns 2: 'array(1) {\\n [self] =>\\n Circular Reference Detected\\n}\\n'\n\n const echo = require('../strings/echo')\n let output = ''\n const padChar = ' '\n const padVal = 4\n let lgth = 0\n let i = 0\n\n const _getFuncName = function (fn) {\n const name = /\\W*function\\s+([\\w$]+)\\s*\\(/.exec(fn)\n if (!name) {\n return '(Anonymous)'\n }\n return name[1]\n }\n\n const _repeatChar = function (len, padChar) {\n let str = ''\n for (let i = 0; i < len; i++) {\n str += padChar\n }\n return str\n }\n const _getInnerVal = function (val, thickPad) {\n let ret = ''\n if (val === null) {\n ret = 'NULL'\n } else if (typeof val === 'boolean') {\n ret = 'bool(' + val + ')'\n } else if (typeof val === 'string') {\n ret = 'string(' + val.length + ') \"' + val + '\"'\n } else if (typeof val === 'number') {\n if (parseFloat(val) === parseInt(val, 10)) {\n ret = 'int(' + val + ')'\n } else {\n ret = 'float(' + val + ')'\n }\n } else if (typeof val === 'undefined') {\n // The remaining are not PHP behavior because these values\n // only exist in this exact form in JavaScript\n ret = 'undefined'\n } else if (typeof val === 'function') {\n const funcLines = val.toString().split('\\n')\n ret = ''\n for (let i = 0, fll = funcLines.length; i < fll; i++) {\n ret += (i !== 0 ? '\\n' + thickPad : '') + funcLines[i]\n }\n } else if (val instanceof Date) {\n ret = 'Date(' + val + ')'\n } else if (val instanceof RegExp) {\n ret = 'RegExp(' + val + ')'\n } else if (val.nodeName) {\n // Different than PHP's DOMElement\n switch (val.nodeType) {\n case 1:\n if (typeof val.namespaceURI === 'undefined' || val.namespaceURI === 'https://www.w3.org/1999/xhtml') {\n // Undefined namespace could be plain XML, but namespaceURI not widely supported\n ret = 'HTMLElement(\"' + val.nodeName + '\")'\n } else {\n ret = 'XML Element(\"' + val.nodeName + '\")'\n }\n break\n case 2:\n ret = 'ATTRIBUTE_NODE(' + val.nodeName + ')'\n break\n case 3:\n ret = 'TEXT_NODE(' + val.nodeValue + ')'\n break\n case 4:\n ret = 'CDATA_SECTION_NODE(' + val.nodeValue + ')'\n break\n case 5:\n ret = 'ENTITY_REFERENCE_NODE'\n break\n case 6:\n ret = 'ENTITY_NODE'\n break\n case 7:\n ret = 'PROCESSING_INSTRUCTION_NODE(' + val.nodeName + ':' + val.nodeValue + ')'\n break\n case 8:\n ret = 'COMMENT_NODE(' + val.nodeValue + ')'\n break\n case 9:\n ret = 'DOCUMENT_NODE'\n break\n case 10:\n ret = 'DOCUMENT_TYPE_NODE'\n break\n case 11:\n ret = 'DOCUMENT_FRAGMENT_NODE'\n break\n case 12:\n ret = 'NOTATION_NODE'\n break\n }\n }\n return ret\n }\n\n const _formatArray = function (obj, curDepth, padVal, padChar, visitedObjects) {\n if (curDepth > 0) {\n curDepth++\n }\n\n const basePad = _repeatChar(padVal * (curDepth - 1), padChar)\n const thickPad = _repeatChar(padVal * (curDepth + 1), padChar)\n let str = ''\n let val = ''\n\n if (typeof obj === 'object' && obj !== null) {\n if (visitedObjects.has(obj)) {\n // Circular reference detected, return a placeholder or a message\n return 'Circular Reference Detected\\n'\n } else {\n // Mark this object as visited by adding it to the map\n visitedObjects.set(obj, true)\n }\n\n if (obj.constructor && _getFuncName(obj.constructor) === 'LOCUTUS_Resource') {\n return obj.var_dump()\n }\n lgth = 0\n for (const someProp in obj) {\n if (obj.hasOwnProperty(someProp)) {\n lgth++\n }\n }\n str += 'array(' + lgth + ') {\\n'\n for (const key in obj) {\n const objVal = obj[key]\n if (\n typeof objVal === 'object' &&\n objVal !== null &&\n !(objVal instanceof Date) &&\n !(objVal instanceof RegExp) &&\n !objVal.nodeName\n ) {\n str += thickPad\n str += '['\n str += key\n str += '] =>\\n'\n str += thickPad\n str += _formatArray(objVal, curDepth + 1, padVal, padChar, visitedObjects)\n } else {\n val = _getInnerVal(objVal, thickPad)\n str += thickPad\n str += '['\n str += key\n str += '] =>\\n'\n str += thickPad\n str += val\n str += '\\n'\n }\n }\n str += basePad + '}\\n'\n } else {\n str = _getInnerVal(obj, thickPad)\n }\n return str\n }\n\n output = _formatArray(arguments[0], 0, padVal, padChar, visitedObjects)\n for (i = 1; i < arguments.length; i++) {\n output += '\\n' + _formatArray(arguments[i], 0, padVal, padChar, visitedObjects)\n }\n\n echo(output)\n\n // Not how PHP does it, but helps us test:\n return output\n}\n"]}