From a9f0c771422b0bae65d3ff1ae4835de416350715 Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Mon, 7 Aug 2017 17:41:16 +0200 Subject: [PATCH] Use a `Map` and some minor regex tweaks --- package.json | 2 +- templates.js | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index a257127..a3152ee 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "devDependencies": { "ava": "*", "coveralls": "^2.11.2", - "execa": "^0.7.0", + "execa": "^0.8.0", "import-fresh": "^2.0.0", "matcha": "^0.7.0", "nyc": "^11.0.2", diff --git a/templates.js b/templates.js index 1015515..dbdf9b2 100644 --- a/templates.js +++ b/templates.js @@ -1,28 +1,28 @@ 'use strict'; -const TEMPLATE_REGEX = /(?:\\(u[a-f0-9]{4}|x[a-f0-9]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; -const ESCAPE_REGEX = /\\(u[0-9a-f]{4}|x[0-9a-f]{2}|.)|([^\\])/gi; +const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; -const ESCAPES = { - n: '\n', - r: '\r', - t: '\t', - b: '\b', - f: '\f', - v: '\v', - 0: '\0', - '\\': '\\', - e: '\u001b', - a: '\u0007' -}; +const ESCAPES = new Map([ + ['n', '\n'], + ['r', '\r'], + ['t', '\t'], + ['b', '\b'], + ['f', '\f'], + ['v', '\v'], + ['0', '\0'], + ['\\', '\\'], + ['e', '\u001B'], + ['a', '\u0007'] +]); function unescape(c) { if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) { return String.fromCharCode(parseInt(c.slice(1), 16)); } - return ESCAPES[c] || c; + return ESCAPES.get(c) || c; } function parseArguments(name, args) {