Serializa a JavaScript a un superconjunto de JSON que incluye expresiones regulares, fechas y funciones.
El código en este paquete comenzó su vida como un módulo interno para expresar-estado. Para expandir su utilidad, ahora vive como serialize-javascript , un paquete independiente en NPM.
Probablemente te estés preguntando: ¿qué pasa con JSON.stringify() ?? Hemos descubierto que a veces necesitamos serializar las funciones de JavaScript, las reglas , las fechas , los conjuntos o mapas . Un gran ejemplo es una aplicación web que utiliza el enrutamiento de URL del lado del cliente donde las definiciones de ruta son reglas que deben compartirse desde el servidor al cliente. Pero este módulo también es excelente para comunicarse entre los procesos de nodo.
La cadena devuelta de la función de exportación única de este paquete es JavaScript literal que se puede guardar en un archivo .js , o estar integrado en un documento HTML haciendo el contenido de un elemento <script> .
Los caracteres HTML y los terminadores de línea JavaScript se escapan automáticamente.
Tenga en cuenta que la serialización para los conjuntos y mapas de ES6 requiere soporte para Array.from (no disponible en IE o nodo <0.12), o una Array.from .
Instalar usando NPM:
$ npm install serialize-javascript var serialize = require ( 'serialize-javascript' ) ;
serialize ( {
str : 'string' ,
num : 0 ,
obj : { foo : 'foo' } ,
arr : [ 1 , 2 , 3 ] ,
bool : true ,
nil : null ,
undef : undefined ,
inf : Infinity ,
date : new Date ( "Thu, 28 Apr 2016 22:02:17 GMT" ) ,
map : new Map ( [ [ 'hello' , 'world' ] ] ) ,
set : new Set ( [ 123 , 456 ] ) ,
fn : function echo ( arg ) { return arg ; } ,
re : / ([^s]+) / g ,
big : BigInt ( 10 ) ,
url : new URL ( 'https://example.com/' ) ,
} ) ;Lo anterior producirá la siguiente salida de cadena:
'{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,"nil":null,"undef":undefined,"inf":Infinity,"date":new Date("2016-04-28T22:02:17.000Z"),"map":new Map([["hello","world"]]),"set":new Set([123,456]),"fn":function echo(arg) { return arg; },"re":new RegExp("([^\\s]+)", "g"),"big":BigInt("10"),"url":new URL("https://example.com/")}' Nota: Para producir una cadena embellecida, puede pasar un segundo argumento opcional para serialize() para definir el número de espacios que se utilizarán para la sangría.
Una característica principal de este paquete es serializar el código a una cadena de JavaScript literal que puede integrarse en un documento HTML agregándolo como el contenido del elemento <script> . Para hacer que esto sea seguro, los caracteres HTML y los terminadores de línea JavaScript se escapan automáticamente.
serialize ( {
haxorXSS : '</script>'
} ) ;Lo anterior producirá la siguiente cadena, salida con html, que es seguro poner en un documento HTML, ya que no hará que el elemento de script en línea termine:
'{"haxorXSS":"\u003C\u002Fscript\u003E"}'Puede pasar un argumento
unsafeopcional paraserialize()para la serialización recta.
La función serialize() acepta un objeto options como su segundo argumento. Todas las opciones están siendo predeterminadas a undefined :
options.space Esta opción es la misma que el argumento space que se puede pasar a JSON.stringify . Se puede usar para agregar espacios en blanco y sangría a la salida serializada para que sea más legible.
serialize ( obj , { space : 2 } ) ; options.isJSON Esta opción es una señal para serialize() que el objeto que se está serializado no contiene ninguna función o valores de regexps. Esto permite que una ruta caliente que permita que la serialización sea más de 3 veces más rápida. Si está serializando muchos datos y conoce su JSON puro, puede habilitar esta opción para una velocidad.
Nota: que al usar esta opción, la salida aún se escapará para proteger contra XSS.
serialize ( obj , { isJSON : true } ) ; options.unsafe Esta opción es señalar serialize() que queremos hacer una conversión recta, sin la protección XSS. Estas opciones deben establecerse explícitamente en true . Los caracteres HTML y los terminadores de la línea JavaScript no serán escapados. Tendrás que rodar el tuyo.
serialize ( obj , { unsafe : true } ) ; options.ignoreFunction Esta opción es señalar serialize() que no queremos serializar la función JavaScript. Simplemente trate la función como JSON.stringify do, pero otras características funcionarán como se esperaba.
serialize ( obj , { ignoreFunction : true } ) ; Para algunos casos de uso, es posible que también deba deserializar la cadena. Esto no es explícitamente parte de este módulo. Sin embargo, puede escribirlo fácilmente usted mismo:
function deserialize ( serializedJavascript ) {
return eval ( '(' + serializedJavascript + ')' ) ;
} Nota: No olvide los paréntesis alrededor del JavaScript serializado, ya que el soporte de apertura { se considerará como el comienzo de un cuerpo.
Este software es gratuito bajo el Yahoo! Inc. Licencia BSD. Consulte el archivo de licencia para ver el texto de la licencia y la información de derechos de autor.