La Version 1.14 de Deno, le runtime pour exécuter JavaScript et TypeScript, est disponible,
elle apporte des aouts à l'API Crypto Web et de nouvelles fonctionnalités

L'équipe de développement de Deno a annoncé le 14 septembre la sortie de la version 1.14 de Deno. Créé par Ryan Dahl, ingénieur logiciel, développeur du runtime JavaScript Node.js et TypeScript, Deno est un moteur d'exécution (runtime) simple, moderne et sécurisé pour JavaScript et TypeScript, il utilise JavaScript V8 et est construit en Rust. Deno assume explicitement le rôle de runtime et de gestionnaire de paquets au sein d'un seul et même exécutable, plutôt que de nécessiter un programme de gestion de paquets distinct. Ryan Dahl est un.

Outre le runtime Deno, l’outil fournit également une liste de modules standard qui sont examinés par les responsables de Deno et dont le fonctionnement est garanti avec une version spécifique de Deno. Ils cohabitent avec le code source de Deno dans le référentiel denoland/deno. Ces modules standard sont hébergés sur deno.land/std et sont distribués via des URL comme tous les autres modules ES compatibles avec Deno.

Nom : denoB.png
Affichages : 39382
Taille : 8,0 Ko

JavaScript est le langage dynamique le plus utilisé, fonctionnant sur tous les appareils dotés d'un navigateur Web. Un grand nombre de développeurs « parlent » couramment le JavaScript et beaucoup d'efforts ont été déployés pour optimiser son exécution. Grâce à des organismes de normalisation comme ECMA International, le langage a été soigneusement et continuellement amélioré. Aussi, les ingénieurs Ryan Dahl, Bert Belder et Bartek Iwańczuk pensent que JavaScript est le choix naturel pour l'outillage de langage dynamique ; que ce soit dans un environnement de navigateur ou en tant que processus autonomes.

Pour justifier le projet Deno, les responsables déclarent : « Notre vecteur d'origine dans ce domaine, Node.js, s'est avéré être une plateforme logicielle très réussie. Les gens l'ont trouvé utile pour créer des outils de développement Web, créer des serveurs Web autonomes et pour une myriade d'autres cas d'utilisation. Node, cependant, a été conçu en 2009 lorsque JavaScript était un langage très différent. Par nécessité, Node a dû inventer des concepts qui ont ensuite été repris par les organismes de normalisation et ajoutés au langage différemment.

« Avec l'évolution du langage JavaScript et de nouveaux ajouts comme TypeScript, la création de projets Node peut devenir une tâche ardue, impliquant la gestion de systèmes de génération et d'autres outils lourds qui enlèvent le plaisir des scripts de langage dynamique. De plus, le mécanisme de liaison à des bibliothèques externes est fondamentalement centralisé via le référentiel NPM, qui n'est pas conforme aux idéaux du Web. « Nous pensons que le paysage de JavaScript et de l'infrastructure logicielle environnante a suffisamment changé pour qu'il soit utile de le simplifier. Nous recherchons un environnement de script amusant et productif qui peut être utilisé pour un large éventail de tâches ». Voici, ci-dessous, les nouvelles fonctionnalités apportées à la version 1.14 de Deno.

Ajouts à l'API Crypto Web

Cette version introduit de nombreuses nouvelles API Web de chiffrement :
crypto.subtile.exportKey() :

  • les clés HMAC peuvent maintenant être exportées dans les deux formats JWK et "raw" ;
  • les clés RSA peuvent maintenant être exportées au format pkcs#8.

crypto.subtile.importKey() :

  • les clés HMAC peuvent maintenant être importées dans les deux formats JWK et "raw" ;
  • les clés RSA peuvent maintenant être importées dans le format pkcs#8 ;
    les clés PBKDF2 peuvent maintenant être importées au format "raw".

crypto.subtile.generateKey() :

  • la génération des clés RSA-OAEP est maintenant supportée ;
  • la génération des clés ECDH est maintenant supportée ;
  • la génération de clés AES est maintenant supportée.

crypto.subtle.deriveBits() :

  • la dérivation PBKDF2 est maintenant supportée ;
  • la dérivation HKDF est maintenant supportée.

crypto.subtle.verify() :

  • la vérification de signature ECDSA est maintenant supportée ;

crypto.subtle.encrypt() :

  • le chiffrement RSA-OAEP est maintenant supporté ;

crypto.subtle.decrypt() :

  • le décryptage RSA-OAEP est désormais pris en charge ;


