Sérialisez JavaScript en un sur-ensemble de JSON qui comprend des expressions, des dates et des fonctions régulières.
Le code de ce package a commencé sa vie en tant que module interne pour exprimer l'État. Pour étendre son utilité, il vit désormais comme serialize-javascript - un package indépendant sur NPM.
Vous vous demandez probablement: qu'en est-il de JSON.stringify() !? Nous avons constaté que parfois nous devons sérialiser les fonctions JavaScript, regexps , dates , ensembles ou cartes . Un excellent exemple est une application Web qui utilise le routage d'URL côté client où les définitions d'itinéraire sont regexps qui doivent être partagées du serveur vers le client. Mais ce module est également idéal pour communiquer entre les processus de nœud.
La chaîne renvoyée à partir de la fonction d'exportation unique de ce package est le javascript littéral qui peut être enregistré dans un fichier .js , ou être intégré dans un document HTML en créant le contenu d'un élément <script> .
Les caractères HTML et les terminateurs de ligne JavaScript sont échappés automatiquement.
Veuillez noter que la sérialisation pour les ensembles ES6 et les cartes nécessite une prise en charge de Array.from (non disponible en IE ou au nœud <0,12), ou dans un Array.from polyfill.
Installer à l'aide de 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/' ) ,
} ) ;Ce qui précède produira la sortie de chaîne suivante:
'{"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/")}' Remarque: Pour produire une chaîne embellirée, vous pouvez passer un deuxième argument facultatif pour serialize() pour définir le nombre d'espaces à utiliser pour l'indentation.
Une caractéristique principale de ce package consiste à sérialiser le code à une chaîne de JavaScript littéral qui peut être intégrée dans un document HTML en l'ajoutant comme contenu de l'élément <script> . Afin de rendre cela sûr, les caractères HTML et les terminateurs de ligne JavaScript sont échappés automatiquement.
serialize ( {
haxorXSS : '</script>'
} ) ;Ce qui précède produira la sortie de chaîne suivante, une sortie Escaped HTML qui est sûre à mettre dans un document HTML car elle ne fera pas terminer l'élément de script en ligne:
'{"haxorXSS":"\u003C\u002Fscript\u003E"}'Vous pouvez passer un argument
unsafefacultatif pourserialize()pour la sérialisation droite.
La fonction serialize() accepte un objet options comme deuxième argument. Toutes les options sont par défaut undefined :
options.space Cette option est la même que l'argument space qui peut être transmis à JSON.stringify . Il peut être utilisé pour ajouter l'espace et l'indentation à la sortie sérialisée pour la rendre plus lisible.
serialize ( obj , { space : 2 } ) ; options.isJSON Cette option est un signal pour serialize() que l'objet étant sérialisé ne contient aucune fonction ou des valeurs regexps. Cela permet un chemin chaud qui permet à la sérialisation de dépasser 3x plus rapidement. Si vous sérialisez beaucoup de données et que vous connaissez son JSON pur, vous pouvez activer cette option pour une accélération.
Remarque: que lorsque vous utilisez cette option, la sortie sera toujours échappée pour protéger contre XSS.
serialize ( obj , { isJSON : true } ) ; options.unsafe Cette option consiste à signaler serialize() que nous voulons effectuer une conversion directe, sans la protection XSS. Ces options doivent être explicitement définies sur true . Les caractères HTML et les terminateurs de ligne JavaScript ne seront pas échappés. Vous devrez rouler le vôtre.
serialize ( obj , { unsafe : true } ) ; options.ignoreFunction Cette option consiste à signaler serialize() que nous ne voulons pas sérialiser la fonction JavaScript. Traitez simplement la fonction comme JSON.stringify DO, mais d'autres fonctionnalités fonctionneront comme prévu.
serialize ( obj , { ignoreFunction : true } ) ; Pour certains cas d'utilisation, vous devrez peut-être également désérialiser la chaîne. Ceci ne fait explicitement pas partie de ce module. Cependant, vous pouvez facilement l'écrire vous-même:
function deserialize ( serializedJavascript ) {
return eval ( '(' + serializedJavascript + ')' ) ;
} Remarque: n'oubliez pas les parenthèses autour du JavaScript sérialisé, car le support d'ouverture { sera considéré comme le début d'un corps.
Ce logiciel est gratuit sous le Yahoo! Inc. Licence BSD. Voir le fichier de licence pour le texte de licence et les informations sur le droit d'auteur.