jass-vue 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }