aboutsummaryrefslogtreecommitdiff
path: root/node_modules/espurify/lib
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-28 00:38:50 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-28 00:40:43 +0200
commit7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch)
tree6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/espurify/lib
parent963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff)
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/espurify/lib')
-rw-r--r--node_modules/espurify/lib/ast-properties.js68
-rw-r--r--node_modules/espurify/lib/clone-ast.js69
-rw-r--r--node_modules/espurify/lib/create-whitelist.js17
3 files changed, 154 insertions, 0 deletions
diff --git a/node_modules/espurify/lib/ast-properties.js b/node_modules/espurify/lib/ast-properties.js
new file mode 100644
index 000000000..37267b973
--- /dev/null
+++ b/node_modules/espurify/lib/ast-properties.js
@@ -0,0 +1,68 @@
+module.exports = {
+ ArrayExpression: ['type', 'elements'],
+ ArrayPattern: ['type', 'elements'],
+ ArrowFunctionExpression: ['type', 'id', 'params', 'body', 'generator', 'expression', 'async'],
+ AssignmentExpression: ['type', 'operator', 'left', 'right'],
+ AssignmentPattern: ['type', 'left', 'right'],
+ AwaitExpression: ['type', 'argument'],
+ BinaryExpression: ['type', 'operator', 'left', 'right'],
+ BlockStatement: ['type', 'body'],
+ BreakStatement: ['type', 'label'],
+ CallExpression: ['type', 'callee', 'arguments'],
+ CatchClause: ['type', 'param', 'guard', 'body'],
+ ClassBody: ['type', 'body'],
+ ClassDeclaration: ['type', 'id', 'superClass', 'body'],
+ ClassExpression: ['type', 'id', 'superClass', 'body'],
+ ConditionalExpression: ['type', 'test', 'consequent', 'alternate'],
+ ContinueStatement: ['type', 'label'],
+ DebuggerStatement: ['type'],
+ DoWhileStatement: ['type', 'body', 'test'],
+ EmptyStatement: ['type'],
+ ExportAllDeclaration: ['type', 'source'],
+ ExportDefaultDeclaration: ['type', 'declaration'],
+ ExportNamedDeclaration: ['type', 'declaration', 'specifiers', 'source'],
+ ExportSpecifier: ['type', 'exported', 'local'],
+ ExpressionStatement: ['type', 'expression'],
+ ForInStatement: ['type', 'left', 'right', 'body'],
+ ForOfStatement: ['type', 'left', 'right', 'body'],
+ ForStatement: ['type', 'init', 'test', 'update', 'body'],
+ FunctionDeclaration: ['type', 'id', 'params', 'body', 'generator', 'async'],
+ FunctionExpression: ['type', 'id', 'params', 'body', 'generator', 'async'],
+ Identifier: ['type', 'name'],
+ IfStatement: ['type', 'test', 'consequent', 'alternate'],
+ ImportDeclaration: ['type', 'specifiers', 'source'],
+ ImportDefaultSpecifier: ['type', 'local'],
+ ImportNamespaceSpecifier: ['type', 'local'],
+ ImportSpecifier: ['type', 'imported', 'local'],
+ LabeledStatement: ['type', 'label', 'body'],
+ Literal: ['type', 'value', 'regex'],
+ LogicalExpression: ['type', 'operator', 'left', 'right'],
+ MemberExpression: ['type', 'object', 'property', 'computed'],
+ MetaProperty: ['type', 'meta', 'property'],
+ MethodDefinition: ['type', 'key', 'value', 'kind', 'computed', 'static'],
+ NewExpression: ['type', 'callee', 'arguments'],
+ ObjectExpression: ['type', 'properties'],
+ ObjectPattern: ['type', 'properties'],
+ Program: ['type', 'body', 'sourceType'],
+ Property: ['type', 'key', 'value', 'kind', 'method', 'shorthand', 'computed'],
+ RestElement: ['type', 'argument'],
+ ReturnStatement: ['type', 'argument'],
+ SequenceExpression: ['type', 'expressions'],
+ SpreadElement: ['type', 'argument'],
+ Super: ['type'],
+ SwitchCase: ['type', 'test', 'consequent'],
+ SwitchStatement: ['type', 'discriminant', 'cases', 'lexical'],
+ TaggedTemplateExpression: ['type', 'tag', 'quasi'],
+ TemplateElement: ['type', 'tail', 'value'],
+ TemplateLiteral: ['type', 'quasis', 'expressions'],
+ ThisExpression: ['type'],
+ ThrowStatement: ['type', 'argument'],
+ TryStatement: ['type', 'block', 'handler', 'finalizer'],
+ UnaryExpression: ['type', 'operator', 'prefix', 'argument'],
+ UpdateExpression: ['type', 'operator', 'argument', 'prefix'],
+ VariableDeclaration: ['type', 'declarations', 'kind'],
+ VariableDeclarator: ['type', 'id', 'init'],
+ WhileStatement: ['type', 'test', 'body'],
+ WithStatement: ['type', 'object', 'body'],
+ YieldExpression: ['type', 'argument', 'delegate']
+};
diff --git a/node_modules/espurify/lib/clone-ast.js b/node_modules/espurify/lib/clone-ast.js
new file mode 100644
index 000000000..f748b885d
--- /dev/null
+++ b/node_modules/espurify/lib/clone-ast.js
@@ -0,0 +1,69 @@
+'use strict';
+
+var isArray = require('core-js/library/fn/array/is-array');
+var objectKeys = require('core-js/library/fn/object/keys');
+var indexOf = require('core-js/library/fn/array/index-of');
+var reduce = require('core-js/library/fn/array/reduce');
+
+module.exports = function cloneWithWhitelist (astWhiteList) {
+ var whitelist = reduce(objectKeys(astWhiteList), function (props, key) {
+ var propNames = astWhiteList[key];
+ var prepend = (indexOf(propNames, 'type') === -1) ? ['type'] : [];
+ props[key] = prepend.concat(propNames);
+ return props;
+ }, {});
+
+ function cloneNodeOrObject (obj) {
+ var props = obj.type ? whitelist[obj.type] : null;
+ if (props) {
+ return cloneNode(obj, props);
+ } else {
+ return cloneObject(obj);
+ }
+ }
+
+ function cloneArray (ary) {
+ var i = ary.length, clone = [];
+ while (i--) {
+ clone[i] = cloneOf(ary[i]);
+ }
+ return clone;
+ }
+
+ function cloneNode (node, props) {
+ var i, len, key, clone = {};
+ for (i = 0, len = props.length; i < len; i += 1) {
+ key = props[i];
+ if (node.hasOwnProperty(key)) {
+ clone[key] = cloneOf(node[key]);
+ }
+ }
+ return clone;
+ }
+
+ function cloneObject (obj) {
+ var props = objectKeys(obj);
+ var i, len, key, clone = {};
+ for (i = 0, len = props.length; i < len; i += 1) {
+ key = props[i];
+ clone[key] = cloneOf(obj[key]);
+ }
+ return clone;
+ }
+
+ function cloneOf (val) {
+ if (typeof val === 'object' && val !== null) {
+ if (val instanceof RegExp) {
+ return new RegExp(val);
+ } else if (isArray(val)) {
+ return cloneArray(val);
+ } else {
+ return cloneNodeOrObject(val);
+ }
+ } else {
+ return val;
+ }
+ }
+
+ return cloneNodeOrObject;
+};
diff --git a/node_modules/espurify/lib/create-whitelist.js b/node_modules/espurify/lib/create-whitelist.js
new file mode 100644
index 000000000..b1dbc16a0
--- /dev/null
+++ b/node_modules/espurify/lib/create-whitelist.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var defaultProps = require('./ast-properties');
+var objectKeys = require('core-js/library/fn/object/keys');
+var assign = require('core-js/library/fn/object/assign');
+
+module.exports = function createWhitelist (options) {
+ var opts = assign({}, options);
+ var typeName, i, len;
+ var keys = objectKeys(defaultProps);
+ var result = {};
+ for (i = 0, len = keys.length; i < len; i += 1) {
+ typeName = keys[i];
+ result[typeName] = defaultProps[typeName].concat(opts.extra);
+ }
+ return result;
+};