Options de personnalisation pour deno lint et deno fmt

L'écosystème bénéficie de styles de code et de règles de linting canoniques. Au cours de l'année écoulée, Deno a reçu de nombreuses demandes d'utilisateurs souhaitant pouvoir modifier les options utilisées par deno lint et deno fmt pour répondre à des besoins spécifiques et légitimes. La version 1.14 permet de configurer deno lint et deno fmt. Par défaut, deno lint sera exécuté avec toutes les règles de lint recommandées.

Maintenant --rules-exclude, --rules-include, et --rules-tags peuvent être utilisés pour exclure des règles, ou inclure des règles spécifiques qui ne sont pas dans l'ensemble recommandé (comme ban-untagged-todo). Les règles de style de deno fmt sont basées sur prettier. Il y a seulement cinq options qui peuvent être utilisées pour modifier les règles de style :

--options-indent-width (default : 2). Le nombre d'espaces à utiliser pour l'indentation ;
--options-line-width (default : 80). Largeur maximale de la ligne ;
--options-prose-wrap (default : always). Le paramètre d'habillage de la prose ;
--options-single-quote (default : false). Indique si les guillemets simples doivent être utilisés ;
--options-use-tabs (default : false) - Indique si l'on doit utiliser des tabulations au lieu d'espaces pour l'indentation.

Ces options peuvent maintenant aussi être configurées dans le fichier spécifié par --config. Nous avons conçu ce tag pour que le même fichier puisse être utilisé avec deno run --config, deno fmt --config, et deno lint --config. C'est-à-dire que nous étendons le fichier tsconfig.json.

Avant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
{
  "compilerOptions": {
    "allowJs": true,
    "lib": ["deno.window"],
    "strict": true
  }
}
Après

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
  "compilerOptions": {
    "allowJs": true,
    "lib": ["deno.window"],
    "strict": true
  },
  "lint": {
    "files": {
      "include": ["src/"],
      "exclude": ["src/testdata/"]
    },
    "rules": {
      "tags": ["recommended"],
      "include": ["ban-untagged-todo"],
      "exclude": ["no-unused-vars"]
    }
  },
  "fmt": {
    "files": {
      "include": ["src/"],
      "exclude": ["src/testdata/"]
    },
    "options": {
      "useTabs": true,
      "lineWidth": 80,
      "indentWidth": 4,
      "singleQuote": true,
      "proseWrap": "preserve"
    }
  }
}
URLPattern

La version 1.14 introduit une nouvelle API de la plateforme Web permettant de faire correspondre des URL à des modèles. URLPattern est une alternative intégrée à la bibliothèque path-to-regexp. La syntaxe des motifs est très similaire à celle de path-to-regexp. Ce qui distingue URLPattern, c'est qu'il est capable de faire correspondre plus que de simples chemins. Il peut faire correspondre chaque partie d'une URL (protocole, nom d'hôte, nom de chemin, chaîne de requête, hachage, etc.) individuellement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
const pattern = new URLPattern({ pathname : "/books/:id" }) ;
console.log(pattern.test("https://example.com/books/123")) ; // vrai
console.log(pattern.test("https://example.com/books/123/456")) ; // false
console.log(pattern.test("https://example.com/books")) ; // false
console.log(pattern.exec("https://example.com/books/123").pathname) ; // { input : "/books/123", groups : { id : "123" } }
Cette API est instable. La fonction --unstable est nécessaire pour l'utiliser, mais il est peu probable qu'elle change de manière significative avant sa stabilisation. À moins que de nouveaux blocages ne surviennent, Deno promet de stabiliser l'API dans Deno 1.15, en synchronisation avec Chrome 95.

Source : Deno

Et vous ?

Quel est votre avis sur le sujet ?

Voir aussi :

La Version 1.9 de Deno, le runtime pour exécuter JavaScript et TypeScript, est disponible, elle améliore les appels de commande dans Rust et apporte de nouvelles fonctionnalités

State of JavaScript 2020 : TypeScript leader incontestable des déclinaisons de JavaScript, le typage statique devient la fonctionnalité la plus demandée et React reste le framework front-end dominant

Deno passe en version 1.0. Le runtime pour exécuter JavaScript et TypeScript, tente de fournir un outil autonome pour l'écriture rapide de fonctionnalités complexes

Quels sont les coûts liés à l'utilisation de frameworks JavaScript pour le développement Web ? Une analyse des sites utilisant React, Vue.js ou Angular