summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/var/serialize.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/locutus/php/var/serialize.js')
-rw-r--r--node_modules/locutus/php/var/serialize.js128
1 files changed, 128 insertions, 0 deletions
diff --git a/node_modules/locutus/php/var/serialize.js b/node_modules/locutus/php/var/serialize.js
new file mode 100644
index 0000000..63cb8e8
--- /dev/null
+++ b/node_modules/locutus/php/var/serialize.js
@@ -0,0 +1,128 @@
+'use strict';
+
+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; };
+
+module.exports = function serialize(mixedValue) {
+ // discuss at: http://locutus.io/php/serialize/
+ // original by: Arpad Ray (mailto:arpad@php.net)
+ // improved by: Dino
+ // improved by: Le Torbi (http://www.letorbi.de/)
+ // improved by: Kevin van Zonneveld (http://kvz.io/)
+ // bugfixed by: Andrej Pavlovic
+ // bugfixed by: Garagoth
+ // bugfixed by: Russell Walker (http://www.nbill.co.uk/)
+ // bugfixed by: Jamie Beck (http://www.terabit.ca/)
+ // bugfixed by: Kevin van Zonneveld (http://kvz.io/)
+ // bugfixed by: Ben (http://benblume.co.uk/)
+ // bugfixed by: Codestar (http://codestarlive.com/)
+ // bugfixed by: idjem (https://github.com/idjem)
+ // input by: DtTvB (http://dt.in.th/2008-09-16.string-length-in-bytes.html)
+ // input by: Martin (http://www.erlenwiese.de/)
+ // note 1: We feel the main purpose of this function should be to ease
+ // note 1: the transport of data between php & js
+ // note 1: Aiming for PHP-compatibility, we have to translate objects to arrays
+ // example 1: serialize(['Kevin', 'van', 'Zonneveld'])
+ // returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
+ // example 2: serialize({firstName: 'Kevin', midName: 'van'})
+ // returns 2: 'a:2:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";}'
+ // example 3: serialize( {'ü': 'ü', '四': '四', '𠜎': '𠜎'})
+ // returns 3: 'a:3:{s:2:"ü";s:2:"ü";s:3:"四";s:3:"四";s:4:"𠜎";s:4:"𠜎";}'
+
+ var val, key, okey;
+ var ktype = '';
+ var vals = '';
+ var count = 0;
+
+ var _utf8Size = function _utf8Size(str) {
+ return ~-encodeURI(str).split(/%..|./).length;
+ };
+
+ var _getType = function _getType(inp) {
+ var match;
+ var key;
+ var cons;
+ var types;
+ var type = typeof inp === 'undefined' ? 'undefined' : _typeof(inp);
+
+ if (type === 'object' && !inp) {
+ return 'null';
+ }
+
+ if (type === 'object') {
+ if (!inp.constructor) {
+ return 'object';
+ }
+ cons = inp.constructor.toString();
+ match = cons.match(/(\w+)\(/);
+ if (match) {
+ cons = match[1].toLowerCase();
+ }
+ types = ['boolean', 'number', 'string', 'array'];
+ for (key in types) {
+ if (cons === types[key]) {
+ type = types[key];
+ break;
+ }
+ }
+ }
+ return type;
+ };
+
+ var type = _getType(mixedValue);
+
+ switch (type) {
+ case 'function':
+ val = '';
+ break;
+ case 'boolean':
+ val = 'b:' + (mixedValue ? '1' : '0');
+ break;
+ case 'number':
+ val = (Math.round(mixedValue) === mixedValue ? 'i' : 'd') + ':' + mixedValue;
+ break;
+ case 'string':
+ val = 's:' + _utf8Size(mixedValue) + ':"' + mixedValue + '"';
+ break;
+ case 'array':
+ case 'object':
+ val = 'a';
+ /*
+ if (type === 'object') {
+ var objname = mixedValue.constructor.toString().match(/(\w+)\(\)/);
+ if (objname === undefined) {
+ return;
+ }
+ objname[1] = serialize(objname[1]);
+ val = 'O' + objname[1].substring(1, objname[1].length - 1);
+ }
+ */
+
+ for (key in mixedValue) {
+ if (mixedValue.hasOwnProperty(key)) {
+ ktype = _getType(mixedValue[key]);
+ if (ktype === 'function') {
+ continue;
+ }
+
+ okey = key.match(/^[0-9]+$/) ? parseInt(key, 10) : key;
+ vals += serialize(okey) + serialize(mixedValue[key]);
+ count++;
+ }
+ }
+ val += ':' + count + ':{' + vals + '}';
+ break;
+ case 'undefined':
+ default:
+ // Fall-through
+ // if the JS object has a property which contains a null value,
+ // the string cannot be unserialized by PHP
+ val = 'N';
+ break;
+ }
+ if (type !== 'object' && type !== 'array') {
+ val += ';';
+ }
+
+ return val;
+};
+//# sourceMappingURL=serialize.js.map \ No newline at end of file