jass-vue 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +43 -0
  4. data/lib/jass/vue.rb +12 -0
  5. data/lib/jass/vue/version.rb +5 -0
  6. data/vendor/node_modules/arr-diff/index.js +58 -0
  7. data/vendor/node_modules/arr-diff/package.json +49 -0
  8. data/vendor/node_modules/arr-flatten/index.js +22 -0
  9. data/vendor/node_modules/arr-flatten/package.json +76 -0
  10. data/vendor/node_modules/array-unique/index.js +28 -0
  11. data/vendor/node_modules/array-unique/package.json +37 -0
  12. data/vendor/node_modules/braces/index.js +399 -0
  13. data/vendor/node_modules/braces/package.json +83 -0
  14. data/vendor/node_modules/de-indent/index.js +45 -0
  15. data/vendor/node_modules/de-indent/package.json +25 -0
  16. data/vendor/node_modules/de-indent/test.js +30 -0
  17. data/vendor/node_modules/estree-walker/dist/estree-walker.es.js +55 -0
  18. data/vendor/node_modules/estree-walker/dist/estree-walker.es6.js +59 -0
  19. data/vendor/node_modules/estree-walker/dist/estree-walker.umd.js +65 -0
  20. data/vendor/node_modules/estree-walker/package.json +33 -0
  21. data/vendor/node_modules/estree-walker/src/estree-walker.js +49 -0
  22. data/vendor/node_modules/expand-brackets/index.js +163 -0
  23. data/vendor/node_modules/expand-brackets/package.json +62 -0
  24. data/vendor/node_modules/expand-range/index.js +43 -0
  25. data/vendor/node_modules/expand-range/package.json +73 -0
  26. data/vendor/node_modules/extglob/index.js +178 -0
  27. data/vendor/node_modules/extglob/package.json +60 -0
  28. data/vendor/node_modules/filename-regex/index.js +10 -0
  29. data/vendor/node_modules/filename-regex/package.json +50 -0
  30. data/vendor/node_modules/fill-range/index.js +408 -0
  31. data/vendor/node_modules/fill-range/package.json +61 -0
  32. data/vendor/node_modules/for-in/index.js +16 -0
  33. data/vendor/node_modules/for-in/package.json +68 -0
  34. data/vendor/node_modules/for-own/index.js +19 -0
  35. data/vendor/node_modules/for-own/package.json +70 -0
  36. data/vendor/node_modules/glob-base/index.js +51 -0
  37. data/vendor/node_modules/glob-base/package.json +52 -0
  38. data/vendor/node_modules/glob-parent/index.js +10 -0
  39. data/vendor/node_modules/glob-parent/package.json +35 -0
  40. data/vendor/node_modules/glob-parent/test.js +28 -0
  41. data/vendor/node_modules/he/bin/he +148 -0
  42. data/vendor/node_modules/he/he.js +342 -0
  43. data/vendor/node_modules/he/man/he.1 +78 -0
  44. data/vendor/node_modules/he/package.json +56 -0
  45. data/vendor/node_modules/is-buffer/index.js +21 -0
  46. data/vendor/node_modules/is-buffer/package.json +51 -0
  47. data/vendor/node_modules/is-dotfile/index.js +14 -0
  48. data/vendor/node_modules/is-dotfile/package.json +69 -0
  49. data/vendor/node_modules/is-equal-shallow/index.js +27 -0
  50. data/vendor/node_modules/is-equal-shallow/package.json +54 -0
  51. data/vendor/node_modules/is-extendable/index.js +13 -0
  52. data/vendor/node_modules/is-extendable/package.json +51 -0
  53. data/vendor/node_modules/is-extglob/index.js +11 -0
  54. data/vendor/node_modules/is-extglob/package.json +48 -0
  55. data/vendor/node_modules/is-glob/index.js +14 -0
  56. data/vendor/node_modules/is-glob/package.json +60 -0
  57. data/vendor/node_modules/is-number/index.js +19 -0
  58. data/vendor/node_modules/is-number/package.json +59 -0
  59. data/vendor/node_modules/is-posix-bracket/index.js +10 -0
  60. data/vendor/node_modules/is-posix-bracket/package.json +64 -0
  61. data/vendor/node_modules/is-primitive/index.js +13 -0
  62. data/vendor/node_modules/is-primitive/package.json +46 -0
  63. data/vendor/node_modules/isarray/index.js +5 -0
  64. data/vendor/node_modules/isarray/package.json +45 -0
  65. data/vendor/node_modules/isarray/test.js +20 -0
  66. data/vendor/node_modules/isobject/index.js +14 -0
  67. data/vendor/node_modules/isobject/package.json +67 -0
  68. data/vendor/node_modules/kind-of/index.js +116 -0
  69. data/vendor/node_modules/kind-of/package.json +90 -0
  70. data/vendor/node_modules/magic-string/dist/magic-string.cjs.js +1287 -0
  71. data/vendor/node_modules/magic-string/dist/magic-string.es.js +1283 -0
  72. data/vendor/node_modules/magic-string/dist/magic-string.umd.js +1339 -0
  73. data/vendor/node_modules/magic-string/package.json +60 -0
  74. data/vendor/node_modules/magic-string/src/Bundle.js +263 -0
  75. data/vendor/node_modules/magic-string/src/Chunk.js +154 -0
  76. data/vendor/node_modules/magic-string/src/MagicString.js +618 -0
  77. data/vendor/node_modules/magic-string/src/index-legacy.js +6 -0
  78. data/vendor/node_modules/magic-string/src/index.js +4 -0
  79. data/vendor/node_modules/magic-string/src/utils/Mappings.js +117 -0
  80. data/vendor/node_modules/magic-string/src/utils/SourceMap.js +21 -0
  81. data/vendor/node_modules/magic-string/src/utils/Stats.js +18 -0
  82. data/vendor/node_modules/magic-string/src/utils/btoa.js +13 -0
  83. data/vendor/node_modules/magic-string/src/utils/getLocator.js +35 -0
  84. data/vendor/node_modules/magic-string/src/utils/getRelativePath.js +18 -0
  85. data/vendor/node_modules/magic-string/src/utils/guessIndent.js +25 -0
  86. data/vendor/node_modules/magic-string/src/utils/hasOwnProp.js +1 -0
  87. data/vendor/node_modules/magic-string/src/utils/isObject.js +5 -0
  88. data/vendor/node_modules/micromatch/index.js +431 -0
  89. data/vendor/node_modules/micromatch/lib/chars.js +67 -0
  90. data/vendor/node_modules/micromatch/lib/expand.js +304 -0
  91. data/vendor/node_modules/micromatch/lib/glob.js +193 -0
  92. data/vendor/node_modules/micromatch/lib/utils.js +149 -0
  93. data/vendor/node_modules/micromatch/package.json +114 -0
  94. data/vendor/node_modules/normalize-path/index.js +19 -0
  95. data/vendor/node_modules/normalize-path/package.json +78 -0
  96. data/vendor/node_modules/object.omit/index.js +40 -0
  97. data/vendor/node_modules/object.omit/package.json +67 -0
  98. data/vendor/node_modules/parse-glob/index.js +156 -0
  99. data/vendor/node_modules/parse-glob/package.json +62 -0
  100. data/vendor/node_modules/preserve/index.js +54 -0
  101. data/vendor/node_modules/preserve/package.json +48 -0
  102. data/vendor/node_modules/preserve/test.js +48 -0
  103. data/vendor/node_modules/randomatic/index.js +82 -0
  104. data/vendor/node_modules/randomatic/node_modules/is-number/index.js +22 -0
  105. data/vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js +116 -0
  106. data/vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json +90 -0
  107. data/vendor/node_modules/randomatic/node_modules/is-number/package.json +83 -0
  108. data/vendor/node_modules/randomatic/node_modules/kind-of/index.js +119 -0
  109. data/vendor/node_modules/randomatic/node_modules/kind-of/package.json +90 -0
  110. data/vendor/node_modules/randomatic/package.json +78 -0
  111. data/vendor/node_modules/regex-cache/index.js +68 -0
  112. data/vendor/node_modules/regex-cache/package.json +64 -0
  113. data/vendor/node_modules/remove-trailing-separator/index.js +17 -0
  114. data/vendor/node_modules/remove-trailing-separator/package.json +37 -0
  115. data/vendor/node_modules/repeat-element/index.js +18 -0
  116. data/vendor/node_modules/repeat-element/package.json +44 -0
  117. data/vendor/node_modules/repeat-string/index.js +70 -0
  118. data/vendor/node_modules/repeat-string/package.json +77 -0
  119. data/vendor/node_modules/rollup-plugin-vue2/dist/rollup-plugin-vue2.common.js +164 -0
  120. data/vendor/node_modules/rollup-plugin-vue2/dist/rollup-plugin-vue2.es.js +160 -0
  121. data/vendor/node_modules/rollup-plugin-vue2/package.json +50 -0
  122. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.cjs.js +223 -0
  123. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.es.js +214 -0
  124. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.es6.js +217 -0
  125. data/vendor/node_modules/rollup-pluginutils/package.json +40 -0
  126. data/vendor/node_modules/rollup-pluginutils/src/addExtension.js +6 -0
  127. data/vendor/node_modules/rollup-pluginutils/src/attachScopes.js +147 -0
  128. data/vendor/node_modules/rollup-pluginutils/src/createFilter.js +33 -0
  129. data/vendor/node_modules/rollup-pluginutils/src/index.js +4 -0
  130. data/vendor/node_modules/rollup-pluginutils/src/makeLegalIdentifier.js +15 -0
  131. data/vendor/node_modules/rollup-pluginutils/src/utils/ensureArray.js +5 -0
  132. data/vendor/node_modules/vlq/dist/vlq.js +91 -0
  133. data/vendor/node_modules/vlq/package.json +27 -0
  134. data/vendor/node_modules/vlq/src/vlq.js +78 -0
  135. data/vendor/node_modules/vue-template-compiler/browser.js +5237 -0
  136. data/vendor/node_modules/vue-template-compiler/build.js +4835 -0
  137. data/vendor/node_modules/vue-template-compiler/index.js +18 -0
  138. data/vendor/node_modules/vue-template-compiler/package.json +27 -0
  139. data/vendor/node_modules/vue-template-es2015-compiler/buble.js +14112 -0
  140. data/vendor/node_modules/vue-template-es2015-compiler/index.js +24 -0
  141. data/vendor/node_modules/vue-template-es2015-compiler/package.json +28 -0
  142. data/vendor/package.json +9 -0
  143. data/vendor/yarn.lock +268 -0
  144. metadata +242 -0
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "braces",
3
+ "description": "Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.",
4
+ "version": "1.8.5",
5
+ "homepage": "https://github.com/jonschlinkert/braces",
6
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
7
+ "repository": "jonschlinkert/braces",
8
+ "bugs": {
9
+ "url": "https://github.com/jonschlinkert/braces/issues"
10
+ },
11
+ "license": "MIT",
12
+ "files": [
13
+ "index.js"
14
+ ],
15
+ "main": "index.js",
16
+ "engines": {
17
+ "node": ">=0.10.0"
18
+ },
19
+ "scripts": {
20
+ "test": "mocha"
21
+ },
22
+ "dependencies": {
23
+ "expand-range": "^1.8.1",
24
+ "preserve": "^0.2.0",
25
+ "repeat-element": "^1.1.2"
26
+ },
27
+ "devDependencies": {
28
+ "benchmarked": "^0.1.5",
29
+ "brace-expansion": "^1.1.3",
30
+ "chalk": "^1.1.3",
31
+ "gulp-format-md": "^0.1.8",
32
+ "minimatch": "^3.0.0",
33
+ "minimist": "^1.2.0",
34
+ "mocha": "^2.4.5",
35
+ "should": "^8.3.1"
36
+ },
37
+ "keywords": [
38
+ "alpha",
39
+ "alphabetical",
40
+ "bash",
41
+ "brace",
42
+ "expand",
43
+ "expansion",
44
+ "filepath",
45
+ "fill",
46
+ "fs",
47
+ "glob",
48
+ "globbing",
49
+ "letter",
50
+ "match",
51
+ "matches",
52
+ "matching",
53
+ "number",
54
+ "numerical",
55
+ "path",
56
+ "range",
57
+ "ranges",
58
+ "sh"
59
+ ],
60
+ "verb": {
61
+ "plugins": [
62
+ "gulp-format-md"
63
+ ],
64
+ "reflinks": [
65
+ "verb"
66
+ ],
67
+ "toc": false,
68
+ "layout": "default",
69
+ "lint": {
70
+ "reflinks": true
71
+ },
72
+ "tasks": [
73
+ "readme"
74
+ ],
75
+ "related": {
76
+ "list": [
77
+ "micromatch",
78
+ "expand-range",
79
+ "fill-range"
80
+ ]
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,45 @@
1
+ var splitRE = /\r?\n/g
2
+ var emptyRE = /^\s*$/
3
+ var needFixRE = /^(\r?\n)*[\t\s]/
4
+
5
+ module.exports = function deindent (str) {
6
+ if (!needFixRE.test(str)) {
7
+ return str
8
+ }
9
+ var lines = str.split(splitRE)
10
+ var min = Infinity
11
+ var type, cur, c
12
+ for (var i = 0; i < lines.length; i++) {
13
+ var line = lines[i]
14
+ if (!emptyRE.test(line)) {
15
+ if (!type) {
16
+ c = line.charAt(0)
17
+ if (c === ' ' || c === '\t') {
18
+ type = c
19
+ cur = count(line, type)
20
+ if (cur < min) {
21
+ min = cur
22
+ }
23
+ } else {
24
+ return str
25
+ }
26
+ } else {
27
+ cur = count(line, type)
28
+ if (cur < min) {
29
+ min = cur
30
+ }
31
+ }
32
+ }
33
+ }
34
+ return lines.map(function (line) {
35
+ return line.slice(min)
36
+ }).join('\n')
37
+ }
38
+
39
+ function count (line, type) {
40
+ var i = 0
41
+ while (line.charAt(i) === type) {
42
+ i++
43
+ }
44
+ return i
45
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "de-indent",
3
+ "version": "1.0.2",
4
+ "description": "remove extra indent from a block of code",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "mocha"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/yyx990803/de-indent.git"
12
+ },
13
+ "keywords": [
14
+ "deindent"
15
+ ],
16
+ "author": "Evan You",
17
+ "license": "MIT",
18
+ "bugs": {
19
+ "url": "https://github.com/yyx990803/de-indent/issues"
20
+ },
21
+ "homepage": "https://github.com/yyx990803/de-indent#readme",
22
+ "devDependencies": {
23
+ "mocha": "^2.3.4"
24
+ }
25
+ }
@@ -0,0 +1,30 @@
1
+ var assert = require('assert')
2
+ var deindent = require('./index')
3
+
4
+ describe('de-indent', function () {
5
+
6
+ it('0 indent', function () {
7
+ var str = '\nabc\n bcd\n cde\nefg'
8
+ var res = deindent(str)
9
+ assert.equal(str, res)
10
+ })
11
+
12
+ it('non-0 indent', function () {
13
+ var str = ' abc\n bcd\n cde\n efg'
14
+ var res = deindent(str)
15
+ assert.equal(res, 'abc\n bcd\ncde\n efg')
16
+ })
17
+
18
+ it('tabs', function () {
19
+ var str = '\tabc\n\t\tbcd\n\tcde\n\t\tefg'
20
+ var res = deindent(str)
21
+ assert.equal(res, 'abc\n\tbcd\ncde\n\tefg')
22
+ })
23
+
24
+ it('single line', function () {
25
+ var str = '\n <h2 class="red">{{msg}}</h2>\n'
26
+ var res = deindent(str)
27
+ assert.equal(res, '\n<h2 class="red">{{msg}}</h2>\n')
28
+ })
29
+
30
+ })
@@ -0,0 +1,55 @@
1
+ function walk ( ast, ref) {
2
+ var enter = ref.enter;
3
+ var leave = ref.leave;
4
+
5
+ visit( ast, null, enter, leave );
6
+ }
7
+
8
+ var context = {
9
+ skip: function () { return context.shouldSkip = true; },
10
+ shouldSkip: false
11
+ };
12
+
13
+ var childKeys = {};
14
+
15
+ var toString = Object.prototype.toString;
16
+
17
+ function isArray ( thing ) {
18
+ return toString.call( thing ) === '[object Array]';
19
+ }
20
+
21
+ function visit ( node, parent, enter, leave, prop, index ) {
22
+ if ( !node ) { return; }
23
+
24
+ if ( enter ) {
25
+ context.shouldSkip = false;
26
+ enter.call( context, node, parent, prop, index );
27
+ if ( context.shouldSkip ) { return; }
28
+ }
29
+
30
+ var keys = childKeys[ node.type ] || (
31
+ childKeys[ node.type ] = Object.keys( node ).filter( function (key) { return typeof node[ key ] === 'object'; } )
32
+ );
33
+
34
+ for ( var i = 0; i < keys.length; i += 1 ) {
35
+ var key = keys[i];
36
+ var value = node[ key ];
37
+
38
+ if ( isArray( value ) ) {
39
+ for ( var j = 0; j < value.length; j += 1 ) {
40
+ visit( value[j], node, enter, leave, key, j );
41
+ }
42
+ }
43
+
44
+ else if ( value && value.type ) {
45
+ visit( value, node, enter, leave, key, null );
46
+ }
47
+ }
48
+
49
+ if ( leave ) {
50
+ leave( node, parent, prop, index );
51
+ }
52
+ }
53
+
54
+ export { walk };
55
+ //# sourceMappingURL=estree-walker.es.js.map
@@ -0,0 +1,59 @@
1
+ function walk ( ast, ref) {
2
+ var enter = ref.enter;
3
+ var leave = ref.leave;
4
+
5
+ visit( ast, null, enter, leave );
6
+ }
7
+
8
+ var context = {
9
+ skip: function () { return context.shouldSkip = true; },
10
+ shouldSkip: false
11
+ };
12
+
13
+ var childKeys = {};
14
+
15
+ var toString = Object.prototype.toString;
16
+
17
+ function isArray ( thing ) {
18
+ return toString.call( thing ) === '[object Array]';
19
+ }
20
+
21
+ function visit ( node, parent, enter, leave, prop, index ) {
22
+ if ( !node ) return;
23
+
24
+ if ( enter ) {
25
+ context.shouldSkip = false;
26
+ enter.call( context, node, parent, prop, index );
27
+ if ( context.shouldSkip ) return;
28
+ }
29
+
30
+ var keys = childKeys[ node.type ] || (
31
+ childKeys[ node.type ] = Object.keys( node ).filter( function (key) { return typeof node[ key ] === 'object'; } )
32
+ );
33
+
34
+ var key, value, i, j;
35
+
36
+ i = keys.length;
37
+ while ( i-- ) {
38
+ key = keys[i];
39
+ value = node[ key ];
40
+
41
+ if ( isArray( value ) ) {
42
+ j = value.length;
43
+ while ( j-- ) {
44
+ visit( value[j], node, enter, leave, key, j );
45
+ }
46
+ }
47
+
48
+ else if ( value && value.type ) {
49
+ visit( value, node, enter, leave, key, null );
50
+ }
51
+ }
52
+
53
+ if ( leave ) {
54
+ leave( node, parent, prop, index );
55
+ }
56
+ }
57
+
58
+ export { walk };
59
+ //# sourceMappingURL=estree-walker.es6.js.map
@@ -0,0 +1,65 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (factory((global.estreeWalker = global.estreeWalker || {})));
5
+ }(this, (function (exports) { 'use strict';
6
+
7
+ function walk ( ast, ref) {
8
+ var enter = ref.enter;
9
+ var leave = ref.leave;
10
+
11
+ visit( ast, null, enter, leave );
12
+ }
13
+
14
+ var context = {
15
+ skip: function () { return context.shouldSkip = true; },
16
+ shouldSkip: false
17
+ };
18
+
19
+ var childKeys = {};
20
+
21
+ var toString = Object.prototype.toString;
22
+
23
+ function isArray ( thing ) {
24
+ return toString.call( thing ) === '[object Array]';
25
+ }
26
+
27
+ function visit ( node, parent, enter, leave, prop, index ) {
28
+ if ( !node ) { return; }
29
+
30
+ if ( enter ) {
31
+ context.shouldSkip = false;
32
+ enter.call( context, node, parent, prop, index );
33
+ if ( context.shouldSkip ) { return; }
34
+ }
35
+
36
+ var keys = childKeys[ node.type ] || (
37
+ childKeys[ node.type ] = Object.keys( node ).filter( function (key) { return typeof node[ key ] === 'object'; } )
38
+ );
39
+
40
+ for ( var i = 0; i < keys.length; i += 1 ) {
41
+ var key = keys[i];
42
+ var value = node[ key ];
43
+
44
+ if ( isArray( value ) ) {
45
+ for ( var j = 0; j < value.length; j += 1 ) {
46
+ visit( value[j], node, enter, leave, key, j );
47
+ }
48
+ }
49
+
50
+ else if ( value && value.type ) {
51
+ visit( value, node, enter, leave, key, null );
52
+ }
53
+ }
54
+
55
+ if ( leave ) {
56
+ leave( node, parent, prop, index );
57
+ }
58
+ }
59
+
60
+ exports.walk = walk;
61
+
62
+ Object.defineProperty(exports, '__esModule', { value: true });
63
+
64
+ })));
65
+ //# sourceMappingURL=estree-walker.umd.js.map
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "estree-walker",
3
+ "description": "Traverse an ESTree-compliant AST",
4
+ "version": "0.3.1",
5
+ "author": "Rich Harris",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/Rich-Harris/estree-walker"
10
+ },
11
+ "main": "dist/estree-walker.umd.js",
12
+ "module": "dist/estree-walker.es.js",
13
+ "jsnext:main": "dist/estree-walker.es.js",
14
+ "scripts": {
15
+ "prepublish": "npm run lint && npm test",
16
+ "build": "rollup -c",
17
+ "test": "mocha test/test.js --compilers js:buble/register",
18
+ "pretest": "npm run build",
19
+ "lint": "eslint src"
20
+ },
21
+ "devDependencies": {
22
+ "buble": "^0.15.2",
23
+ "eslint": "^3.16.0",
24
+ "mocha": "^3.2.0",
25
+ "rollup": "^0.41.4",
26
+ "rollup-plugin-buble": "^0.15.0"
27
+ },
28
+ "files": [
29
+ "src",
30
+ "dist",
31
+ "README.md"
32
+ ]
33
+ }
@@ -0,0 +1,49 @@
1
+ export function walk ( ast, { enter, leave }) {
2
+ visit( ast, null, enter, leave );
3
+ }
4
+
5
+ const context = {
6
+ skip: () => context.shouldSkip = true,
7
+ shouldSkip: false
8
+ };
9
+
10
+ let childKeys = {};
11
+
12
+ const toString = Object.prototype.toString;
13
+
14
+ function isArray ( thing ) {
15
+ return toString.call( thing ) === '[object Array]';
16
+ }
17
+
18
+ function visit ( node, parent, enter, leave, prop, index ) {
19
+ if ( !node ) return;
20
+
21
+ if ( enter ) {
22
+ context.shouldSkip = false;
23
+ enter.call( context, node, parent, prop, index );
24
+ if ( context.shouldSkip ) return;
25
+ }
26
+
27
+ const keys = childKeys[ node.type ] || (
28
+ childKeys[ node.type ] = Object.keys( node ).filter( key => typeof node[ key ] === 'object' )
29
+ );
30
+
31
+ for ( let i = 0; i < keys.length; i += 1 ) {
32
+ const key = keys[i];
33
+ const value = node[ key ];
34
+
35
+ if ( isArray( value ) ) {
36
+ for ( let j = 0; j < value.length; j += 1 ) {
37
+ visit( value[j], node, enter, leave, key, j );
38
+ }
39
+ }
40
+
41
+ else if ( value && value.type ) {
42
+ visit( value, node, enter, leave, key, null );
43
+ }
44
+ }
45
+
46
+ if ( leave ) {
47
+ leave( node, parent, prop, index );
48
+ }
49
+ }