decidim 0.27.4 → 0.27.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -16
  3. data/docs/modules/install/pages/manual.adoc +1 -1
  4. data/docs/modules/services/pages/maps.adoc +8 -0
  5. data/lib/decidim/version.rb +1 -1
  6. data/package-lock.json +7 -7
  7. data/packages/browserslist-config/package.json +1 -1
  8. data/packages/core/node_modules/uuid/AUTHORS +5 -0
  9. data/packages/core/node_modules/uuid/CHANGELOG.md +119 -0
  10. data/packages/{webpacker/node_modules/brace-expansion/LICENSE → core/node_modules/uuid/LICENSE.md} +2 -2
  11. data/packages/core/node_modules/uuid/README.md +276 -0
  12. data/packages/core/node_modules/uuid/bin/uuid +65 -0
  13. data/packages/core/node_modules/uuid/index.js +8 -0
  14. data/packages/core/node_modules/uuid/lib/bytesToUuid.js +26 -0
  15. data/packages/core/node_modules/uuid/lib/md5-browser.js +216 -0
  16. data/packages/core/node_modules/uuid/lib/md5.js +25 -0
  17. data/packages/core/node_modules/uuid/lib/rng-browser.js +34 -0
  18. data/packages/core/node_modules/uuid/lib/rng.js +8 -0
  19. data/packages/core/node_modules/uuid/lib/sha1-browser.js +89 -0
  20. data/packages/core/node_modules/uuid/lib/sha1.js +25 -0
  21. data/packages/core/node_modules/uuid/lib/v35.js +57 -0
  22. data/packages/core/node_modules/uuid/package.json +49 -0
  23. data/packages/core/node_modules/uuid/v1.js +109 -0
  24. data/packages/core/node_modules/uuid/v3.js +4 -0
  25. data/packages/core/node_modules/uuid/v4.js +29 -0
  26. data/packages/core/node_modules/uuid/v5.js +3 -0
  27. data/packages/core/package-lock.json +347 -3079
  28. data/packages/core/package.json +1 -1
  29. data/packages/dev/package.json +1 -1
  30. data/packages/elections/package.json +1 -1
  31. data/packages/eslint-config/package-lock.json +4797 -0
  32. data/packages/eslint-config/package.json +1 -1
  33. data/packages/stylelint-config/package.json +1 -1
  34. data/packages/webpacker/package.json +1 -1
  35. metadata +63 -234
  36. data/lib/decidim/release_manager.rb.new +0 -43
  37. data/packages/core/node_modules/diff/CONTRIBUTING.md +0 -39
  38. data/packages/core/node_modules/diff/LICENSE +0 -31
  39. data/packages/core/node_modules/diff/README.md +0 -211
  40. data/packages/core/node_modules/diff/dist/diff.js +0 -1627
  41. data/packages/core/node_modules/diff/dist/diff.min.js +0 -38
  42. data/packages/core/node_modules/diff/lib/convert/dmp.js +0 -32
  43. data/packages/core/node_modules/diff/lib/convert/xml.js +0 -42
  44. data/packages/core/node_modules/diff/lib/diff/array.js +0 -45
  45. data/packages/core/node_modules/diff/lib/diff/base.js +0 -307
  46. data/packages/core/node_modules/diff/lib/diff/character.js +0 -37
  47. data/packages/core/node_modules/diff/lib/diff/css.js +0 -41
  48. data/packages/core/node_modules/diff/lib/diff/json.js +0 -163
  49. data/packages/core/node_modules/diff/lib/diff/line.js +0 -89
  50. data/packages/core/node_modules/diff/lib/diff/sentence.js +0 -41
  51. data/packages/core/node_modules/diff/lib/diff/word.js +0 -108
  52. data/packages/core/node_modules/diff/lib/index.es6.js +0 -1561
  53. data/packages/core/node_modules/diff/lib/index.js +0 -216
  54. data/packages/core/node_modules/diff/lib/index.mjs +0 -1561
  55. data/packages/core/node_modules/diff/lib/patch/apply.js +0 -238
  56. data/packages/core/node_modules/diff/lib/patch/create.js +0 -272
  57. data/packages/core/node_modules/diff/lib/patch/merge.js +0 -613
  58. data/packages/core/node_modules/diff/lib/patch/parse.js +0 -167
  59. data/packages/core/node_modules/diff/lib/util/array.js +0 -32
  60. data/packages/core/node_modules/diff/lib/util/distance-iterator.js +0 -57
  61. data/packages/core/node_modules/diff/lib/util/params.js +0 -24
  62. data/packages/core/node_modules/diff/package.json +0 -87
  63. data/packages/core/node_modules/diff/release-notes.md +0 -309
  64. data/packages/core/node_modules/diff/runtime.js +0 -3
  65. data/packages/webpacker/node_modules/argparse/CHANGELOG.md +0 -216
  66. data/packages/webpacker/node_modules/argparse/LICENSE +0 -254
  67. data/packages/webpacker/node_modules/argparse/README.md +0 -84
  68. data/packages/webpacker/node_modules/argparse/argparse.js +0 -3707
  69. data/packages/webpacker/node_modules/argparse/lib/sub.js +0 -67
  70. data/packages/webpacker/node_modules/argparse/lib/textwrap.js +0 -440
  71. data/packages/webpacker/node_modules/argparse/package.json +0 -31
  72. data/packages/webpacker/node_modules/brace-expansion/README.md +0 -135
  73. data/packages/webpacker/node_modules/brace-expansion/index.js +0 -203
  74. data/packages/webpacker/node_modules/brace-expansion/package.json +0 -46
  75. data/packages/webpacker/node_modules/glob/LICENSE +0 -15
  76. data/packages/webpacker/node_modules/glob/README.md +0 -1214
  77. data/packages/webpacker/node_modules/glob/dist/cjs/package.json +0 -4
  78. data/packages/webpacker/node_modules/glob/dist/cjs/src/bin.d.ts +0 -3
  79. data/packages/webpacker/node_modules/glob/dist/cjs/src/bin.d.ts.map +0 -1
  80. data/packages/webpacker/node_modules/glob/dist/cjs/src/bin.js +0 -270
  81. data/packages/webpacker/node_modules/glob/dist/cjs/src/bin.js.map +0 -1
  82. data/packages/webpacker/node_modules/glob/dist/cjs/src/glob.d.ts +0 -344
  83. data/packages/webpacker/node_modules/glob/dist/cjs/src/glob.d.ts.map +0 -1
  84. data/packages/webpacker/node_modules/glob/dist/cjs/src/glob.js +0 -238
  85. data/packages/webpacker/node_modules/glob/dist/cjs/src/glob.js.map +0 -1
  86. data/packages/webpacker/node_modules/glob/dist/cjs/src/has-magic.d.ts +0 -14
  87. data/packages/webpacker/node_modules/glob/dist/cjs/src/has-magic.d.ts.map +0 -1
  88. data/packages/webpacker/node_modules/glob/dist/cjs/src/has-magic.js +0 -27
  89. data/packages/webpacker/node_modules/glob/dist/cjs/src/has-magic.js.map +0 -1
  90. data/packages/webpacker/node_modules/glob/dist/cjs/src/ignore.d.ts +0 -20
  91. data/packages/webpacker/node_modules/glob/dist/cjs/src/ignore.d.ts.map +0 -1
  92. data/packages/webpacker/node_modules/glob/dist/cjs/src/ignore.js +0 -103
  93. data/packages/webpacker/node_modules/glob/dist/cjs/src/ignore.js.map +0 -1
  94. data/packages/webpacker/node_modules/glob/dist/cjs/src/index.d.ts +0 -95
  95. data/packages/webpacker/node_modules/glob/dist/cjs/src/index.d.ts.map +0 -1
  96. data/packages/webpacker/node_modules/glob/dist/cjs/src/index.js +0 -68
  97. data/packages/webpacker/node_modules/glob/dist/cjs/src/index.js.map +0 -1
  98. data/packages/webpacker/node_modules/glob/dist/cjs/src/pattern.d.ts +0 -77
  99. data/packages/webpacker/node_modules/glob/dist/cjs/src/pattern.d.ts.map +0 -1
  100. data/packages/webpacker/node_modules/glob/dist/cjs/src/pattern.js +0 -219
  101. data/packages/webpacker/node_modules/glob/dist/cjs/src/pattern.js.map +0 -1
  102. data/packages/webpacker/node_modules/glob/dist/cjs/src/processor.d.ts +0 -59
  103. data/packages/webpacker/node_modules/glob/dist/cjs/src/processor.d.ts.map +0 -1
  104. data/packages/webpacker/node_modules/glob/dist/cjs/src/processor.js +0 -309
  105. data/packages/webpacker/node_modules/glob/dist/cjs/src/processor.js.map +0 -1
  106. data/packages/webpacker/node_modules/glob/dist/cjs/src/walker.d.ts +0 -96
  107. data/packages/webpacker/node_modules/glob/dist/cjs/src/walker.d.ts.map +0 -1
  108. data/packages/webpacker/node_modules/glob/dist/cjs/src/walker.js +0 -358
  109. data/packages/webpacker/node_modules/glob/dist/cjs/src/walker.js.map +0 -1
  110. data/packages/webpacker/node_modules/glob/dist/mjs/glob.d.ts +0 -344
  111. data/packages/webpacker/node_modules/glob/dist/mjs/glob.d.ts.map +0 -1
  112. data/packages/webpacker/node_modules/glob/dist/mjs/glob.js +0 -234
  113. data/packages/webpacker/node_modules/glob/dist/mjs/glob.js.map +0 -1
  114. data/packages/webpacker/node_modules/glob/dist/mjs/has-magic.d.ts +0 -14
  115. data/packages/webpacker/node_modules/glob/dist/mjs/has-magic.d.ts.map +0 -1
  116. data/packages/webpacker/node_modules/glob/dist/mjs/has-magic.js +0 -23
  117. data/packages/webpacker/node_modules/glob/dist/mjs/has-magic.js.map +0 -1
  118. data/packages/webpacker/node_modules/glob/dist/mjs/ignore.d.ts +0 -20
  119. data/packages/webpacker/node_modules/glob/dist/mjs/ignore.d.ts.map +0 -1
  120. data/packages/webpacker/node_modules/glob/dist/mjs/ignore.js +0 -99
  121. data/packages/webpacker/node_modules/glob/dist/mjs/ignore.js.map +0 -1
  122. data/packages/webpacker/node_modules/glob/dist/mjs/index.d.ts +0 -95
  123. data/packages/webpacker/node_modules/glob/dist/mjs/index.d.ts.map +0 -1
  124. data/packages/webpacker/node_modules/glob/dist/mjs/index.js +0 -56
  125. data/packages/webpacker/node_modules/glob/dist/mjs/index.js.map +0 -1
  126. data/packages/webpacker/node_modules/glob/dist/mjs/package.json +0 -4
  127. data/packages/webpacker/node_modules/glob/dist/mjs/pattern.d.ts +0 -77
  128. data/packages/webpacker/node_modules/glob/dist/mjs/pattern.d.ts.map +0 -1
  129. data/packages/webpacker/node_modules/glob/dist/mjs/pattern.js +0 -215
  130. data/packages/webpacker/node_modules/glob/dist/mjs/pattern.js.map +0 -1
  131. data/packages/webpacker/node_modules/glob/dist/mjs/processor.d.ts +0 -59
  132. data/packages/webpacker/node_modules/glob/dist/mjs/processor.d.ts.map +0 -1
  133. data/packages/webpacker/node_modules/glob/dist/mjs/processor.js +0 -302
  134. data/packages/webpacker/node_modules/glob/dist/mjs/processor.js.map +0 -1
  135. data/packages/webpacker/node_modules/glob/dist/mjs/walker.d.ts +0 -96
  136. data/packages/webpacker/node_modules/glob/dist/mjs/walker.d.ts.map +0 -1
  137. data/packages/webpacker/node_modules/glob/dist/mjs/walker.js +0 -352
  138. data/packages/webpacker/node_modules/glob/dist/mjs/walker.js.map +0 -1
  139. data/packages/webpacker/node_modules/glob/package.json +0 -98
  140. data/packages/webpacker/node_modules/js-yaml/CHANGELOG.md +0 -616
  141. data/packages/webpacker/node_modules/js-yaml/LICENSE +0 -21
  142. data/packages/webpacker/node_modules/js-yaml/README.md +0 -246
  143. data/packages/webpacker/node_modules/js-yaml/bin/js-yaml.js +0 -126
  144. data/packages/webpacker/node_modules/js-yaml/dist/js-yaml.js +0 -3874
  145. data/packages/webpacker/node_modules/js-yaml/dist/js-yaml.min.js +0 -2
  146. data/packages/webpacker/node_modules/js-yaml/dist/js-yaml.mjs +0 -3851
  147. data/packages/webpacker/node_modules/js-yaml/index.js +0 -47
  148. data/packages/webpacker/node_modules/js-yaml/lib/common.js +0 -59
  149. data/packages/webpacker/node_modules/js-yaml/lib/dumper.js +0 -965
  150. data/packages/webpacker/node_modules/js-yaml/lib/exception.js +0 -55
  151. data/packages/webpacker/node_modules/js-yaml/lib/loader.js +0 -1727
  152. data/packages/webpacker/node_modules/js-yaml/lib/schema/core.js +0 -11
  153. data/packages/webpacker/node_modules/js-yaml/lib/schema/default.js +0 -22
  154. data/packages/webpacker/node_modules/js-yaml/lib/schema/failsafe.js +0 -17
  155. data/packages/webpacker/node_modules/js-yaml/lib/schema/json.js +0 -19
  156. data/packages/webpacker/node_modules/js-yaml/lib/schema.js +0 -121
  157. data/packages/webpacker/node_modules/js-yaml/lib/snippet.js +0 -101
  158. data/packages/webpacker/node_modules/js-yaml/lib/type/binary.js +0 -125
  159. data/packages/webpacker/node_modules/js-yaml/lib/type/bool.js +0 -35
  160. data/packages/webpacker/node_modules/js-yaml/lib/type/float.js +0 -97
  161. data/packages/webpacker/node_modules/js-yaml/lib/type/int.js +0 -156
  162. data/packages/webpacker/node_modules/js-yaml/lib/type/map.js +0 -8
  163. data/packages/webpacker/node_modules/js-yaml/lib/type/merge.js +0 -12
  164. data/packages/webpacker/node_modules/js-yaml/lib/type/null.js +0 -35
  165. data/packages/webpacker/node_modules/js-yaml/lib/type/omap.js +0 -44
  166. data/packages/webpacker/node_modules/js-yaml/lib/type/pairs.js +0 -53
  167. data/packages/webpacker/node_modules/js-yaml/lib/type/seq.js +0 -8
  168. data/packages/webpacker/node_modules/js-yaml/lib/type/set.js +0 -29
  169. data/packages/webpacker/node_modules/js-yaml/lib/type/str.js +0 -8
  170. data/packages/webpacker/node_modules/js-yaml/lib/type/timestamp.js +0 -88
  171. data/packages/webpacker/node_modules/js-yaml/lib/type.js +0 -66
  172. data/packages/webpacker/node_modules/js-yaml/package.json +0 -66
  173. data/packages/webpacker/node_modules/minimatch/LICENSE +0 -15
  174. data/packages/webpacker/node_modules/minimatch/README.md +0 -454
  175. data/packages/webpacker/node_modules/minimatch/dist/cjs/assert-valid-pattern.d.ts +0 -2
  176. data/packages/webpacker/node_modules/minimatch/dist/cjs/assert-valid-pattern.d.ts.map +0 -1
  177. data/packages/webpacker/node_modules/minimatch/dist/cjs/assert-valid-pattern.js +0 -14
  178. data/packages/webpacker/node_modules/minimatch/dist/cjs/assert-valid-pattern.js.map +0 -1
  179. data/packages/webpacker/node_modules/minimatch/dist/cjs/ast.d.ts +0 -19
  180. data/packages/webpacker/node_modules/minimatch/dist/cjs/ast.d.ts.map +0 -1
  181. data/packages/webpacker/node_modules/minimatch/dist/cjs/ast.js +0 -589
  182. data/packages/webpacker/node_modules/minimatch/dist/cjs/ast.js.map +0 -1
  183. data/packages/webpacker/node_modules/minimatch/dist/cjs/brace-expressions.d.ts +0 -8
  184. data/packages/webpacker/node_modules/minimatch/dist/cjs/brace-expressions.d.ts.map +0 -1
  185. data/packages/webpacker/node_modules/minimatch/dist/cjs/brace-expressions.js +0 -152
  186. data/packages/webpacker/node_modules/minimatch/dist/cjs/brace-expressions.js.map +0 -1
  187. data/packages/webpacker/node_modules/minimatch/dist/cjs/escape.d.ts +0 -12
  188. data/packages/webpacker/node_modules/minimatch/dist/cjs/escape.d.ts.map +0 -1
  189. data/packages/webpacker/node_modules/minimatch/dist/cjs/escape.js +0 -22
  190. data/packages/webpacker/node_modules/minimatch/dist/cjs/escape.js.map +0 -1
  191. data/packages/webpacker/node_modules/minimatch/dist/cjs/index.d.ts +0 -94
  192. data/packages/webpacker/node_modules/minimatch/dist/cjs/index.d.ts.map +0 -1
  193. data/packages/webpacker/node_modules/minimatch/dist/cjs/index.js +0 -1011
  194. data/packages/webpacker/node_modules/minimatch/dist/cjs/index.js.map +0 -1
  195. data/packages/webpacker/node_modules/minimatch/dist/cjs/package.json +0 -3
  196. data/packages/webpacker/node_modules/minimatch/dist/cjs/unescape.d.ts +0 -17
  197. data/packages/webpacker/node_modules/minimatch/dist/cjs/unescape.d.ts.map +0 -1
  198. data/packages/webpacker/node_modules/minimatch/dist/cjs/unescape.js +0 -24
  199. data/packages/webpacker/node_modules/minimatch/dist/cjs/unescape.js.map +0 -1
  200. data/packages/webpacker/node_modules/minimatch/dist/mjs/assert-valid-pattern.d.ts +0 -2
  201. data/packages/webpacker/node_modules/minimatch/dist/mjs/assert-valid-pattern.d.ts.map +0 -1
  202. data/packages/webpacker/node_modules/minimatch/dist/mjs/assert-valid-pattern.js +0 -10
  203. data/packages/webpacker/node_modules/minimatch/dist/mjs/assert-valid-pattern.js.map +0 -1
  204. data/packages/webpacker/node_modules/minimatch/dist/mjs/ast.d.ts +0 -19
  205. data/packages/webpacker/node_modules/minimatch/dist/mjs/ast.d.ts.map +0 -1
  206. data/packages/webpacker/node_modules/minimatch/dist/mjs/ast.js +0 -585
  207. data/packages/webpacker/node_modules/minimatch/dist/mjs/ast.js.map +0 -1
  208. data/packages/webpacker/node_modules/minimatch/dist/mjs/brace-expressions.d.ts +0 -8
  209. data/packages/webpacker/node_modules/minimatch/dist/mjs/brace-expressions.d.ts.map +0 -1
  210. data/packages/webpacker/node_modules/minimatch/dist/mjs/brace-expressions.js +0 -148
  211. data/packages/webpacker/node_modules/minimatch/dist/mjs/brace-expressions.js.map +0 -1
  212. data/packages/webpacker/node_modules/minimatch/dist/mjs/escape.d.ts +0 -12
  213. data/packages/webpacker/node_modules/minimatch/dist/mjs/escape.d.ts.map +0 -1
  214. data/packages/webpacker/node_modules/minimatch/dist/mjs/escape.js +0 -18
  215. data/packages/webpacker/node_modules/minimatch/dist/mjs/escape.js.map +0 -1
  216. data/packages/webpacker/node_modules/minimatch/dist/mjs/index.d.ts +0 -94
  217. data/packages/webpacker/node_modules/minimatch/dist/mjs/index.d.ts.map +0 -1
  218. data/packages/webpacker/node_modules/minimatch/dist/mjs/index.js +0 -995
  219. data/packages/webpacker/node_modules/minimatch/dist/mjs/index.js.map +0 -1
  220. data/packages/webpacker/node_modules/minimatch/dist/mjs/package.json +0 -3
  221. data/packages/webpacker/node_modules/minimatch/dist/mjs/unescape.d.ts +0 -17
  222. data/packages/webpacker/node_modules/minimatch/dist/mjs/unescape.d.ts.map +0 -1
  223. data/packages/webpacker/node_modules/minimatch/dist/mjs/unescape.js +0 -20
  224. data/packages/webpacker/node_modules/minimatch/dist/mjs/unescape.js.map +0 -1
  225. data/packages/webpacker/node_modules/minimatch/package.json +0 -86
