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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c2685154ff4c63266a8b7b5320642b211ae7e45b626f4e9168c9161de174f4ab
4
+ data.tar.gz: 8825925b9cba3fddfd05f10fb4c2e73038fb29547cdcbf47a54c0d0f3ea62159
5
+ SHA512:
6
+ metadata.gz: 2d325b4bab960a478c5f503c80fdd5b2655cc7f31e2c4db205dc9cfcefed37405cc8ed01390b3fedfe7c79bfde2d24062231391572b1b218e857010ccb2b897b
7
+ data.tar.gz: 1178b2353d960e41e057d161d7917cd2c61eccf729f7334d1e58c79cfa98a7abdd122c8e741a1c1f7451bb226a88fdce541e953e2db1ae60271dcf646ae8bd63
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Matthias Grosser
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # Jass::Vue
2
+
3
+ Roll ES6 and VueJS single file components with the Rails asset pipeline - no Webpack required!
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'jass-vue'
11
+ ```
12
+
13
+ You need a working NodeJS installation.
14
+
15
+ ## Configuration
16
+
17
+ In Rails apps the location of your custom npm dependencies will be automatically
18
+ set to:
19
+
20
+ ```
21
+ Jass.vendor_modules_root = Rails.root.join('vendor')
22
+ ```
23
+
24
+ For other frameworks, it needs to be set manually using the above method.
25
+
26
+ ## Usage
27
+
28
+ Use `yarn` to install your custom npm dependencies into `vendor/node_modules`.
29
+ `vendor/package.json` and `vendor/yarn.lock` should be checked into source control.
30
+
31
+ Create your bundle entry points as `.jass` files under `app/assets/javascripts` in regular
32
+ ES6 syntax (`import`, `async/await`).
33
+
34
+ External dependencies can be declared to Sprockets using the `global` comment:
35
+
36
+ ```js
37
+ // application.jass
38
+ //= global vue Vue
39
+ //= global vue-router VueRouter
40
+
41
+ import Vue from 'vue'
42
+ import Foo from 'custom-dependency'
43
+ ```
data/lib/jass/vue.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'jass/vue/version'
2
+ require 'jass'
3
+
4
+ module Jass
5
+ module Vue
6
+ def self.root
7
+ File.absolute_path(Pathname.new(__FILE__).dirname.join('..', '..', 'vendor').to_s)
8
+ end
9
+ end
10
+ end
11
+
12
+ Jass.prepend_plugin 'rollup-plugin-vue2', 'vue2', '{include: /\.vue$/ }', Jass::Vue.root
@@ -0,0 +1,5 @@
1
+ module Jass
2
+ module Vue
3
+ VERSION = '0.2.1'
4
+ end
5
+ end
@@ -0,0 +1,58 @@
1
+ /*!
2
+ * arr-diff <https://github.com/jonschlinkert/arr-diff>
3
+ *
4
+ * Copyright (c) 2014 Jon Schlinkert, contributors.
5
+ * Licensed under the MIT License
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ var flatten = require('arr-flatten');
11
+ var slice = [].slice;
12
+
13
+ /**
14
+ * Return the difference between the first array and
15
+ * additional arrays.
16
+ *
17
+ * ```js
18
+ * var diff = require('{%= name %}');
19
+ *
20
+ * var a = ['a', 'b', 'c', 'd'];
21
+ * var b = ['b', 'c'];
22
+ *
23
+ * console.log(diff(a, b))
24
+ * //=> ['a', 'd']
25
+ * ```
26
+ *
27
+ * @param {Array} `a`
28
+ * @param {Array} `b`
29
+ * @return {Array}
30
+ * @api public
31
+ */
32
+
33
+ function diff(arr, arrays) {
34
+ var argsLen = arguments.length;
35
+ var len = arr.length, i = -1;
36
+ var res = [], arrays;
37
+
38
+ if (argsLen === 1) {
39
+ return arr;
40
+ }
41
+
42
+ if (argsLen > 2) {
43
+ arrays = flatten(slice.call(arguments, 1));
44
+ }
45
+
46
+ while (++i < len) {
47
+ if (!~arrays.indexOf(arr[i])) {
48
+ res.push(arr[i]);
49
+ }
50
+ }
51
+ return res;
52
+ }
53
+
54
+ /**
55
+ * Expose `diff`
56
+ */
57
+
58
+ module.exports = diff;
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "arr-diff",
3
+ "description": "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.",
4
+ "version": "2.0.0",
5
+ "homepage": "https://github.com/jonschlinkert/arr-diff",
6
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
7
+ "repository": "jonschlinkert/arr-diff",
8
+ "bugs": {
9
+ "url": "https://github.com/jonschlinkert/arr-diff/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
+ "arr-flatten": "^1.0.1"
24
+ },
25
+ "devDependencies": {
26
+ "array-differ": "^1.0.0",
27
+ "array-slice": "^0.2.3",
28
+ "benchmarked": "^0.1.4",
29
+ "chalk": "^1.1.1",
30
+ "mocha": "*",
31
+ "should": "*"
32
+ },
33
+ "keywords": [
34
+ "arr",
35
+ "array",
36
+ "diff",
37
+ "differ",
38
+ "difference"
39
+ ],
40
+ "verb": {
41
+ "related": {
42
+ "list": [
43
+ "arr-flatten",
44
+ "array-filter",
45
+ "array-intersection"
46
+ ]
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,22 @@
1
+ /*!
2
+ * arr-flatten <https://github.com/jonschlinkert/arr-flatten>
3
+ *
4
+ * Copyright (c) 2014-2017, Jon Schlinkert.
5
+ * Released under the MIT License.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ module.exports = function (arr) {
11
+ return flat(arr, []);
12
+ };
13
+
14
+ function flat(arr, res) {
15
+ var i = 0, cur;
16
+ var len = arr.length;
17
+ for (; i < len; i++) {
18
+ cur = arr[i];
19
+ Array.isArray(cur) ? flat(cur, res) : res.push(cur);
20
+ }
21
+ return res;
22
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "arr-flatten",
3
+ "description": "Recursively flatten an array or arrays.",
4
+ "version": "1.1.0",
5
+ "homepage": "https://github.com/jonschlinkert/arr-flatten",
6
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
7
+ "contributors": [
8
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
9
+ "Luke Edwards (https://lukeed.com)"
10
+ ],
11
+ "repository": "jonschlinkert/arr-flatten",
12
+ "bugs": {
13
+ "url": "https://github.com/jonschlinkert/arr-flatten/issues"
14
+ },
15
+ "license": "MIT",
16
+ "files": [
17
+ "index.js"
18
+ ],
19
+ "main": "index.js",
20
+ "engines": {
21
+ "node": ">=0.10.0"
22
+ },
23
+ "scripts": {
24
+ "test": "mocha"
25
+ },
26
+ "devDependencies": {
27
+ "ansi-bold": "^0.1.1",
28
+ "array-flatten": "^2.1.1",
29
+ "array-slice": "^1.0.0",
30
+ "benchmarked": "^1.0.0",
31
+ "compute-flatten": "^1.0.0",
32
+ "flatit": "^1.1.1",
33
+ "flatten": "^1.0.2",
34
+ "flatten-array": "^1.0.0",
35
+ "glob": "^7.1.1",
36
+ "gulp-format-md": "^0.1.12",
37
+ "just-flatten-it": "^1.1.23",
38
+ "lodash.flattendeep": "^4.4.0",
39
+ "m_flattened": "^1.0.1",
40
+ "mocha": "^3.2.0",
41
+ "utils-flatten": "^1.0.0",
42
+ "write": "^0.3.3"
43
+ },
44
+ "keywords": [
45
+ "arr",
46
+ "array",
47
+ "elements",
48
+ "flat",
49
+ "flatten",
50
+ "nested",
51
+ "recurse",
52
+ "recursive",
53
+ "recursively"
54
+ ],
55
+ "verb": {
56
+ "toc": false,
57
+ "layout": "default",
58
+ "tasks": [
59
+ "readme"
60
+ ],
61
+ "plugins": [
62
+ "gulp-format-md"
63
+ ],
64
+ "related": {
65
+ "list": [
66
+ "arr-filter",
67
+ "arr-union",
68
+ "array-each",
69
+ "array-unique"
70
+ ]
71
+ },
72
+ "lint": {
73
+ "reflinks": true
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,28 @@
1
+ /*!
2
+ * array-unique <https://github.com/jonschlinkert/array-unique>
3
+ *
4
+ * Copyright (c) 2014-2015, Jon Schlinkert.
5
+ * Licensed under the MIT License.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ module.exports = function unique(arr) {
11
+ if (!Array.isArray(arr)) {
12
+ throw new TypeError('array-unique expects an array.');
13
+ }
14
+
15
+ var len = arr.length;
16
+ var i = -1;
17
+
18
+ while (i++ < len) {
19
+ var j = i + 1;
20
+
21
+ for (; j < arr.length; ++j) {
22
+ if (arr[i] === arr[j]) {
23
+ arr.splice(j--, 1);
24
+ }
25
+ }
26
+ }
27
+ return arr;
28
+ };
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "array-unique",
3
+ "description": "Return an array free of duplicate values. Fastest ES5 implementation.",
4
+ "version": "0.2.1",
5
+ "homepage": "https://github.com/jonschlinkert/array-unique",
6
+ "author": {
7
+ "name": "Jon Schlinkert",
8
+ "url": "https://github.com/jonschlinkert"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git://github.com/jonschlinkert/array-unique.git"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/jonschlinkert/array-unique/issues"
16
+ },
17
+ "license": {
18
+ "type": "MIT",
19
+ "url": "https://github.com/jonschlinkert/array-unique/blob/master/LICENSE"
20
+ },
21
+ "files": [
22
+ "index.js"
23
+ ],
24
+ "main": "index.js",
25
+ "engines": {
26
+ "node": ">=0.10.0"
27
+ },
28
+ "scripts": {
29
+ "test": "mocha"
30
+ },
31
+ "devDependencies": {
32
+ "array-uniq": "^1.0.2",
33
+ "benchmarked": "^0.1.3",
34
+ "mocha": "*",
35
+ "should": "*"
36
+ }
37
+ }
@@ -0,0 +1,399 @@
1
+ /*!
2
+ * braces <https://github.com/jonschlinkert/braces>
3
+ *
4
+ * Copyright (c) 2014-2015, Jon Schlinkert.
5
+ * Licensed under the MIT license.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ /**
11
+ * Module dependencies
12
+ */
13
+
14
+ var expand = require('expand-range');
15
+ var repeat = require('repeat-element');
16
+ var tokens = require('preserve');
17
+
18
+ /**
19
+ * Expose `braces`
20
+ */
21
+
22
+ module.exports = function(str, options) {
23
+ if (typeof str !== 'string') {
24
+ throw new Error('braces expects a string');
25
+ }
26
+ return braces(str, options);
27
+ };
28
+
29
+ /**
30
+ * Expand `{foo,bar}` or `{1..5}` braces in the
31
+ * given `string`.
32
+ *
33
+ * @param {String} `str`
34
+ * @param {Array} `arr`
35
+ * @param {Object} `options`
36
+ * @return {Array}
37
+ */
38
+
39
+ function braces(str, arr, options) {
40
+ if (str === '') {
41
+ return [];
42
+ }
43
+
44
+ if (!Array.isArray(arr)) {
45
+ options = arr;
46
+ arr = [];
47
+ }
48
+
49
+ var opts = options || {};
50
+ arr = arr || [];
51
+
52
+ if (typeof opts.nodupes === 'undefined') {
53
+ opts.nodupes = true;
54
+ }
55
+
56
+ var fn = opts.fn;
57
+ var es6;
58
+
59
+ if (typeof opts === 'function') {
60
+ fn = opts;
61
+ opts = {};
62
+ }
63
+
64
+ if (!(patternRe instanceof RegExp)) {
65
+ patternRe = patternRegex();
66
+ }
67
+
68
+ var matches = str.match(patternRe) || [];
69
+ var m = matches[0];
70
+
71
+ switch(m) {
72
+ case '\\,':
73
+ return escapeCommas(str, arr, opts);
74
+ case '\\.':
75
+ return escapeDots(str, arr, opts);
76
+ case '\/.':
77
+ return escapePaths(str, arr, opts);
78
+ case ' ':
79
+ return splitWhitespace(str);
80
+ case '{,}':
81
+ return exponential(str, opts, braces);
82
+ case '{}':
83
+ return emptyBraces(str, arr, opts);
84
+ case '\\{':
85
+ case '\\}':
86
+ return escapeBraces(str, arr, opts);
87
+ case '${':
88
+ if (!/\{[^{]+\{/.test(str)) {
89
+ return arr.concat(str);
90
+ } else {
91
+ es6 = true;
92
+ str = tokens.before(str, es6Regex());
93
+ }
94
+ }
95
+
96
+ if (!(braceRe instanceof RegExp)) {
97
+ braceRe = braceRegex();
98
+ }
99
+
100
+ var match = braceRe.exec(str);
101
+ if (match == null) {
102
+ return [str];
103
+ }
104
+
105
+ var outter = match[1];
106
+ var inner = match[2];
107
+ if (inner === '') { return [str]; }
108
+
109
+ var segs, segsLength;
110
+
111
+ if (inner.indexOf('..') !== -1) {
112
+ segs = expand(inner, opts, fn) || inner.split(',');
113
+ segsLength = segs.length;
114
+
115
+ } else if (inner[0] === '"' || inner[0] === '\'') {
116
+ return arr.concat(str.split(/['"]/).join(''));
117
+
118
+ } else {
119
+ segs = inner.split(',');
120
+ if (opts.makeRe) {
121
+ return braces(str.replace(outter, wrap(segs, '|')), opts);
122
+ }
123
+
124
+ segsLength = segs.length;
125
+ if (segsLength === 1 && opts.bash) {
126
+ segs[0] = wrap(segs[0], '\\');
127
+ }
128
+ }
129
+
130
+ var len = segs.length;
131
+ var i = 0, val;
132
+
133
+ while (len--) {
134
+ var path = segs[i++];
135
+
136
+ if (/(\.[^.\/])/.test(path)) {
137
+ if (segsLength > 1) {
138
+ return segs;
139
+ } else {
140
+ return [str];
141
+ }
142
+ }
143
+
144
+ val = splice(str, outter, path);
145
+
146
+ if (/\{[^{}]+?\}/.test(val)) {
147
+ arr = braces(val, arr, opts);
148
+ } else if (val !== '') {
149
+ if (opts.nodupes && arr.indexOf(val) !== -1) { continue; }
150
+ arr.push(es6 ? tokens.after(val) : val);
151
+ }
152
+ }
153
+
154
+ if (opts.strict) { return filter(arr, filterEmpty); }
155
+ return arr;
156
+ }
157
+
158
+ /**
159
+ * Expand exponential ranges
160
+ *
161
+ * `a{,}{,}` => ['a', 'a', 'a', 'a']
162
+ */
163
+
164
+ function exponential(str, options, fn) {
165
+ if (typeof options === 'function') {
166
+ fn = options;
167
+ options = null;
168
+ }
169
+
170
+ var opts = options || {};
171
+ var esc = '__ESC_EXP__';
172
+ var exp = 0;
173
+ var res;
174
+
175
+ var parts = str.split('{,}');
176
+ if (opts.nodupes) {
177
+ return fn(parts.join(''), opts);
178
+ }
179
+
180
+ exp = parts.length - 1;
181
+ res = fn(parts.join(esc), opts);
182
+ var len = res.length;
183
+ var arr = [];
184
+ var i = 0;
185
+
186
+ while (len--) {
187
+ var ele = res[i++];
188
+ var idx = ele.indexOf(esc);
189
+
190
+ if (idx === -1) {
191
+ arr.push(ele);
192
+
193
+ } else {
194
+ ele = ele.split('__ESC_EXP__').join('');
195
+ if (!!ele && opts.nodupes !== false) {
196
+ arr.push(ele);
197
+
198
+ } else {
199
+ var num = Math.pow(2, exp);
200
+ arr.push.apply(arr, repeat(ele, num));
201
+ }
202
+ }
203
+ }
204
+ return arr;
205
+ }
206
+
207
+ /**
208
+ * Wrap a value with parens, brackets or braces,
209
+ * based on the given character/separator.
210
+ *
211
+ * @param {String|Array} `val`
212
+ * @param {String} `ch`
213
+ * @return {String}
214
+ */
215
+
216
+ function wrap(val, ch) {
217
+ if (ch === '|') {
218
+ return '(' + val.join(ch) + ')';
219
+ }
220
+ if (ch === ',') {
221
+ return '{' + val.join(ch) + '}';
222
+ }
223
+ if (ch === '-') {
224
+ return '[' + val.join(ch) + ']';
225
+ }
226
+ if (ch === '\\') {
227
+ return '\\{' + val + '\\}';
228
+ }
229
+ }
230
+
231
+ /**
232
+ * Handle empty braces: `{}`
233
+ */
234
+
235
+ function emptyBraces(str, arr, opts) {
236
+ return braces(str.split('{}').join('\\{\\}'), arr, opts);
237
+ }
238
+
239
+ /**
240
+ * Filter out empty-ish values
241
+ */
242
+
243
+ function filterEmpty(ele) {
244
+ return !!ele && ele !== '\\';
245
+ }
246
+
247
+ /**
248
+ * Handle patterns with whitespace
249
+ */
250
+
251
+ function splitWhitespace(str) {
252
+ var segs = str.split(' ');
253
+ var len = segs.length;
254
+ var res = [];
255
+ var i = 0;
256
+
257
+ while (len--) {
258
+ res.push.apply(res, braces(segs[i++]));
259
+ }
260
+ return res;
261
+ }
262
+
263
+ /**
264
+ * Handle escaped braces: `\\{foo,bar}`
265
+ */
266
+
267
+ function escapeBraces(str, arr, opts) {
268
+ if (!/\{[^{]+\{/.test(str)) {
269
+ return arr.concat(str.split('\\').join(''));
270
+ } else {
271
+ str = str.split('\\{').join('__LT_BRACE__');
272
+ str = str.split('\\}').join('__RT_BRACE__');
273
+ return map(braces(str, arr, opts), function(ele) {
274
+ ele = ele.split('__LT_BRACE__').join('{');
275
+ return ele.split('__RT_BRACE__').join('}');
276
+ });
277
+ }
278
+ }
279
+
280
+ /**
281
+ * Handle escaped dots: `{1\\.2}`
282
+ */
283
+
284
+ function escapeDots(str, arr, opts) {
285
+ if (!/[^\\]\..+\\\./.test(str)) {
286
+ return arr.concat(str.split('\\').join(''));
287
+ } else {
288
+ str = str.split('\\.').join('__ESC_DOT__');
289
+ return map(braces(str, arr, opts), function(ele) {
290
+ return ele.split('__ESC_DOT__').join('.');
291
+ });
292
+ }
293
+ }
294
+
295
+ /**
296
+ * Handle escaped dots: `{1\\.2}`
297
+ */
298
+
299
+ function escapePaths(str, arr, opts) {
300
+ str = str.split('\/.').join('__ESC_PATH__');
301
+ return map(braces(str, arr, opts), function(ele) {
302
+ return ele.split('__ESC_PATH__').join('\/.');
303
+ });
304
+ }
305
+
306
+ /**
307
+ * Handle escaped commas: `{a\\,b}`
308
+ */
309
+
310
+ function escapeCommas(str, arr, opts) {
311
+ if (!/\w,/.test(str)) {
312
+ return arr.concat(str.split('\\').join(''));
313
+ } else {
314
+ str = str.split('\\,').join('__ESC_COMMA__');
315
+ return map(braces(str, arr, opts), function(ele) {
316
+ return ele.split('__ESC_COMMA__').join(',');
317
+ });
318
+ }
319
+ }
320
+
321
+ /**
322
+ * Regex for common patterns
323
+ */
324
+
325
+ function patternRegex() {
326
+ return /\${|( (?=[{,}])|(?=[{,}]) )|{}|{,}|\\,(?=.*[{}])|\/\.(?=.*[{}])|\\\.(?={)|\\{|\\}/;
327
+ }
328
+
329
+ /**
330
+ * Braces regex.
331
+ */
332
+
333
+ function braceRegex() {
334
+ return /.*(\\?\{([^}]+)\})/;
335
+ }
336
+
337
+ /**
338
+ * es6 delimiter regex.
339
+ */
340
+
341
+ function es6Regex() {
342
+ return /\$\{([^}]+)\}/;
343
+ }
344
+
345
+ var braceRe;
346
+ var patternRe;
347
+
348
+ /**
349
+ * Faster alternative to `String.replace()` when the
350
+ * index of the token to be replaces can't be supplied
351
+ */
352
+
353
+ function splice(str, token, replacement) {
354
+ var i = str.indexOf(token);
355
+ return str.substr(0, i) + replacement
356
+ + str.substr(i + token.length);
357
+ }
358
+
359
+ /**
360
+ * Fast array map
361
+ */
362
+
363
+ function map(arr, fn) {
364
+ if (arr == null) {
365
+ return [];
366
+ }
367
+
368
+ var len = arr.length;
369
+ var res = new Array(len);
370
+ var i = -1;
371
+
372
+ while (++i < len) {
373
+ res[i] = fn(arr[i], i, arr);
374
+ }
375
+
376
+ return res;
377
+ }
378
+
379
+ /**
380
+ * Fast array filter
381
+ */
382
+
383
+ function filter(arr, cb) {
384
+ if (arr == null) return [];
385
+ if (typeof cb !== 'function') {
386
+ throw new TypeError('braces: filter expects a callback function.');
387
+ }
388
+
389
+ var len = arr.length;
390
+ var res = arr.slice();
391
+ var i = 0;
392
+
393
+ while (len--) {
394
+ if (!cb(arr[len], i++)) {
395
+ res.splice(len, 1);
396
+ }
397
+ }
398
+ return res;
399
+ }