Serialize JavaScript a um superconjunto de JSON que inclui expressões regulares, datas e funções.
O código deste pacote começou sua vida como um módulo interno para expressar o estado. Para expandir sua utilidade, agora vive como serialize-javascript -um pacote independente no NPM.
Você provavelmente está se perguntando: e JSON.stringify() !? Descobrimos que, às vezes, precisamos serializar em serializar funções de JavaScript, regexps , datas , conjuntos ou mapas . Um ótimo exemplo é um aplicativo da Web que usa o roteamento de URL do lado do cliente, onde as definições de rota são regexps que precisam ser compartilhadas do servidor para o cliente. Mas este módulo também é ótimo para se comunicar entre os processos de nó.
A sequência retornada da função de exportação única deste pacote é o Javascript literal, que pode ser salvo em um arquivo .js ou incorporado a um documento HTML, criando o conteúdo de um elemento <script> .
Os caracteres HTML e os terminadores de linha JavaScript são escapados automaticamente.
Observe que a serialização para conjuntos e mapas ES6 requer suporte para Array.from (não disponível no IE ou no nó <0,12) ou em uma Array.from Polyfill.
Instale usando o 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/' ) ,
} ) ;O acima produzirá a seguinte saída de string:
'{"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 produzir uma corda embelezada, você pode passar um segundo argumento opcional para serialize() para definir o número de espaços a serem usados para o indentação.
Um recurso primário deste pacote é serializar o código para uma sequência de JavaScript literal que pode ser incorporado em um documento HTML, adicionando -o como conteúdo do elemento <script> . Para tornar esses caracteres HTML e os terminadores de linha JavaScript seguros são escapados automaticamente.
serialize ( {
haxorXSS : '</script>'
} ) ;O acima produzirá a seguinte string, saída de capital html, que é seguro para colocar em um documento HTML, pois não fará com que o elemento de script em linha termine:
'{"haxorXSS":"\u003C\u002Fscript\u003E"}'Você pode passar um argumento
unsafeopcional paraserialize()para serialização direta.
A função serialize() aceita um objeto options como seu segundo argumento. Todas as opções estão sendo undefined :
options.space Esta opção é a mesma que o argumento space que pode ser passado para JSON.stringify . Ele pode ser usado para adicionar espaço em branco e recuo à saída serializada para torná -la mais legível.
serialize ( obj , { space : 2 } ) ; options.isJSON Esta opção é um sinal para serialize() que o objeto que está sendo serializado não contém valores de função ou regexps. Isso permite que um caminho quente que permita que a serialização seja mais de 3x mais rapidamente. Se você está em serialização em muitos dados e conhece seu JSON puro, pode ativar essa opção para uma velocidade.
Nota: que, ao usar esta opção, a saída ainda será escapada para proteger contra o XSS.
serialize ( obj , { isJSON : true } ) ; options.unsafe Esta opção é sinalizar serialize() que queremos fazer uma conversão direta, sem a proteção XSS. Essas opções precisam ser definidas explicitamente como true . Os caracteres HTML e os terminadores de linha JavaScript não serão escapados. Você terá que rolar o seu próprio.
serialize ( obj , { unsafe : true } ) ; options.ignoreFunction Esta opção é sinalizar serialize() que não queremos serializar a função JavaScript. Basta tratar a função como JSON.stringify , mas outros recursos funcionarão conforme o esperado.
serialize ( obj , { ignoreFunction : true } ) ; Para alguns casos de uso, você também pode precisar desserializar a string. Isso não é explicitamente parte deste módulo. No entanto, você pode escrevê -lo facilmente:
function deserialize ( serializedJavascript ) {
return eval ( '(' + serializedJavascript + ')' ) ;
} Nota: Não se esqueça dos parênteses ao redor do JavaScript serializado, pois o suporte de abertura { será considerado o início de um corpo.
Este software é gratuito para usar no Yahoo! Inc. Licença BSD. Consulte o arquivo de licença para obter informações sobre texto e direitos autorais.