From ba04377ed87ddd65725c09eb8ae619fb59f2a666 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sun, 9 Nov 2014 12:07:25 +1100 Subject: [PATCH] add types.toIdentifier --- lib/6to5/types/index.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/6to5/types/index.js b/lib/6to5/types/index.js index af6f2fe0d2..d403372d4b 100644 --- a/lib/6to5/types/index.js +++ b/lib/6to5/types/index.js @@ -1,6 +1,4 @@ -var traverse = require("../traverse"); -var n = require("ast-types").namedTypes; -var _ = require("lodash"); +var _ = require("lodash"); var t = exports; @@ -86,6 +84,23 @@ t.isReferenced = function (node, parent) { return false; }; +t.toIdentifier = function (name) { + if (t.isIdentifier(name)) return name.name; + + // replace all non-valid identifiers with dashes + name = name.replace(/[^a-zA-Z0-9]/g, "-"); + + // remove all dashes and numbers from start of name + name = name.replace(/^[-0-9]+/, ""); + + // camel case + name = name.replace(/[-_\s]+(.)?/g, function (match, c) { + return c ? c.toUpperCase() : ""; + }); + + return name; +}; + t.ensureBlock = function (node) { node.body = t.toBlock(node.body, node); }; @@ -127,7 +142,7 @@ t.toBlock = function (node, parent) { } if (!_.isArray(node)) { - if (!n.Statement.check(node)) { + if (!t.isStatement(node)) { if (t.isFunction(parent)) { node = t.returnStatement(node); } else {