@@ -1,589 +0,0 @@
1
- "use strict";
2
- // parse a single path portion
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.AST = void 0;
5
- const brace_expressions_js_1 = require("./brace-expressions.js");
6
- const unescape_js_1 = require("./unescape.js");
7
- const types = new Set(['!', '?', '+', '*', '@']);
8
- const isExtglobType = (c) => types.has(c);
9
- // Patterns that get prepended to bind to the start of either the
10
- // entire string, or just a single path portion, to prevent dots
11
- // and/or traversal patterns, when needed.
12
- // Exts don't need the ^ or / bit, because the root binds that already.
13
- const startNoTraversal = '(?!(?:^|/)\\.\\.?(?:$|/))';
14
- const startNoDot = '(?!\\.)';
15
- // characters that indicate a start of pattern needs the "no dots" bit,
16
- // because a dot *might* be matched. ( is not in the list, because in
17
- // the case of a child extglob, it will handle the prevention itself.
18
- const addPatternStart = new Set(['[', '.']);
19
- // cases where traversal is A-OK, no dot prevention needed
20
- const justDots = new Set(['..', '.']);
21
- const reSpecials = new Set('().*{}+?[]^$\\!');
22
- const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
23
- // any single thing other than /
24
- const qmark = '[^/]';
25
- // * => any number of characters
26
- const star = qmark + '*?';
27
- // use + when we need to ensure that *something* matches, because the * is
28
- // the only thing in the path portion.
29
- const starNoEmpty = qmark + '+?';
30
- // remove the \ chars that we added if we end up doing a nonmagic compare
31
- // const deslash = (s: string) => s.replace(/\\(.)/g, '$1')
32
- class AST {
33
- type;
34
- #root;
35
- #hasMagic;
36
- #uflag = false;
37
- #parts = [];
38
- #parent;
39
- #parentIndex;
40
- #negs;
41
- #filledNegs = false;
42
- #options;
43
- #toString;
44
- // set to true if it's an extglob with no children
45
- // (which really means one child of '')
46
- #emptyExt = false;
47
- constructor(type, parent, options = {}) {
48
- this.type = type;
49
- // extglobs are inherently magical
50
- if (type)
51
- this.#hasMagic = true;
52
- this.#parent = parent;
53
- this.#root = this.#parent ? this.#parent.#root : this;
54
- this.#options = this.#root === this ? options : this.#root.#options;
55
- this.#negs = this.#root === this ? [] : this.#root.#negs;
56
- if (type === '!' && !this.#root.#filledNegs)
57
- this.#negs.push(this);
58
- this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
59
- }
60
- get hasMagic() {
61
- /* c8 ignore start */
62
- if (this.#hasMagic !== undefined)
63
- return this.#hasMagic;
64
- /* c8 ignore stop */
65
- for (const p of this.#parts) {
66
- if (typeof p === 'string')
67
- continue;
68
- if (p.type || p.hasMagic)
69
- return (this.#hasMagic = true);
70
- }
71
- // note: will be undefined until we generate the regexp src and find out
72
- return this.#hasMagic;
73
- }
74
- // reconstructs the pattern
75
- toString() {
76
- if (this.#toString !== undefined)
77
- return this.#toString;
78
- if (!this.type) {
79
- return (this.#toString = this.#parts.map(p => String(p)).join(''));
80
- }
81
- else {
82
- return (this.#toString =
83
- this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');
84
- }
85
- }
86
- #fillNegs() {
87
- /* c8 ignore start */
88
- if (this !== this.#root)
89
- throw new Error('should only call on root');
90
- if (this.#filledNegs)
91
- return this;
92
- /* c8 ignore stop */
93
- // call toString() once to fill this out
94
- this.toString();
95
- this.#filledNegs = true;
96
- let n;
97
- while ((n = this.#negs.pop())) {
98
- if (n.type !== '!')
99
- continue;
100
- // walk up the tree, appending everthing that comes AFTER parentIndex
101
- let p = n;
102
- let pp = p.#parent;
103
- while (pp) {
104
- for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
105
- for (const part of n.#parts) {
106
- /* c8 ignore start */
107
- if (typeof part === 'string') {
108
- throw new Error('string part in extglob AST??');
109
- }
110
- /* c8 ignore stop */
111
- part.copyIn(pp.#parts[i]);
112
- }
113
- }
114
- p = pp;
115
- pp = p.#parent;
116
- }
117
- }
118
- return this;
119
- }
120
- push(...parts) {
121
- for (const p of parts) {
122
- if (p === '')
123
- continue;
124
- /* c8 ignore start */
125
- if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {
126
- throw new Error('invalid part: ' + p);
127
- }
128
- /* c8 ignore stop */
129
- this.#parts.push(p);
130
- }
131
- }
132
- toJSON() {
133
- const ret = this.type === null
134
- ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))
135
- : [this.type, ...this.#parts.map(p => p.toJSON())];
136
- if (this.isStart() && !this.type)
137
- ret.unshift([]);
138
- if (this.isEnd() &&
139
- (this === this.#root ||
140
- (this.#root.#filledNegs && this.#parent?.type === '!'))) {
141
- ret.push({});
142
- }
143
- return ret;
144
- }
145
- isStart() {
146
- if (this.#root === this)
147
- return true;
148
- // if (this.type) return !!this.#parent?.isStart()
149
- if (!this.#parent?.isStart())
150
- return false;
151
- if (this.#parentIndex === 0)
152
- return true;
153
- // if everything AHEAD of this is a negation, then it's still the "start"
154
- const p = this.#parent;
155
- for (let i = 0; i < this.#parentIndex; i++) {
156
- const pp = p.#parts[i];
157
- if (!(pp instanceof AST && pp.type === '!')) {
158
- return false;
159
- }
160
- }
161
- return true;
162
- }
163
- isEnd() {
164
- if (this.#root === this)
165
- return true;
166
- if (this.#parent?.type === '!')
167
- return true;
168
- if (!this.#parent?.isEnd())
169
- return false;
170
- if (!this.type)
171
- return this.#parent?.isEnd();
172
- // if not root, it'll always have a parent
173
- /* c8 ignore start */
174
- const pl = this.#parent ? this.#parent.#parts.length : 0;
175
- /* c8 ignore stop */
176
- return this.#parentIndex === pl - 1;
177
- }
178
- copyIn(part) {
179
- if (typeof part === 'string')
180
- this.push(part);
181
- else
182
- this.push(part.clone(this));
183
- }
184
- clone(parent) {
185
- const c = new AST(this.type, parent);
186
- for (const p of this.#parts) {
187
- c.copyIn(p);
188
- }
189
- return c;
190
- }
191
- static #parseAST(str, ast, pos, opt) {
192
- let escaping = false;
193
- let inBrace = false;
194
- let braceStart = -1;
195
- let braceNeg = false;
196
- if (ast.type === null) {
197
- // outside of a extglob, append until we find a start
198
- let i = pos;
199
- let acc = '';
200
- while (i < str.length) {
201
- const c = str.charAt(i++);
202
- // still accumulate escapes at this point, but we do ignore
203
- // starts that are escaped
204
- if (escaping || c === '\\') {
205
- escaping = !escaping;
206
- acc += c;
207
- continue;
208
- }
209
- if (inBrace) {
210
- if (i === braceStart + 1) {
211
- if (c === '^' || c === '!') {
212
- braceNeg = true;
213
- }
214
- }
215
- else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
216
- inBrace = false;
217
- }
218
- acc += c;
219
- continue;
220
- }
221
- else if (c === '[') {
222
- inBrace = true;
223
- braceStart = i;
224
- braceNeg = false;
225
- acc += c;
226
- continue;
227
- }
228
- if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {
229
- ast.push(acc);
230
- acc = '';
231
- const ext = new AST(c, ast);
232
- i = AST.#parseAST(str, ext, i, opt);
233
- ast.push(ext);
234
- continue;
235
- }
236
- acc += c;
237
- }
238
- ast.push(acc);
239
- return i;
240
- }
241
- // some kind of extglob, pos is at the (
242
- // find the next | or )
243
- let i = pos + 1;
244
- let part = new AST(null, ast);
245
- const parts = [];
246
- let acc = '';
247
- while (i < str.length) {
248
- const c = str.charAt(i++);
249
- // still accumulate escapes at this point, but we do ignore
250
- // starts that are escaped
251
- if (escaping || c === '\\') {
252
- escaping = !escaping;
253
- acc += c;
254
- continue;
255
- }
256
- if (inBrace) {
257
- if (i === braceStart + 1) {
258
- if (c === '^' || c === '!') {
259
- braceNeg = true;
260
- }
261
- }
262
- else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
263
- inBrace = false;
264
- }
265
- acc += c;
266
- continue;
267
- }
268
- else if (c === '[') {
269
- inBrace = true;
270
- braceStart = i;
271
- braceNeg = false;
272
- acc += c;
273
- continue;
274
- }
275
- if (isExtglobType(c) && str.charAt(i) === '(') {
276
- part.push(acc);
277
- acc = '';
278
- const ext = new AST(c, part);
279
- part.push(ext);
280
- i = AST.#parseAST(str, ext, i, opt);
281
- continue;
282
- }
283
- if (c === '|') {
284
- part.push(acc);
285
- acc = '';
286
- parts.push(part);
287
- part = new AST(null, ast);
288
- continue;
289
- }
290
- if (c === ')') {
291
- if (acc === '' && ast.#parts.length === 0) {
292
- ast.#emptyExt = true;
293
- }
294
- part.push(acc);
295
- acc = '';
296
- ast.push(...parts, part);
297
- return i;
298
- }
299
- acc += c;
300
- }
301
- // unfinished extglob
302
- // if we got here, it was a malformed extglob! not an extglob, but
303
- // maybe something else in there.
304
- ast.type = null;
305
- ast.#hasMagic = undefined;
306
- ast.#parts = [str.substring(pos - 1)];
307
- return i;
308
- }
309
- static fromGlob(pattern, options = {}) {
310
- const ast = new AST(null, undefined, options);
311
- AST.#parseAST(pattern, ast, 0, options);
312
- return ast;
313
- }
314
- // returns the regular expression if there's magic, or the unescaped
315
- // string if not.
316
- toMMPattern() {
317
- // should only be called on root
318
- /* c8 ignore start */
319
- if (this !== this.#root)
320
- return this.#root.toMMPattern();
321
- /* c8 ignore stop */
322
- const glob = this.toString();
323
- const [re, body, hasMagic, uflag] = this.toRegExpSource();
324
- // if we're in nocase mode, and not nocaseMagicOnly, then we do
325
- // still need a regular expression if we have to case-insensitively
326
- // match capital/lowercase characters.
327
- const anyMagic = hasMagic ||
328
- this.#hasMagic ||
329
- (this.#options.nocase &&
330
- !this.#options.nocaseMagicOnly &&
331
- glob.toUpperCase() !== glob.toLowerCase());
332
- if (!anyMagic) {
333
- return body;
334
- }
335
- const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');
336
- return Object.assign(new RegExp(`^${re}$`, flags), {
337
- _src: re,
338
- _glob: glob,
339
- });
340
- }
341
- // returns the string match, the regexp source, whether there's magic
342
- // in the regexp (so a regular expression is required) and whether or
343
- // not the uflag is needed for the regular expression (for posix classes)
344
- // TODO: instead of injecting the start/end at this point, just return
345
- // the BODY of the regexp, along with the start/end portions suitable
346
- // for binding the start/end in either a joined full-path makeRe context
347
- // (where we bind to (^|/), or a standalone matchPart context (where
348
- // we bind to ^, and not /). Otherwise slashes get duped!
349
- //
350
- // In part-matching mode, the start is:
351
- // - if not isStart: nothing
352
- // - if traversal possible, but not allowed: ^(?!\.\.?$)
353
- // - if dots allowed or not possible: ^
354
- // - if dots possible and not allowed: ^(?!\.)
355
- // end is:
356
- // - if not isEnd(): nothing
357
- // - else: $
358
- //
359
- // In full-path matching mode, we put the slash at the START of the
360
- // pattern, so start is:
361
- // - if first pattern: same as part-matching mode
362
- // - if not isStart(): nothing
363
- // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
364
- // - if dots allowed or not possible: /
365
- // - if dots possible and not allowed: /(?!\.)
366
- // end is:
367
- // - if last pattern, same as part-matching mode
368
- // - else nothing
369
- //
370
- // Always put the (?:$|/) on negated tails, though, because that has to be
371
- // there to bind the end of the negated pattern portion, and it's easier to
372
- // just stick it in now rather than try to inject it later in the middle of
373
- // the pattern.
374
- //
375
- // We can just always return the same end, and leave it up to the caller
376
- // to know whether it's going to be used joined or in parts.
377
- // And, if the start is adjusted slightly, can do the same there:
378
- // - if not isStart: nothing
379
- // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
380
- // - if dots allowed or not possible: (?:/|^)
381
- // - if dots possible and not allowed: (?:/|^)(?!\.)
382
- //
383
- // But it's better to have a simpler binding without a conditional, for
384
- // performance, so probably better to return both start options.
385
- //
386
- // Then the caller just ignores the end if it's not the first pattern,
387
- // and the start always gets applied.
388
- //
389
- // But that's always going to be $ if it's the ending pattern, or nothing,
390
- // so the caller can just attach $ at the end of the pattern when building.
391
- //
392
- // So the todo is:
393
- // - better detect what kind of start is needed
394
- // - return both flavors of starting pattern
395
- // - attach $ at the end of the pattern when creating the actual RegExp
396
- //
397
- // Ah, but wait, no, that all only applies to the root when the first pattern
398
- // is not an extglob. If the first pattern IS an extglob, then we need all
399
- // that dot prevention biz to live in the extglob portions, because eg
400
- // +(*|.x*) can match .xy but not .yx.
401
- //
402
- // So, return the two flavors if it's #root and the first child is not an
403
- // AST, otherwise leave it to the child AST to handle it, and there,
404
- // use the (?:^|/) style of start binding.
405
- //
406
- // Even simplified further:
407
- // - Since the start for a join is eg /(?!\.) and the start for a part
408
- // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
409
- // or start or whatever) and prepend ^ or / at the Regexp construction.
410
- toRegExpSource(allowDot) {
411
- const dot = allowDot ?? !!this.#options.dot;
412
- if (this.#root === this)
413
- this.#fillNegs();
414
- if (!this.type) {
415
- const noEmpty = this.isStart() && this.isEnd();
416
- const src = this.#parts
417
- .map(p => {
418
- const [re, _, hasMagic, uflag] = typeof p === 'string'
419
- ? AST.#parseGlob(p, this.#hasMagic, noEmpty)
420
- : p.toRegExpSource(allowDot);
421
- this.#hasMagic = this.#hasMagic || hasMagic;
422
- this.#uflag = this.#uflag || uflag;
423
- return re;
424
- })
425
- .join('');
426
- let start = '';
427
- if (this.isStart()) {
428
- if (typeof this.#parts[0] === 'string') {
429
- // this is the string that will match the start of the pattern,
430
- // so we need to protect against dots and such.
431
- // '.' and '..' cannot match unless the pattern is that exactly,
432
- // even if it starts with . or dot:true is set.
433
- const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
434
- if (!dotTravAllowed) {
435
- const aps = addPatternStart;
436
- // check if we have a possibility of matching . or ..,
437
- // and prevent that.
438
- const needNoTrav =
439
- // dots are allowed, and the pattern starts with [ or .
440
- (dot && aps.has(src.charAt(0))) ||
441
- // the pattern starts with \., and then [ or .
442
- (src.startsWith('\\.') && aps.has(src.charAt(2))) ||
443
- // the pattern starts with \.\., and then [ or .
444
- (src.startsWith('\\.\\.') && aps.has(src.charAt(4)));
445
- // no need to prevent dots if it can't match a dot, or if a
446
- // sub-pattern will be preventing it anyway.
447
- const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
448
- start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : '';
449
- }
450
- }
451
- }
452
- // append the "end of path portion" pattern to negation tails
453
- let end = '';
454
- if (this.isEnd() &&
455
- this.#root.#filledNegs &&
456
- this.#parent?.type === '!') {
457
- end = '(?:$|\\/)';
458
- }
459
- const final = start + src + end;
460
- return [
461
- final,
462
- (0, unescape_js_1.unescape)(src),
463
- (this.#hasMagic = !!this.#hasMagic),
464
- this.#uflag,
465
- ];
466
- }
467
- // We need to calculate the body *twice* if it's a repeat pattern
468
- // at the start, once in nodot mode, then again in dot mode, so a
469
- // pattern like *(?) can match 'x.y'
470
- const repeated = this.type === '*' || this.type === '+';
471
- // some kind of extglob
472
- const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
473
- let body = this.#partsToRegExp(dot);
474
- if (this.isStart() && this.isEnd() && !body && this.type !== '!') {
475
- // invalid extglob, has to at least be *something* present, if it's
476
- // the entire path portion.
477
- const s = this.toString();
478
- this.#parts = [s];
479
- this.type = null;
480
- this.#hasMagic = undefined;
481
- return [s, (0, unescape_js_1.unescape)(this.toString()), false, false];
482
- }
483
- // XXX abstract out this map method
484
- let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot
485
- ? ''
486
- : this.#partsToRegExp(true);
487
- if (bodyDotAllowed === body) {
488
- bodyDotAllowed = '';
489
- }
490
- if (bodyDotAllowed) {
491
- body = `(?:${body})(?:${bodyDotAllowed})*?`;
492
- }
493
- // an empty !() is exactly equivalent to a starNoEmpty
494
- let final = '';
495
- if (this.type === '!' && this.#emptyExt) {
496
- final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;
497
- }
498
- else {
499
- const close = this.type === '!'
500
- ? // !() must match something,but !(x) can match ''
501
- '))' +
502
- (this.isStart() && !dot && !allowDot ? startNoDot : '') +
503
- star +
504
- ')'
505
- : this.type === '@'
506
- ? ')'
507
- : this.type === '?'
508
- ? ')?'
509
- : this.type === '+' && bodyDotAllowed
510
- ? ')'
511
- : this.type === '*' && bodyDotAllowed
512
- ? `)?`
513
- : `)${this.type}`;
514
- final = start + body + close;
515
- }
516
- return [
517
- final,
518
- (0, unescape_js_1.unescape)(body),
519
- (this.#hasMagic = !!this.#hasMagic),
520
- this.#uflag,
521
- ];
522
- }
523
- #partsToRegExp(dot) {
524
- return this.#parts
525
- .map(p => {
526
- // extglob ASTs should only contain parent ASTs
527
- /* c8 ignore start */
528
- if (typeof p === 'string') {
529
- throw new Error('string type in extglob ast??');
530
- }
531
- /* c8 ignore stop */
532
- // can ignore hasMagic, because extglobs are already always magic
533
- const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
534
- this.#uflag = this.#uflag || uflag;
535
- return re;
536
- })
537
- .filter(p => !(this.isStart() && this.isEnd()) || !!p)
538
- .join('|');
539
- }
540
- static #parseGlob(glob, hasMagic, noEmpty = false) {
541
- let escaping = false;
542
- let re = '';
543
- let uflag = false;
544
- for (let i = 0; i < glob.length; i++) {
545
- const c = glob.charAt(i);
546
- if (escaping) {
547
- escaping = false;
548
- re += (reSpecials.has(c) ? '\\' : '') + c;
549
- continue;
550
- }
551
- if (c === '\\') {
552
- if (i === glob.length - 1) {
553
- re += '\\\\';
554
- }
555
- else {
556
- escaping = true;
557
- }
558
- continue;
559
- }
560
- if (c === '[') {
561
- const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i);
562
- if (consumed) {
563
- re += src;
564
- uflag = uflag || needUflag;
565
- i += consumed - 1;
566
- hasMagic = hasMagic || magic;
567
- continue;
568
- }
569
- }
570
- if (c === '*') {
571
- if (noEmpty && glob === '*')
572
- re += starNoEmpty;
573
- else
574
- re += star;
575
- hasMagic = true;
576
- continue;
577
- }
578
- if (c === '?') {
579
- re += qmark;
580
- hasMagic = true;
581
- continue;
582
- }
583
- re += regExpEscape(c);
584
- }
585
- return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag];
586
- }
587
- }
588
- exports.AST = AST;
589
- //# sourceMappingURL=ast.js.map