##// END OF EJS Templates
Merge stable
Mads Kiilerich -
r8718:7037365a merge default
parent child Browse files
Show More
@@ -1,9 +1,9 b''
1 pytest >= 4.6.6, < 5.5
1 pytest >= 4.6.6, < 6.3
2 pytest-sugar >= 0.9.2, < 0.10
2 pytest-sugar >= 0.9.2, < 0.10
3 pytest-benchmark >= 3.2.2, < 3.3
3 pytest-benchmark >= 3.2.2, < 3.3
4 pytest-localserver >= 0.5.0, < 0.6
4 pytest-localserver >= 0.5.0, < 0.6
5 mock >= 3.0.0, < 4.1
5 mock >= 3.0.0, < 4.1
6 Sphinx >= 1.8.0, < 3.1
6 Sphinx >= 1.8.0, < 5.2
7 WebTest >= 2.0.6, < 2.1
7 WebTest >= 2.0.6, < 2.1
8 isort == 5.1.2
8 isort == 5.1.2
9 pyflakes == 2.2.0
9 pyflakes == 2.2.0
@@ -47,7 +47,7 b" master_doc = 'index'"
47
47
48 # General information about the project.
48 # General information about the project.
49 project = 'Kallithea'
49 project = 'Kallithea'
50 copyright = '2010-2021 by various authors, licensed as GPLv3.'
50 copyright = '2010-2022 by various authors, licensed as GPLv3.'
51
51
52 # The version info for the project you're documenting, acts as replacement for
52 # The version info for the project you're documenting, acts as replacement for
53 # |version| and |release|, also used in various other places throughout the
53 # |version| and |release|, also used in various other places throughout the
@@ -35,7 +35,7 b' def wrap_app(app):'
35 app = SimpleGit(app, config)
35 app = SimpleGit(app, config)
36
36
37 # Enable https redirects based on HTTP_X_URL_SCHEME set by proxy
37 # Enable https redirects based on HTTP_X_URL_SCHEME set by proxy
38 if any(asbool(config.get(x)) for x in ['url_scheme_variable', 'force_https', 'use_htsts']):
38 if config.get('url_scheme_variable') or asbool(config.get('force_https')) or asbool(config.get('use_htsts')):
39 app = HttpsFixup(app, config)
39 app = HttpsFixup(app, config)
40
40
41 app = PermanentRepoUrl(app, config)
41 app = PermanentRepoUrl(app, config)
@@ -26,7 +26,6 b' Original author and date, and relevant c'
26 """
26 """
27
27
28
28
29 import kallithea
30 from kallithea.lib.utils2 import asbool
29 from kallithea.lib.utils2 import asbool
31
30
32
31
@@ -62,7 +61,7 b' class HttpsFixup(object):'
62 proto = 'https'
61 proto = 'https'
63 else:
62 else:
64 # get protocol from configured WSGI environment variable
63 # get protocol from configured WSGI environment variable
65 url_scheme_variable = kallithea.CONFIG.get('url_scheme_variable')
64 url_scheme_variable = self.config.get('url_scheme_variable')
66 if url_scheme_variable:
65 if url_scheme_variable:
67 proto = environ.get(url_scheme_variable)
66 proto = environ.get(url_scheme_variable)
68
67
@@ -245,6 +245,7 b' class RepoGroupsController(base.BaseCont'
245 @HasRepoGroupPermissionLevelDecorator('admin')
245 @HasRepoGroupPermissionLevelDecorator('admin')
246 def delete(self, group_name):
246 def delete(self, group_name):
247 gr = c.repo_group = db.RepoGroup.guess_instance(group_name)
247 gr = c.repo_group = db.RepoGroup.guess_instance(group_name)
248 parent_group = gr.parent_group
248 repos = gr.repositories.all()
249 repos = gr.repositories.all()
249 if repos:
250 if repos:
250 webutils.flash(_('This group contains %s repositories and cannot be '
251 webutils.flash(_('This group contains %s repositories and cannot be '
@@ -268,8 +269,8 b' class RepoGroupsController(base.BaseCont'
268 webutils.flash(_('Error occurred during deletion of repository group %s')
269 webutils.flash(_('Error occurred during deletion of repository group %s')
269 % group_name, category='error')
270 % group_name, category='error')
270
271
271 if gr.parent_group:
272 if parent_group:
272 raise HTTPFound(location=url('repos_group_home', group_name=gr.parent_group.group_name))
273 raise HTTPFound(location=url('repos_group_home', group_name=parent_group.group_name))
273 raise HTTPFound(location=url('repos_groups'))
274 raise HTTPFound(location=url('repos_groups'))
274
275
275 def show_by_name(self, group_name):
276 def show_by_name(self, group_name):
@@ -114,7 +114,7 b' class ChangelogController(base.BaseRepoC'
114 webutils.flash(e, category='warning')
114 webutils.flash(e, category='warning')
115 raise HTTPFound(location=webutils.url('changelog_home', repo_name=repo_name))
115 raise HTTPFound(location=webutils.url('changelog_home', repo_name=repo_name))
116 else:
116 else:
117 collection = c.db_repo_scm_instance.get_changesets(start=0, end=revision,
117 collection = c.db_repo_scm_instance.get_changesets(end=revision,
118 branch_name=branch_name, reverse=True)
118 branch_name=branch_name, reverse=True)
119 c.total_cs = len(collection)
119 c.total_cs = len(collection)
120
120
@@ -44,7 +44,7 b' from kallithea.controllers import base'
44 from kallithea.lib import diffs, webutils
44 from kallithea.lib import diffs, webutils
45 from kallithea.lib.auth import HasRepoPermissionLevelDecorator, LoginRequired
45 from kallithea.lib.auth import HasRepoPermissionLevelDecorator, LoginRequired
46 from kallithea.lib.exceptions import NonRelativePathError
46 from kallithea.lib.exceptions import NonRelativePathError
47 from kallithea.lib.utils2 import asbool, convert_line_endings, detect_mode, safe_str
47 from kallithea.lib.utils2 import asbool, convert_line_endings, detect_mode, safe_bytes, safe_str
48 from kallithea.lib.vcs.backends.base import EmptyChangeset
48 from kallithea.lib.vcs.backends.base import EmptyChangeset
49 from kallithea.lib.vcs.conf import settings
49 from kallithea.lib.vcs.conf import settings
50 from kallithea.lib.vcs.exceptions import (ChangesetDoesNotExistError, ChangesetError, EmptyRepositoryError, ImproperArchiveTypeError, NodeAlreadyExistsError,
50 from kallithea.lib.vcs.exceptions import (ChangesetDoesNotExistError, ChangesetError, EmptyRepositoryError, ImproperArchiveTypeError, NodeAlreadyExistsError,
@@ -233,7 +233,7 b' class FilesController(base.BaseRepoContr'
233 file_node = self.__get_filenode(cs, f_path)
233 file_node = self.__get_filenode(cs, f_path)
234
234
235 response.content_disposition = \
235 response.content_disposition = \
236 'attachment; filename=%s' % f_path.split(kallithea.URL_SEP)[-1]
236 'attachment; filename=%s' % safe_bytes(f_path.split(kallithea.URL_SEP)[-1]).decode('latin1')
237
237
238 response.content_type = file_node.mimetype
238 response.content_type = file_node.mimetype
239 return file_node.content
239 return file_node.content
This diff has been collapsed as it changes many lines, (2386 lines changed) Show them Hide them
@@ -1,7 +1,2367 b''
1 {
1 {
2 "name": "kallithea",
2 "name": "kallithea",
3 "lockfileVersion": 2,
3 "requires": true,
4 "requires": true,
4 "lockfileVersion": 1,
5 "packages": {
6 "": {
7 "name": "kallithea",
8 "dependencies": {
9 "at.js": "1.5.4",
10 "bootstrap": "3.3.7",
11 "codemirror": "5.49.0",
12 "datatables.net": "1.10.20",
13 "datatables.net-bs": "1.10.20",
14 "jquery": "3.4.1",
15 "jquery.caret": "0.3.1",
16 "jquery.flot": "0.8.3",
17 "select2": "3.5.1",
18 "select2-bootstrap-css": "1.4.6"
19 },
20 "devDependencies": {
21 "eslint": "6.8.0",
22 "eslint-plugin-html": "6.0.0",
23 "less": "3.10.3",
24 "less-plugin-clean-css": "1.5.1",
25 "license-checker": "25.0.1"
26 }
27 },
28 "node_modules/@babel/code-frame": {
29 "version": "7.8.3",
30 "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
31 "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
32 "dev": true,
33 "dependencies": {
34 "@babel/highlight": "^7.8.3"
35 }
36 },
37 "node_modules/@babel/highlight": {
38 "version": "7.8.3",
39 "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
40 "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
41 "dev": true,
42 "dependencies": {
43 "chalk": "^2.0.0",
44 "esutils": "^2.0.2",
45 "js-tokens": "^4.0.0"
46 }
47 },
48 "node_modules/abbrev": {
49 "version": "1.1.1",
50 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
51 "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
52 "dev": true
53 },
54 "node_modules/acorn": {
55 "version": "7.1.0",
56 "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
57 "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
58 "dev": true,
59 "bin": {
60 "acorn": "bin/acorn"
61 },
62 "engines": {
63 "node": ">=0.4.0"
64 }
65 },
66 "node_modules/acorn-jsx": {
67 "version": "5.1.0",
68 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
69 "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
70 "dev": true,
71 "peerDependencies": {
72 "acorn": "^6.0.0 || ^7.0.0"
73 }
74 },
75 "node_modules/ajv": {
76 "version": "6.10.2",
77 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
78 "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
79 "dev": true,
80 "dependencies": {
81 "fast-deep-equal": "^2.0.1",
82 "fast-json-stable-stringify": "^2.0.0",
83 "json-schema-traverse": "^0.4.1",
84 "uri-js": "^4.2.2"
85 }
86 },
87 "node_modules/amdefine": {
88 "version": "1.0.1",
89 "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
90 "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
91 "dev": true,
92 "engines": {
93 "node": ">=0.4.2"
94 }
95 },
96 "node_modules/ansi-escapes": {
97 "version": "4.3.0",
98 "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz",
99 "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==",
100 "dev": true,
101 "dependencies": {
102 "type-fest": "^0.8.1"
103 },
104 "engines": {
105 "node": ">=8"
106 }
107 },
108 "node_modules/ansi-regex": {
109 "version": "5.0.0",
110 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
111 "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
112 "dev": true,
113 "engines": {
114 "node": ">=8"
115 }
116 },
117 "node_modules/ansi-styles": {
118 "version": "3.2.1",
119 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
120 "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
121 "dev": true,
122 "dependencies": {
123 "color-convert": "^1.9.0"
124 },
125 "engines": {
126 "node": ">=4"
127 }
128 },
129 "node_modules/argparse": {
130 "version": "1.0.10",
131 "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
132 "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
133 "dev": true,
134 "dependencies": {
135 "sprintf-js": "~1.0.2"
136 }
137 },
138 "node_modules/array-find-index": {
139 "version": "1.0.2",
140 "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
141 "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
142 "dev": true,
143 "engines": {
144 "node": ">=0.10.0"
145 }
146 },
147 "node_modules/asap": {
148 "version": "2.0.6",
149 "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
150 "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
151 "dev": true
152 },
153 "node_modules/asn1": {
154 "version": "0.2.4",
155 "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
156 "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
157 "dev": true,
158 "optional": true,
159 "dependencies": {
160 "safer-buffer": "~2.1.0"
161 }
162 },
163 "node_modules/assert-plus": {
164 "version": "1.0.0",
165 "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
166 "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
167 "dev": true,
168 "optional": true,
169 "engines": {
170 "node": ">=0.8"
171 }
172 },
173 "node_modules/astral-regex": {
174 "version": "1.0.0",
175 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
176 "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
177 "dev": true,
178 "engines": {
179 "node": ">=4"
180 }
181 },
182 "node_modules/asynckit": {
183 "version": "0.4.0",
184 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
185 "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
186 "dev": true,
187 "optional": true
188 },
189 "node_modules/at.js": {
190 "version": "1.5.4",
191 "resolved": "https://registry.npmjs.org/at.js/-/at.js-1.5.4.tgz",
192 "integrity": "sha512-G8mgUb/PqShPoH8AyjuxsTGvIr1o716BtQUKDM44C8qN2W615y7KGJ68MlTGamd0J0D/m28emUkzagaHTdrGZw==",
193 "engines": {
194 "node": ">= 0.6.0"
195 },
196 "peerDependencies": {
197 "jquery": ">=1.7.0 <4.0.0"
198 }
199 },
200 "node_modules/aws-sign2": {
201 "version": "0.7.0",
202 "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
203 "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
204 "dev": true,
205 "optional": true,
206 "engines": {
207 "node": "*"
208 }
209 },
210 "node_modules/aws4": {
211 "version": "1.8.0",
212 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
213 "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
214 "dev": true,
215 "optional": true
216 },
217 "node_modules/balanced-match": {
218 "version": "1.0.0",
219 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
220 "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
221 "dev": true
222 },
223 "node_modules/bcrypt-pbkdf": {
224 "version": "1.0.2",
225 "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
226 "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
227 "dev": true,
228 "optional": true,
229 "dependencies": {
230 "tweetnacl": "^0.14.3"
231 }
232 },
233 "node_modules/bootstrap": {
234 "version": "3.3.7",
235 "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz",
236 "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E=",
237 "engines": {
238 "node": ">=0.10.1"
239 }
240 },
241 "node_modules/brace-expansion": {
242 "version": "1.1.11",
243 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
244 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
245 "dev": true,
246 "dependencies": {
247 "balanced-match": "^1.0.0",
248 "concat-map": "0.0.1"
249 }
250 },
251 "node_modules/callsites": {
252 "version": "3.1.0",
253 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
254 "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
255 "dev": true,
256 "engines": {
257 "node": ">=6"
258 }
259 },
260 "node_modules/caseless": {
261 "version": "0.12.0",
262 "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
263 "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
264 "dev": true,
265 "optional": true
266 },
267 "node_modules/chalk": {
268 "version": "2.4.2",
269 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
270 "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
271 "dev": true,
272 "dependencies": {
273 "ansi-styles": "^3.2.1",
274 "escape-string-regexp": "^1.0.5",
275 "supports-color": "^5.3.0"
276 },
277 "engines": {
278 "node": ">=4"
279 }
280 },
281 "node_modules/chardet": {
282 "version": "0.7.0",
283 "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
284 "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
285 "dev": true
286 },
287 "node_modules/clean-css": {
288 "version": "3.4.28",
289 "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
290 "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
291 "dev": true,
292 "dependencies": {
293 "commander": "2.8.x",
294 "source-map": "0.4.x"
295 },
296 "bin": {
297 "cleancss": "bin/cleancss"
298 },
299 "engines": {
300 "node": ">=0.10.0"
301 }
302 },
303 "node_modules/clean-css/node_modules/source-map": {
304 "version": "0.4.4",
305 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
306 "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
307 "dev": true,
308 "dependencies": {
309 "amdefine": ">=0.0.4"
310 },
311 "engines": {
312 "node": ">=0.8.0"
313 }
314 },
315 "node_modules/cli-cursor": {
316 "version": "3.1.0",
317 "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
318 "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
319 "dev": true,
320 "dependencies": {
321 "restore-cursor": "^3.1.0"
322 },
323 "engines": {
324 "node": ">=8"
325 }
326 },
327 "node_modules/cli-width": {
328 "version": "2.2.0",
329 "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
330 "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
331 "dev": true
332 },
333 "node_modules/clone": {
334 "version": "2.1.2",
335 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
336 "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
337 "dev": true,
338 "engines": {
339 "node": ">=0.8"
340 }
341 },
342 "node_modules/codemirror": {
343 "version": "5.49.0",
344 "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.49.0.tgz",
345 "integrity": "sha512-Hyzr0HToBdZpLBN9dYFO/KlJAsKH37/cXVHPAqa+imml0R92tb9AkmsvjnXL+SluEvjjdfkDgRjc65NG5jnMYA=="
346 },
347 "node_modules/color-convert": {
348 "version": "1.9.3",
349 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
350 "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
351 "dev": true,
352 "dependencies": {
353 "color-name": "1.1.3"
354 }
355 },
356 "node_modules/color-name": {
357 "version": "1.1.3",
358 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
359 "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
360 "dev": true
361 },
362 "node_modules/combined-stream": {
363 "version": "1.0.8",
364 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
365 "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
366 "dev": true,
367 "optional": true,
368 "dependencies": {
369 "delayed-stream": "~1.0.0"
370 },
371 "engines": {
372 "node": ">= 0.8"
373 }
374 },
375 "node_modules/commander": {
376 "version": "2.8.1",
377 "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
378 "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
379 "dev": true,
380 "dependencies": {
381 "graceful-readlink": ">= 1.0.0"
382 },
383 "engines": {
384 "node": ">= 0.6.x"
385 }
386 },
387 "node_modules/concat-map": {
388 "version": "0.0.1",
389 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
390 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
391 "dev": true
392 },
393 "node_modules/core-util-is": {
394 "version": "1.0.2",
395 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
396 "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
397 "dev": true,
398 "optional": true
399 },
400 "node_modules/cross-spawn": {
401 "version": "6.0.5",
402 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
403 "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
404 "dev": true,
405 "dependencies": {
406 "nice-try": "^1.0.4",
407 "path-key": "^2.0.1",
408 "semver": "^5.5.0",
409 "shebang-command": "^1.2.0",
410 "which": "^1.2.9"
411 },
412 "engines": {
413 "node": ">=4.8"
414 }
415 },
416 "node_modules/dashdash": {
417 "version": "1.14.1",
418 "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
419 "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
420 "dev": true,
421 "optional": true,
422 "dependencies": {
423 "assert-plus": "^1.0.0"
424 },
425 "engines": {
426 "node": ">=0.10"
427 }
428 },
429 "node_modules/datatables.net": {
430 "version": "1.10.20",
431 "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.20.tgz",
432 "integrity": "sha512-4E4S7tTU607N3h0fZPkGmAtr9mwy462u+VJ6gxYZ8MxcRIjZqHy3Dv1GNry7i3zQCktTdWbULVKBbkAJkuHEnQ==",
433 "dependencies": {
434 "jquery": ">=1.7"
435 }
436 },
437 "node_modules/datatables.net-bs": {
438 "version": "1.10.20",
439 "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-1.10.20.tgz",
440 "integrity": "sha512-NsMoOOYZ6NlteOpzhltw21lXsNdhjIMbIOxnqmcrb62ntl8eL9pYzk2AeiDXBlIKY4e550ZrExCq3CYKQ9myEg==",
441 "dependencies": {
442 "datatables.net": "1.10.20",
443 "jquery": ">=1.7"
444 }
445 },
446 "node_modules/debug": {
447 "version": "3.2.6",
448 "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
449 "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
450 "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
451 "dev": true,
452 "dependencies": {
453 "ms": "^2.1.1"
454 }
455 },
456 "node_modules/debuglog": {
457 "version": "1.0.1",
458 "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz",
459 "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=",
460 "dev": true,
461 "engines": {
462 "node": "*"
463 }
464 },
465 "node_modules/deep-is": {
466 "version": "0.1.3",
467 "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
468 "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
469 "dev": true
470 },
471 "node_modules/delayed-stream": {
472 "version": "1.0.0",
473 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
474 "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
475 "dev": true,
476 "optional": true,
477 "engines": {
478 "node": ">=0.4.0"
479 }
480 },
481 "node_modules/dezalgo": {
482 "version": "1.0.3",
483 "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz",
484 "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=",
485 "dev": true,
486 "dependencies": {
487 "asap": "^2.0.0",
488 "wrappy": "1"
489 }
490 },
491 "node_modules/doctrine": {
492 "version": "3.0.0",
493 "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
494 "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
495 "dev": true,
496 "dependencies": {
497 "esutils": "^2.0.2"
498 },
499 "engines": {
500 "node": ">=6.0.0"
501 }
502 },
503 "node_modules/dom-serializer": {
504 "version": "0.2.2",
505 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
506 "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
507 "dev": true,
508 "dependencies": {
509 "domelementtype": "^2.0.1",
510 "entities": "^2.0.0"
511 }
512 },
513 "node_modules/dom-serializer/node_modules/domelementtype": {
514 "version": "2.0.1",
515 "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
516 "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
517 "dev": true
518 },
519 "node_modules/dom-serializer/node_modules/entities": {
520 "version": "2.0.0",
521 "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
522 "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
523 "dev": true
524 },
525 "node_modules/domelementtype": {
526 "version": "1.3.1",
527 "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
528 "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
529 "dev": true
530 },
531 "node_modules/domhandler": {
532 "version": "2.4.2",
533 "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
534 "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
535 "dev": true,
536 "dependencies": {
537 "domelementtype": "1"
538 }
539 },
540 "node_modules/domutils": {
541 "version": "1.7.0",
542 "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
543 "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
544 "dev": true,
545 "dependencies": {
546 "dom-serializer": "0",
547 "domelementtype": "1"
548 }
549 },
550 "node_modules/ecc-jsbn": {
551 "version": "0.1.2",
552 "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
553 "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
554 "dev": true,
555 "optional": true,
556 "dependencies": {
557 "jsbn": "~0.1.0",
558 "safer-buffer": "^2.1.0"
559 }
560 },
561 "node_modules/emoji-regex": {
562 "version": "8.0.0",
563 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
564 "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
565 "dev": true
566 },
567 "node_modules/entities": {
568 "version": "1.1.2",
569 "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
570 "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
571 "dev": true
572 },
573 "node_modules/errno": {
574 "version": "0.1.7",
575 "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
576 "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
577 "dev": true,
578 "optional": true,
579 "dependencies": {
580 "prr": "~1.0.1"
581 },
582 "bin": {
583 "errno": "cli.js"
584 }
585 },
586 "node_modules/escape-string-regexp": {
587 "version": "1.0.5",
588 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
589 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
590 "dev": true,
591 "engines": {
592 "node": ">=0.8.0"
593 }
594 },
595 "node_modules/eslint": {
596 "version": "6.8.0",
597 "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
598 "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
599 "dev": true,
600 "dependencies": {
601 "@babel/code-frame": "^7.0.0",
602 "ajv": "^6.10.0",
603 "chalk": "^2.1.0",
604 "cross-spawn": "^6.0.5",
605 "debug": "^4.0.1",
606 "doctrine": "^3.0.0",
607 "eslint-scope": "^5.0.0",
608 "eslint-utils": "^1.4.3",
609 "eslint-visitor-keys": "^1.1.0",
610 "espree": "^6.1.2",
611 "esquery": "^1.0.1",
612 "esutils": "^2.0.2",
613 "file-entry-cache": "^5.0.1",
614 "functional-red-black-tree": "^1.0.1",
615 "glob-parent": "^5.0.0",
616 "globals": "^12.1.0",
617 "ignore": "^4.0.6",
618 "import-fresh": "^3.0.0",
619 "imurmurhash": "^0.1.4",
620 "inquirer": "^7.0.0",
621 "is-glob": "^4.0.0",
622 "js-yaml": "^3.13.1",
623 "json-stable-stringify-without-jsonify": "^1.0.1",
624 "levn": "^0.3.0",
625 "lodash": "^4.17.14",
626 "minimatch": "^3.0.4",
627 "mkdirp": "^0.5.1",
628 "natural-compare": "^1.4.0",
629 "optionator": "^0.8.3",
630 "progress": "^2.0.0",
631 "regexpp": "^2.0.1",
632 "semver": "^6.1.2",
633 "strip-ansi": "^5.2.0",
634 "strip-json-comments": "^3.0.1",
635 "table": "^5.2.3",
636 "text-table": "^0.2.0",
637 "v8-compile-cache": "^2.0.3"
638 },
639 "bin": {
640 "eslint": "bin/eslint.js"
641 },
642 "engines": {
643 "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
644 },
645 "funding": {
646 "url": "https://opencollective.com/eslint"
647 }
648 },
649 "node_modules/eslint-plugin-html": {
650 "version": "6.0.0",
651 "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.0.0.tgz",
652 "integrity": "sha512-PQcGippOHS+HTbQCStmH5MY1BF2MaU8qW/+Mvo/8xTa/ioeMXdSP+IiaBw2+nh0KEMfYQKuTz1Zo+vHynjwhbg==",
653 "dev": true,
654 "dependencies": {
655 "htmlparser2": "^3.10.1"
656 }
657 },
658 "node_modules/eslint-scope": {
659 "version": "5.0.0",
660 "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
661 "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
662 "dev": true,
663 "dependencies": {
664 "esrecurse": "^4.1.0",
665 "estraverse": "^4.1.1"
666 },
667 "engines": {
668 "node": ">=8.0.0"
669 }
670 },
671 "node_modules/eslint-utils": {
672 "version": "1.4.3",
673 "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
674 "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
675 "dev": true,
676 "dependencies": {
677 "eslint-visitor-keys": "^1.1.0"
678 },
679 "engines": {
680 "node": ">=6"
681 }
682 },
683 "node_modules/eslint-visitor-keys": {
684 "version": "1.1.0",
685 "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
686 "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
687 "dev": true,
688 "engines": {
689 "node": ">=4"
690 }
691 },
692 "node_modules/eslint/node_modules/debug": {
693 "version": "4.1.1",
694 "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
695 "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
696 "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
697 "dev": true,
698 "dependencies": {
699 "ms": "^2.1.1"
700 }
701 },
702 "node_modules/eslint/node_modules/semver": {
703 "version": "6.3.0",
704 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
705 "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
706 "dev": true,
707 "bin": {
708 "semver": "bin/semver.js"
709 }
710 },
711 "node_modules/espree": {
712 "version": "6.1.2",
713 "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz",
714 "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==",
715 "dev": true,
716 "dependencies": {
717 "acorn": "^7.1.0",
718 "acorn-jsx": "^5.1.0",
719 "eslint-visitor-keys": "^1.1.0"
720 },
721 "engines": {
722 "node": ">=6.0.0"
723 }
724 },
725 "node_modules/esprima": {
726 "version": "4.0.1",
727 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
728 "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
729 "dev": true,
730 "bin": {
731 "esparse": "bin/esparse.js",
732 "esvalidate": "bin/esvalidate.js"
733 },
734 "engines": {
735 "node": ">=4"
736 }
737 },
738 "node_modules/esquery": {
739 "version": "1.1.0",
740 "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz",
741 "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==",
742 "dev": true,
743 "dependencies": {
744 "estraverse": "^4.0.0"
745 },
746 "engines": {
747 "node": ">=0.6"
748 }
749 },
750 "node_modules/esrecurse": {
751 "version": "4.2.1",
752 "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
753 "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
754 "dev": true,
755 "dependencies": {
756 "estraverse": "^4.1.0"
757 },
758 "engines": {
759 "node": ">=4.0"
760 }
761 },
762 "node_modules/estraverse": {
763 "version": "4.3.0",
764 "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
765 "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
766 "dev": true,
767 "engines": {
768 "node": ">=4.0"
769 }
770 },
771 "node_modules/esutils": {
772 "version": "2.0.3",
773 "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
774 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
775 "dev": true,
776 "engines": {
777 "node": ">=0.10.0"
778 }
779 },
780 "node_modules/extend": {
781 "version": "3.0.2",
782 "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
783 "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
784 "dev": true,
785 "optional": true
786 },
787 "node_modules/external-editor": {
788 "version": "3.1.0",
789 "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
790 "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
791 "dev": true,
792 "dependencies": {
793 "chardet": "^0.7.0",
794 "iconv-lite": "^0.4.24",
795 "tmp": "^0.0.33"
796 },
797 "engines": {
798 "node": ">=4"
799 }
800 },
801 "node_modules/extsprintf": {
802 "version": "1.3.0",
803 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
804 "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
805 "dev": true,
806 "engines": [
807 "node >=0.6.0"
808 ],
809 "optional": true
810 },
811 "node_modules/fast-deep-equal": {
812 "version": "2.0.1",
813 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
814 "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
815 "dev": true
816 },
817 "node_modules/fast-json-stable-stringify": {
818 "version": "2.0.0",
819 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
820 "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
821 "dev": true
822 },
823 "node_modules/fast-levenshtein": {
824 "version": "2.0.6",
825 "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
826 "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
827 "dev": true
828 },
829 "node_modules/figures": {
830 "version": "3.2.0",
831 "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
832 "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
833 "dev": true,
834 "dependencies": {
835 "escape-string-regexp": "^1.0.5"
836 },
837 "engines": {
838 "node": ">=8"
839 },
840 "funding": {
841 "url": "https://github.com/sponsors/sindresorhus"
842 }
843 },
844 "node_modules/file-entry-cache": {
845 "version": "5.0.1",
846 "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
847 "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
848 "dev": true,
849 "dependencies": {
850 "flat-cache": "^2.0.1"
851 },
852 "engines": {
853 "node": ">=4"
854 }
855 },
856 "node_modules/flat-cache": {
857 "version": "2.0.1",
858 "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
859 "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
860 "dev": true,
861 "dependencies": {
862 "flatted": "^2.0.0",
863 "rimraf": "2.6.3",
864 "write": "1.0.3"
865 },
866 "engines": {
867 "node": ">=4"
868 }
869 },
870 "node_modules/flatted": {
871 "version": "2.0.1",
872 "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
873 "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
874 "dev": true
875 },
876 "node_modules/forever-agent": {
877 "version": "0.6.1",
878 "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
879 "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
880 "dev": true,
881 "optional": true,
882 "engines": {
883 "node": "*"
884 }
885 },
886 "node_modules/form-data": {
887 "version": "2.3.3",
888 "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
889 "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
890 "dev": true,
891 "optional": true,
892 "dependencies": {
893 "asynckit": "^0.4.0",
894 "combined-stream": "^1.0.6",
895 "mime-types": "^2.1.12"
896 },
897 "engines": {
898 "node": ">= 0.12"
899 }
900 },
901 "node_modules/fs.realpath": {
902 "version": "1.0.0",
903 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
904 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
905 "dev": true
906 },
907 "node_modules/functional-red-black-tree": {
908 "version": "1.0.1",
909 "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
910 "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
911 "dev": true
912 },
913 "node_modules/getpass": {
914 "version": "0.1.7",
915 "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
916 "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
917 "dev": true,
918 "optional": true,
919 "dependencies": {
920 "assert-plus": "^1.0.0"
921 }
922 },
923 "node_modules/glob": {
924 "version": "7.1.6",
925 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
926 "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
927 "dev": true,
928 "dependencies": {
929 "fs.realpath": "^1.0.0",
930 "inflight": "^1.0.4",
931 "inherits": "2",
932 "minimatch": "^3.0.4",
933 "once": "^1.3.0",
934 "path-is-absolute": "^1.0.0"
935 },
936 "engines": {
937 "node": "*"
938 },
939 "funding": {
940 "url": "https://github.com/sponsors/isaacs"
941 }
942 },
943 "node_modules/glob-parent": {
944 "version": "5.1.0",
945 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
946 "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
947 "dev": true,
948 "dependencies": {
949 "is-glob": "^4.0.1"
950 },
951 "engines": {
952 "node": ">= 6"
953 }
954 },
955 "node_modules/globals": {
956 "version": "12.3.0",
957 "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz",
958 "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==",
959 "dev": true,
960 "dependencies": {
961 "type-fest": "^0.8.1"
962 },
963 "engines": {
964 "node": ">=8"
965 }
966 },
967 "node_modules/graceful-fs": {
968 "version": "4.2.3",
969 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
970 "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
971 "dev": true
972 },
973 "node_modules/graceful-readlink": {
974 "version": "1.0.1",
975 "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
976 "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
977 "dev": true
978 },
979 "node_modules/har-schema": {
980 "version": "2.0.0",
981 "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
982 "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
983 "dev": true,
984 "optional": true,
985 "engines": {
986 "node": ">=4"
987 }
988 },
989 "node_modules/har-validator": {
990 "version": "5.1.3",
991 "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
992 "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
993 "deprecated": "this library is no longer supported",
994 "dev": true,
995 "optional": true,
996 "dependencies": {
997 "ajv": "^6.5.5",
998 "har-schema": "^2.0.0"
999 },
1000 "engines": {
1001 "node": ">=6"
1002 }
1003 },
1004 "node_modules/has-flag": {
1005 "version": "3.0.0",
1006 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1007 "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1008 "dev": true,
1009 "engines": {
1010 "node": ">=4"
1011 }
1012 },
1013 "node_modules/hosted-git-info": {
1014 "version": "2.8.5",
1015 "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
1016 "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
1017 "dev": true
1018 },
1019 "node_modules/htmlparser2": {
1020 "version": "3.10.1",
1021 "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
1022 "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
1023 "dev": true,
1024 "dependencies": {
1025 "domelementtype": "^1.3.1",
1026 "domhandler": "^2.3.0",
1027 "domutils": "^1.5.1",
1028 "entities": "^1.1.1",
1029 "inherits": "^2.0.1",
1030 "readable-stream": "^3.1.1"
1031 }
1032 },
1033 "node_modules/http-signature": {
1034 "version": "1.2.0",
1035 "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1036 "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1037 "dev": true,
1038 "optional": true,
1039 "dependencies": {
1040 "assert-plus": "^1.0.0",
1041 "jsprim": "^1.2.2",
1042 "sshpk": "^1.7.0"
1043 },
1044 "engines": {
1045 "node": ">=0.8",
1046 "npm": ">=1.3.7"
1047 }
1048 },
1049 "node_modules/iconv-lite": {
1050 "version": "0.4.24",
1051 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1052 "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1053 "dev": true,
1054 "dependencies": {
1055 "safer-buffer": ">= 2.1.2 < 3"
1056 },
1057 "engines": {
1058 "node": ">=0.10.0"
1059 }
1060 },
1061 "node_modules/ignore": {
1062 "version": "4.0.6",
1063 "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
1064 "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
1065 "dev": true,
1066 "engines": {
1067 "node": ">= 4"
1068 }
1069 },
1070 "node_modules/image-size": {
1071 "version": "0.5.5",
1072 "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
1073 "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
1074 "dev": true,
1075 "optional": true,
1076 "bin": {
1077 "image-size": "bin/image-size.js"
1078 },
1079 "engines": {
1080 "node": ">=0.10.0"
1081 }
1082 },
1083 "node_modules/import-fresh": {
1084 "version": "3.2.1",
1085 "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
1086 "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
1087 "dev": true,
1088 "dependencies": {
1089 "parent-module": "^1.0.0",
1090 "resolve-from": "^4.0.0"
1091 },
1092 "engines": {
1093 "node": ">=6"
1094 }
1095 },
1096 "node_modules/imurmurhash": {
1097 "version": "0.1.4",
1098 "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1099 "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1100 "dev": true,
1101 "engines": {
1102 "node": ">=0.8.19"
1103 }
1104 },
1105 "node_modules/inflight": {
1106 "version": "1.0.6",
1107 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1108 "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1109 "dev": true,
1110 "dependencies": {
1111 "once": "^1.3.0",
1112 "wrappy": "1"
1113 }
1114 },
1115 "node_modules/inherits": {
1116 "version": "2.0.4",
1117 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1118 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1119 "dev": true
1120 },
1121 "node_modules/inquirer": {
1122 "version": "7.0.4",
1123 "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz",
1124 "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==",
1125 "dev": true,
1126 "dependencies": {
1127 "ansi-escapes": "^4.2.1",
1128 "chalk": "^2.4.2",
1129 "cli-cursor": "^3.1.0",
1130 "cli-width": "^2.0.0",
1131 "external-editor": "^3.0.3",
1132 "figures": "^3.0.0",
1133 "lodash": "^4.17.15",
1134 "mute-stream": "0.0.8",
1135 "run-async": "^2.2.0",
1136 "rxjs": "^6.5.3",
1137 "string-width": "^4.1.0",
1138 "strip-ansi": "^5.1.0",
1139 "through": "^2.3.6"
1140 },
1141 "engines": {
1142 "node": ">=6.0.0"
1143 }
1144 },
1145 "node_modules/is-extglob": {
1146 "version": "2.1.1",
1147 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1148 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1149 "dev": true,
1150 "engines": {
1151 "node": ">=0.10.0"
1152 }
1153 },
1154 "node_modules/is-fullwidth-code-point": {
1155 "version": "3.0.0",
1156 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1157 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1158 "dev": true,
1159 "engines": {
1160 "node": ">=8"
1161 }
1162 },
1163 "node_modules/is-glob": {
1164 "version": "4.0.1",
1165 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
1166 "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
1167 "dev": true,
1168 "dependencies": {
1169 "is-extglob": "^2.1.1"
1170 },
1171 "engines": {
1172 "node": ">=0.10.0"
1173 }
1174 },
1175 "node_modules/is-promise": {
1176 "version": "2.1.0",
1177 "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
1178 "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
1179 "dev": true
1180 },
1181 "node_modules/is-typedarray": {
1182 "version": "1.0.0",
1183 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1184 "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
1185 "dev": true,
1186 "optional": true
1187 },
1188 "node_modules/isexe": {
1189 "version": "2.0.0",
1190 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1191 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1192 "dev": true
1193 },
1194 "node_modules/isstream": {
1195 "version": "0.1.2",
1196 "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1197 "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
1198 "dev": true,
1199 "optional": true
1200 },
1201 "node_modules/jquery": {
1202 "version": "3.4.1",
1203 "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
1204 "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
1205 },
1206 "node_modules/jquery.caret": {
1207 "version": "0.3.1",
1208 "resolved": "https://registry.npmjs.org/jquery.caret/-/jquery.caret-0.3.1.tgz",
1209 "integrity": "sha1-nAkzGPrzJ+/zIugmyp8yQTaLx7g="
1210 },
1211 "node_modules/jquery.flot": {
1212 "version": "0.8.3",
1213 "resolved": "https://registry.npmjs.org/jquery.flot/-/jquery.flot-0.8.3.tgz",
1214 "integrity": "sha512-/tEE8J5NjwvStHDaCHkvTJpD7wDS4hE1OEL8xEmhgQfUe0gLUem923PIceNez1mz4yBNx6Hjv7pJcowLNd+nbg=="
1215 },
1216 "node_modules/js-tokens": {
1217 "version": "4.0.0",
1218 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1219 "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1220 "dev": true
1221 },
1222 "node_modules/js-yaml": {
1223 "version": "3.13.1",
1224 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
1225 "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
1226 "dev": true,
1227 "dependencies": {
1228 "argparse": "^1.0.7",
1229 "esprima": "^4.0.0"
1230 },
1231 "bin": {
1232 "js-yaml": "bin/js-yaml.js"
1233 }
1234 },
1235 "node_modules/jsbn": {
1236 "version": "0.1.1",
1237 "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1238 "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
1239 "dev": true,
1240 "optional": true
1241 },
1242 "node_modules/json-parse-better-errors": {
1243 "version": "1.0.2",
1244 "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1245 "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
1246 "dev": true
1247 },
1248 "node_modules/json-schema": {
1249 "version": "0.2.3",
1250 "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
1251 "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
1252 "dev": true,
1253 "optional": true
1254 },
1255 "node_modules/json-schema-traverse": {
1256 "version": "0.4.1",
1257 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1258 "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1259 "dev": true
1260 },
1261 "node_modules/json-stable-stringify-without-jsonify": {
1262 "version": "1.0.1",
1263 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1264 "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
1265 "dev": true
1266 },
1267 "node_modules/json-stringify-safe": {
1268 "version": "5.0.1",
1269 "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1270 "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1271 "dev": true,
1272 "optional": true
1273 },
1274 "node_modules/jsprim": {
1275 "version": "1.4.1",
1276 "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
1277 "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
1278 "dev": true,
1279 "engines": [
1280 "node >=0.6.0"
1281 ],
1282 "optional": true,
1283 "dependencies": {
1284 "assert-plus": "1.0.0",
1285 "extsprintf": "1.3.0",
1286 "json-schema": "0.2.3",
1287 "verror": "1.10.0"
1288 }
1289 },
1290 "node_modules/less": {
1291 "version": "3.10.3",
1292 "resolved": "https://registry.npmjs.org/less/-/less-3.10.3.tgz",
1293 "integrity": "sha512-vz32vqfgmoxF1h3K4J+yKCtajH0PWmjkIFgbs5d78E/c/e+UQTnI+lWK+1eQRE95PXM2mC3rJlLSSP9VQHnaow==",
1294 "dev": true,
1295 "dependencies": {
1296 "clone": "^2.1.2"
1297 },
1298 "bin": {
1299 "lessc": "bin/lessc"
1300 },
1301 "engines": {
1302 "node": ">=6"
1303 },
1304 "optionalDependencies": {
1305 "errno": "^0.1.1",
1306 "graceful-fs": "^4.1.2",
1307 "image-size": "~0.5.0",
1308 "mime": "^1.4.1",
1309 "mkdirp": "^0.5.0",
1310 "promise": "^7.1.1",
1311 "request": "^2.83.0",
1312 "source-map": "~0.6.0"
1313 }
1314 },
1315 "node_modules/less-plugin-clean-css": {
1316 "version": "1.5.1",
1317 "resolved": "https://registry.npmjs.org/less-plugin-clean-css/-/less-plugin-clean-css-1.5.1.tgz",
1318 "integrity": "sha1-zFeveqM5iVflbezr5jy2DCNClwM=",
1319 "dev": true,
1320 "dependencies": {
1321 "clean-css": "^3.0.1"
1322 },
1323 "engines": {
1324 "node": ">=0.4.2"
1325 }
1326 },
1327 "node_modules/levn": {
1328 "version": "0.3.0",
1329 "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
1330 "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
1331 "dev": true,
1332 "dependencies": {
1333 "prelude-ls": "~1.1.2",
1334 "type-check": "~0.3.2"
1335 },
1336 "engines": {
1337 "node": ">= 0.8.0"
1338 }
1339 },
1340 "node_modules/license-checker": {
1341 "version": "25.0.1",
1342 "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz",
1343 "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==",
1344 "dev": true,
1345 "dependencies": {
1346 "chalk": "^2.4.1",
1347 "debug": "^3.1.0",
1348 "mkdirp": "^0.5.1",
1349 "nopt": "^4.0.1",
1350 "read-installed": "~4.0.3",
1351 "semver": "^5.5.0",
1352 "spdx-correct": "^3.0.0",
1353 "spdx-expression-parse": "^3.0.0",
1354 "spdx-satisfies": "^4.0.0",
1355 "treeify": "^1.1.0"
1356 },
1357 "bin": {
1358 "license-checker": "bin/license-checker"
1359 }
1360 },
1361 "node_modules/lodash": {
1362 "version": "4.17.15",
1363 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
1364 "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
1365 "dev": true
1366 },
1367 "node_modules/mime": {
1368 "version": "1.6.0",
1369 "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1370 "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1371 "dev": true,
1372 "optional": true,
1373 "bin": {
1374 "mime": "cli.js"
1375 },
1376 "engines": {
1377 "node": ">=4"
1378 }
1379 },
1380 "node_modules/mime-db": {
1381 "version": "1.40.0",
1382 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
1383 "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
1384 "dev": true,
1385 "optional": true,
1386 "engines": {
1387 "node": ">= 0.6"
1388 }
1389 },
1390 "node_modules/mime-types": {
1391 "version": "2.1.24",
1392 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
1393 "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
1394 "dev": true,
1395 "optional": true,
1396 "dependencies": {
1397 "mime-db": "1.40.0"
1398 },
1399 "engines": {
1400 "node": ">= 0.6"
1401 }
1402 },
1403 "node_modules/mimic-fn": {
1404 "version": "2.1.0",
1405 "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1406 "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
1407 "dev": true,
1408 "engines": {
1409 "node": ">=6"
1410 }
1411 },
1412 "node_modules/minimatch": {
1413 "version": "3.0.4",
1414 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1415 "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1416 "dev": true,
1417 "dependencies": {
1418 "brace-expansion": "^1.1.7"
1419 },
1420 "engines": {
1421 "node": "*"
1422 }
1423 },
1424 "node_modules/minimist": {
1425 "version": "0.0.8",
1426 "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1427 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1428 "dev": true
1429 },
1430 "node_modules/mkdirp": {
1431 "version": "0.5.1",
1432 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1433 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1434 "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
1435 "dev": true,
1436 "dependencies": {
1437 "minimist": "0.0.8"
1438 },
1439 "bin": {
1440 "mkdirp": "bin/cmd.js"
1441 }
1442 },
1443 "node_modules/ms": {
1444 "version": "2.1.2",
1445 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1446 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1447 "dev": true
1448 },
1449 "node_modules/mute-stream": {
1450 "version": "0.0.8",
1451 "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
1452 "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
1453 "dev": true
1454 },
1455 "node_modules/natural-compare": {
1456 "version": "1.4.0",
1457 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1458 "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
1459 "dev": true
1460 },
1461 "node_modules/nice-try": {
1462 "version": "1.0.5",
1463 "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
1464 "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
1465 "dev": true
1466 },
1467 "node_modules/nopt": {
1468 "version": "4.0.1",
1469 "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
1470 "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
1471 "dev": true,
1472 "dependencies": {
1473 "abbrev": "1",
1474 "osenv": "^0.1.4"
1475 },
1476 "bin": {
1477 "nopt": "bin/nopt.js"
1478 }
1479 },
1480 "node_modules/normalize-package-data": {
1481 "version": "2.5.0",
1482 "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
1483 "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
1484 "dev": true,
1485 "dependencies": {
1486 "hosted-git-info": "^2.1.4",
1487 "resolve": "^1.10.0",
1488 "semver": "2 || 3 || 4 || 5",
1489 "validate-npm-package-license": "^3.0.1"
1490 }
1491 },
1492 "node_modules/oauth-sign": {
1493 "version": "0.9.0",
1494 "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1495 "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
1496 "dev": true,
1497 "optional": true,
1498 "engines": {
1499 "node": "*"
1500 }
1501 },
1502 "node_modules/once": {
1503 "version": "1.4.0",
1504 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1505 "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1506 "dev": true,
1507 "dependencies": {
1508 "wrappy": "1"
1509 }
1510 },
1511 "node_modules/onetime": {
1512 "version": "5.1.0",
1513 "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
1514 "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
1515 "dev": true,
1516 "dependencies": {
1517 "mimic-fn": "^2.1.0"
1518 },
1519 "engines": {
1520 "node": ">=6"
1521 }
1522 },
1523 "node_modules/optionator": {
1524 "version": "0.8.3",
1525 "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
1526 "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
1527 "dev": true,
1528 "dependencies": {
1529 "deep-is": "~0.1.3",
1530 "fast-levenshtein": "~2.0.6",
1531 "levn": "~0.3.0",
1532 "prelude-ls": "~1.1.2",
1533 "type-check": "~0.3.2",
1534 "word-wrap": "~1.2.3"
1535 },
1536 "engines": {
1537 "node": ">= 0.8.0"
1538 }
1539 },
1540 "node_modules/os-homedir": {
1541 "version": "1.0.2",
1542 "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1543 "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1544 "dev": true,
1545 "engines": {
1546 "node": ">=0.10.0"
1547 }
1548 },
1549 "node_modules/os-tmpdir": {
1550 "version": "1.0.2",
1551 "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1552 "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1553 "dev": true,
1554 "engines": {
1555 "node": ">=0.10.0"
1556 }
1557 },
1558 "node_modules/osenv": {
1559 "version": "0.1.5",
1560 "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
1561 "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
1562 "dev": true,
1563 "dependencies": {
1564 "os-homedir": "^1.0.0",
1565 "os-tmpdir": "^1.0.0"
1566 }
1567 },
1568 "node_modules/parent-module": {
1569 "version": "1.0.1",
1570 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1571 "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1572 "dev": true,
1573 "dependencies": {
1574 "callsites": "^3.0.0"
1575 },
1576 "engines": {
1577 "node": ">=6"
1578 }
1579 },
1580 "node_modules/path-is-absolute": {
1581 "version": "1.0.1",
1582 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1583 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1584 "dev": true,
1585 "engines": {
1586 "node": ">=0.10.0"
1587 }
1588 },
1589 "node_modules/path-key": {
1590 "version": "2.0.1",
1591 "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
1592 "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1593 "dev": true,
1594 "engines": {
1595 "node": ">=4"
1596 }
1597 },
1598 "node_modules/path-parse": {
1599 "version": "1.0.6",
1600 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1601 "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
1602 "dev": true
1603 },
1604 "node_modules/performance-now": {
1605 "version": "2.1.0",
1606 "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1607 "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
1608 "dev": true,
1609 "optional": true
1610 },
1611 "node_modules/prelude-ls": {
1612 "version": "1.1.2",
1613 "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
1614 "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
1615 "dev": true,
1616 "engines": {
1617 "node": ">= 0.8.0"
1618 }
1619 },
1620 "node_modules/progress": {
1621 "version": "2.0.3",
1622 "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
1623 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1624 "dev": true,
1625 "engines": {
1626 "node": ">=0.4.0"
1627 }
1628 },
1629 "node_modules/promise": {
1630 "version": "7.3.1",
1631 "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
1632 "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
1633 "dev": true,
1634 "optional": true,
1635 "dependencies": {
1636 "asap": "~2.0.3"
1637 }
1638 },
1639 "node_modules/prr": {
1640 "version": "1.0.1",
1641 "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
1642 "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
1643 "dev": true,
1644 "optional": true
1645 },
1646 "node_modules/psl": {
1647 "version": "1.4.0",
1648 "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
1649 "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==",
1650 "dev": true,
1651 "optional": true
1652 },
1653 "node_modules/punycode": {
1654 "version": "2.1.1",
1655 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1656 "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1657 "dev": true,
1658 "engines": {
1659 "node": ">=6"
1660 }
1661 },
1662 "node_modules/qs": {
1663 "version": "6.5.2",
1664 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1665 "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
1666 "dev": true,
1667 "optional": true,
1668 "engines": {
1669 "node": ">=0.6"
1670 }
1671 },
1672 "node_modules/read-installed": {
1673 "version": "4.0.3",
1674 "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz",
1675 "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=",
1676 "dev": true,
1677 "dependencies": {
1678 "debuglog": "^1.0.1",
1679 "read-package-json": "^2.0.0",
1680 "readdir-scoped-modules": "^1.0.0",
1681 "semver": "2 || 3 || 4 || 5",
1682 "slide": "~1.1.3",
1683 "util-extend": "^1.0.1"
1684 },
1685 "optionalDependencies": {
1686 "graceful-fs": "^4.1.2"
1687 }
1688 },
1689 "node_modules/read-package-json": {
1690 "version": "2.1.0",
1691 "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.0.tgz",
1692 "integrity": "sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A==",
1693 "dev": true,
1694 "dependencies": {
1695 "glob": "^7.1.1",
1696 "json-parse-better-errors": "^1.0.1",
1697 "normalize-package-data": "^2.0.0",
1698 "slash": "^1.0.0"
1699 },
1700 "optionalDependencies": {
1701 "graceful-fs": "^4.1.2"
1702 }
1703 },
1704 "node_modules/readable-stream": {
1705 "version": "3.6.0",
1706 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1707 "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1708 "dev": true,
1709 "dependencies": {
1710 "inherits": "^2.0.3",
1711 "string_decoder": "^1.1.1",
1712 "util-deprecate": "^1.0.1"
1713 },
1714 "engines": {
1715 "node": ">= 6"
1716 }
1717 },
1718 "node_modules/readdir-scoped-modules": {
1719 "version": "1.1.0",
1720 "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz",
1721 "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==",
1722 "dev": true,
1723 "dependencies": {
1724 "debuglog": "^1.0.1",
1725 "dezalgo": "^1.0.0",
1726 "graceful-fs": "^4.1.2",
1727 "once": "^1.3.0"
1728 }
1729 },
1730 "node_modules/regexpp": {
1731 "version": "2.0.1",
1732 "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
1733 "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
1734 "dev": true,
1735 "engines": {
1736 "node": ">=6.5.0"
1737 }
1738 },
1739 "node_modules/request": {
1740 "version": "2.88.0",
1741 "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
1742 "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
1743 "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
1744 "dev": true,
1745 "optional": true,
1746 "dependencies": {
1747 "aws-sign2": "~0.7.0",
1748 "aws4": "^1.8.0",
1749 "caseless": "~0.12.0",
1750 "combined-stream": "~1.0.6",
1751 "extend": "~3.0.2",
1752 "forever-agent": "~0.6.1",
1753 "form-data": "~2.3.2",
1754 "har-validator": "~5.1.0",
1755 "http-signature": "~1.2.0",
1756 "is-typedarray": "~1.0.0",
1757 "isstream": "~0.1.2",
1758 "json-stringify-safe": "~5.0.1",
1759 "mime-types": "~2.1.19",
1760 "oauth-sign": "~0.9.0",
1761 "performance-now": "^2.1.0",
1762 "qs": "~6.5.2",
1763 "safe-buffer": "^5.1.2",
1764 "tough-cookie": "~2.4.3",
1765 "tunnel-agent": "^0.6.0",
1766 "uuid": "^3.3.2"
1767 },
1768 "engines": {
1769 "node": ">= 4"
1770 }
1771 },
1772 "node_modules/resolve": {
1773 "version": "1.12.0",
1774 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
1775 "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
1776 "dev": true,
1777 "dependencies": {
1778 "path-parse": "^1.0.6"
1779 }
1780 },
1781 "node_modules/resolve-from": {
1782 "version": "4.0.0",
1783 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1784 "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1785 "dev": true,
1786 "engines": {
1787 "node": ">=4"
1788 }
1789 },
1790 "node_modules/restore-cursor": {
1791 "version": "3.1.0",
1792 "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
1793 "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
1794 "dev": true,
1795 "dependencies": {
1796 "onetime": "^5.1.0",
1797 "signal-exit": "^3.0.2"
1798 },
1799 "engines": {
1800 "node": ">=8"
1801 }
1802 },
1803 "node_modules/rimraf": {
1804 "version": "2.6.3",
1805 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
1806 "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
1807 "dev": true,
1808 "dependencies": {
1809 "glob": "^7.1.3"
1810 },
1811 "bin": {
1812 "rimraf": "bin.js"
1813 }
1814 },
1815 "node_modules/run-async": {
1816 "version": "2.3.0",
1817 "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
1818 "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
1819 "dev": true,
1820 "dependencies": {
1821 "is-promise": "^2.1.0"
1822 },
1823 "engines": {
1824 "node": ">=0.12.0"
1825 }
1826 },
1827 "node_modules/rxjs": {
1828 "version": "6.5.4",
1829 "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
1830 "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
1831 "dev": true,
1832 "dependencies": {
1833 "tslib": "^1.9.0"
1834 },
1835 "engines": {
1836 "npm": ">=2.0.0"
1837 }
1838 },
1839 "node_modules/safe-buffer": {
1840 "version": "5.2.0",
1841 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
1842 "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
1843 "dev": true
1844 },
1845 "node_modules/safer-buffer": {
1846 "version": "2.1.2",
1847 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1848 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1849 "dev": true
1850 },
1851 "node_modules/select2": {
1852 "version": "3.5.1",
1853 "resolved": "https://registry.npmjs.org/select2/-/select2-3.5.1.tgz",
1854 "integrity": "sha1-8oGUibvGX9bTKL5yu+K5XdfofP4="
1855 },
1856 "node_modules/select2-bootstrap-css": {
1857 "version": "1.4.6",
1858 "resolved": "https://registry.npmjs.org/select2-bootstrap-css/-/select2-bootstrap-css-1.4.6.tgz",
1859 "integrity": "sha1-XPtoJG9SmcoYWOAe/XiIBMc0mX4="
1860 },
1861 "node_modules/semver": {
1862 "version": "5.7.1",
1863 "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1864 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1865 "dev": true,
1866 "bin": {
1867 "semver": "bin/semver"
1868 }
1869 },
1870 "node_modules/shebang-command": {
1871 "version": "1.2.0",
1872 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
1873 "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
1874 "dev": true,
1875 "dependencies": {
1876 "shebang-regex": "^1.0.0"
1877 },
1878 "engines": {
1879 "node": ">=0.10.0"
1880 }
1881 },
1882 "node_modules/shebang-regex": {
1883 "version": "1.0.0",
1884 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
1885 "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
1886 "dev": true,
1887 "engines": {
1888 "node": ">=0.10.0"
1889 }
1890 },
1891 "node_modules/signal-exit": {
1892 "version": "3.0.2",
1893 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1894 "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
1895 "dev": true
1896 },
1897 "node_modules/slash": {
1898 "version": "1.0.0",
1899 "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
1900 "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
1901 "dev": true,
1902 "engines": {
1903 "node": ">=0.10.0"
1904 }
1905 },
1906 "node_modules/slice-ansi": {
1907 "version": "2.1.0",
1908 "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
1909 "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
1910 "dev": true,
1911 "dependencies": {
1912 "ansi-styles": "^3.2.0",
1913 "astral-regex": "^1.0.0",
1914 "is-fullwidth-code-point": "^2.0.0"
1915 },
1916 "engines": {
1917 "node": ">=6"
1918 }
1919 },
1920 "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
1921 "version": "2.0.0",
1922 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1923 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1924 "dev": true,
1925 "engines": {
1926 "node": ">=4"
1927 }
1928 },
1929 "node_modules/slide": {
1930 "version": "1.1.6",
1931 "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
1932 "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
1933 "dev": true,
1934 "engines": {
1935 "node": "*"
1936 }
1937 },
1938 "node_modules/source-map": {
1939 "version": "0.6.1",
1940 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1941 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1942 "dev": true,
1943 "optional": true,
1944 "engines": {
1945 "node": ">=0.10.0"
1946 }
1947 },
1948 "node_modules/spdx-compare": {
1949 "version": "1.0.0",
1950 "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz",
1951 "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==",
1952 "dev": true,
1953 "dependencies": {
1954 "array-find-index": "^1.0.2",
1955 "spdx-expression-parse": "^3.0.0",
1956 "spdx-ranges": "^2.0.0"
1957 }
1958 },
1959 "node_modules/spdx-correct": {
1960 "version": "3.1.0",
1961 "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
1962 "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
1963 "dev": true,
1964 "dependencies": {
1965 "spdx-expression-parse": "^3.0.0",
1966 "spdx-license-ids": "^3.0.0"
1967 }
1968 },
1969 "node_modules/spdx-exceptions": {
1970 "version": "2.2.0",
1971 "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
1972 "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
1973 "dev": true
1974 },
1975 "node_modules/spdx-expression-parse": {
1976 "version": "3.0.0",
1977 "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
1978 "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
1979 "dev": true,
1980 "dependencies": {
1981 "spdx-exceptions": "^2.1.0",
1982 "spdx-license-ids": "^3.0.0"
1983 }
1984 },
1985 "node_modules/spdx-license-ids": {
1986 "version": "3.0.5",
1987 "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
1988 "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
1989 "dev": true
1990 },
1991 "node_modules/spdx-ranges": {
1992 "version": "2.1.1",
1993 "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz",
1994 "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==",
1995 "dev": true
1996 },
1997 "node_modules/spdx-satisfies": {
1998 "version": "4.0.1",
1999 "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz",
2000 "integrity": "sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA==",
2001 "dev": true,
2002 "dependencies": {
2003 "spdx-compare": "^1.0.0",
2004 "spdx-expression-parse": "^3.0.0",
2005 "spdx-ranges": "^2.0.0"
2006 }
2007 },
2008 "node_modules/sprintf-js": {
2009 "version": "1.0.3",
2010 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2011 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2012 "dev": true
2013 },
2014 "node_modules/sshpk": {
2015 "version": "1.16.1",
2016 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
2017 "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
2018 "dev": true,
2019 "optional": true,
2020 "dependencies": {
2021 "asn1": "~0.2.3",
2022 "assert-plus": "^1.0.0",
2023 "bcrypt-pbkdf": "^1.0.0",
2024 "dashdash": "^1.12.0",
2025 "ecc-jsbn": "~0.1.1",
2026 "getpass": "^0.1.1",
2027 "jsbn": "~0.1.0",
2028 "safer-buffer": "^2.0.2",
2029 "tweetnacl": "~0.14.0"
2030 },
2031 "bin": {
2032 "sshpk-conv": "bin/sshpk-conv",
2033 "sshpk-sign": "bin/sshpk-sign",
2034 "sshpk-verify": "bin/sshpk-verify"
2035 },
2036 "engines": {
2037 "node": ">=0.10.0"
2038 }
2039 },
2040 "node_modules/string_decoder": {
2041 "version": "1.3.0",
2042 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
2043 "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
2044 "dev": true,
2045 "dependencies": {
2046 "safe-buffer": "~5.2.0"
2047 }
2048 },
2049 "node_modules/string-width": {
2050 "version": "4.2.0",
2051 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
2052 "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
2053 "dev": true,
2054 "dependencies": {
2055 "emoji-regex": "^8.0.0",
2056 "is-fullwidth-code-point": "^3.0.0",
2057 "strip-ansi": "^6.0.0"
2058 },
2059 "engines": {
2060 "node": ">=8"
2061 }
2062 },
2063 "node_modules/string-width/node_modules/strip-ansi": {
2064 "version": "6.0.0",
2065 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
2066 "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
2067 "dev": true,
2068 "dependencies": {
2069 "ansi-regex": "^5.0.0"
2070 },
2071 "engines": {
2072 "node": ">=8"
2073 }
2074 },
2075 "node_modules/strip-ansi": {
2076 "version": "5.2.0",
2077 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
2078 "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
2079 "dev": true,
2080 "dependencies": {
2081 "ansi-regex": "^4.1.0"
2082 },
2083 "engines": {
2084 "node": ">=6"
2085 }
2086 },
2087 "node_modules/strip-ansi/node_modules/ansi-regex": {
2088 "version": "4.1.0",
2089 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
2090 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
2091 "dev": true,
2092 "engines": {
2093 "node": ">=6"
2094 }
2095 },
2096 "node_modules/strip-json-comments": {
2097 "version": "3.0.1",
2098 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
2099 "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
2100 "dev": true,
2101 "engines": {
2102 "node": ">=8"
2103 }
2104 },
2105 "node_modules/supports-color": {
2106 "version": "5.5.0",
2107 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2108 "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2109 "dev": true,
2110 "dependencies": {
2111 "has-flag": "^3.0.0"
2112 },
2113 "engines": {
2114 "node": ">=4"
2115 }
2116 },
2117 "node_modules/table": {
2118 "version": "5.4.6",
2119 "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
2120 "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
2121 "dev": true,
2122 "dependencies": {
2123 "ajv": "^6.10.2",
2124 "lodash": "^4.17.14",
2125 "slice-ansi": "^2.1.0",
2126 "string-width": "^3.0.0"
2127 },
2128 "engines": {
2129 "node": ">=6.0.0"
2130 }
2131 },
2132 "node_modules/table/node_modules/emoji-regex": {
2133 "version": "7.0.3",
2134 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
2135 "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
2136 "dev": true
2137 },
2138 "node_modules/table/node_modules/is-fullwidth-code-point": {
2139 "version": "2.0.0",
2140 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2141 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2142 "dev": true,
2143 "engines": {
2144 "node": ">=4"
2145 }
2146 },
2147 "node_modules/table/node_modules/string-width": {
2148 "version": "3.1.0",
2149 "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2150 "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2151 "dev": true,
2152 "dependencies": {
2153 "emoji-regex": "^7.0.1",
2154 "is-fullwidth-code-point": "^2.0.0",
2155 "strip-ansi": "^5.1.0"
2156 },
2157 "engines": {
2158 "node": ">=6"
2159 }
2160 },
2161 "node_modules/text-table": {
2162 "version": "0.2.0",
2163 "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2164 "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
2165 "dev": true
2166 },
2167 "node_modules/through": {
2168 "version": "2.3.8",
2169 "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2170 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2171 "dev": true
2172 },
2173 "node_modules/tmp": {
2174 "version": "0.0.33",
2175 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
2176 "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
2177 "dev": true,
2178 "dependencies": {
2179 "os-tmpdir": "~1.0.2"
2180 },
2181 "engines": {
2182 "node": ">=0.6.0"
2183 }
2184 },
2185 "node_modules/tough-cookie": {
2186 "version": "2.4.3",
2187 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
2188 "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
2189 "dev": true,
2190 "optional": true,
2191 "dependencies": {
2192 "psl": "^1.1.24",
2193 "punycode": "^1.4.1"
2194 },
2195 "engines": {
2196 "node": ">=0.8"
2197 }
2198 },
2199 "node_modules/tough-cookie/node_modules/punycode": {
2200 "version": "1.4.1",
2201 "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
2202 "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
2203 "dev": true,
2204 "optional": true
2205 },
2206 "node_modules/treeify": {
2207 "version": "1.1.0",
2208 "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz",
2209 "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==",
2210 "dev": true,
2211 "engines": {
2212 "node": ">=0.6"
2213 }
2214 },
2215 "node_modules/tslib": {
2216 "version": "1.11.0",
2217 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.0.tgz",
2218 "integrity": "sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg==",
2219 "dev": true
2220 },
2221 "node_modules/tunnel-agent": {
2222 "version": "0.6.0",
2223 "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
2224 "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
2225 "dev": true,
2226 "optional": true,
2227 "dependencies": {
2228 "safe-buffer": "^5.0.1"
2229 },
2230 "engines": {
2231 "node": "*"
2232 }
2233 },
2234 "node_modules/tweetnacl": {
2235 "version": "0.14.5",
2236 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
2237 "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
2238 "dev": true,
2239 "optional": true
2240 },
2241 "node_modules/type-check": {
2242 "version": "0.3.2",
2243 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
2244 "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
2245 "dev": true,
2246 "dependencies": {
2247 "prelude-ls": "~1.1.2"
2248 },
2249 "engines": {
2250 "node": ">= 0.8.0"
2251 }
2252 },
2253 "node_modules/type-fest": {
2254 "version": "0.8.1",
2255 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
2256 "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
2257 "dev": true,
2258 "engines": {
2259 "node": ">=8"
2260 }
2261 },
2262 "node_modules/uri-js": {
2263 "version": "4.2.2",
2264 "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
2265 "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
2266 "dev": true,
2267 "dependencies": {
2268 "punycode": "^2.1.0"
2269 }
2270 },
2271 "node_modules/util-deprecate": {
2272 "version": "1.0.2",
2273 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2274 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2275 "dev": true
2276 },
2277 "node_modules/util-extend": {
2278 "version": "1.0.3",
2279 "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz",
2280 "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=",
2281 "dev": true
2282 },
2283 "node_modules/uuid": {
2284 "version": "3.3.3",
2285 "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
2286 "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
2287 "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
2288 "dev": true,
2289 "optional": true,
2290 "bin": {
2291 "uuid": "bin/uuid"
2292 }
2293 },
2294 "node_modules/v8-compile-cache": {
2295 "version": "2.1.0",
2296 "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
2297 "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
2298 "dev": true
2299 },
2300 "node_modules/validate-npm-package-license": {
2301 "version": "3.0.4",
2302 "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
2303 "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
2304 "dev": true,
2305 "dependencies": {
2306 "spdx-correct": "^3.0.0",
2307 "spdx-expression-parse": "^3.0.0"
2308 }
2309 },
2310 "node_modules/verror": {
2311 "version": "1.10.0",
2312 "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
2313 "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
2314 "dev": true,
2315 "engines": [
2316 "node >=0.6.0"
2317 ],
2318 "optional": true,
2319 "dependencies": {
2320 "assert-plus": "^1.0.0",
2321 "core-util-is": "1.0.2",
2322 "extsprintf": "^1.2.0"
2323 }
2324 },
2325 "node_modules/which": {
2326 "version": "1.3.1",
2327 "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
2328 "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
2329 "dev": true,
2330 "dependencies": {
2331 "isexe": "^2.0.0"
2332 },
2333 "bin": {
2334 "which": "bin/which"
2335 }
2336 },
2337 "node_modules/word-wrap": {
2338 "version": "1.2.3",
2339 "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
2340 "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
2341 "dev": true,
2342 "engines": {
2343 "node": ">=0.10.0"
2344 }
2345 },
2346 "node_modules/wrappy": {
2347 "version": "1.0.2",
2348 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2349 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2350 "dev": true
2351 },
2352 "node_modules/write": {
2353 "version": "1.0.3",
2354 "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
2355 "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
2356 "dev": true,
2357 "dependencies": {
2358 "mkdirp": "^0.5.1"
2359 },
2360 "engines": {
2361 "node": ">=4"
2362 }
2363 }
2364 },
5 "dependencies": {
2365 "dependencies": {
6 "@babel/code-frame": {
2366 "@babel/code-frame": {
7 "version": "7.8.3",
2367 "version": "7.8.3",
@@ -39,7 +2399,8 b''
39 "version": "5.1.0",
2399 "version": "5.1.0",
40 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
2400 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
41 "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
2401 "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
42 "dev": true
2402 "dev": true,
2403 "requires": {}
43 },
2404 },
44 "ajv": {
2405 "ajv": {
45 "version": "6.10.2",
2406 "version": "6.10.2",
@@ -137,7 +2498,8 b''
137 "at.js": {
2498 "at.js": {
138 "version": "1.5.4",
2499 "version": "1.5.4",
139 "resolved": "https://registry.npmjs.org/at.js/-/at.js-1.5.4.tgz",
2500 "resolved": "https://registry.npmjs.org/at.js/-/at.js-1.5.4.tgz",
140 "integrity": "sha512-G8mgUb/PqShPoH8AyjuxsTGvIr1o716BtQUKDM44C8qN2W615y7KGJ68MlTGamd0J0D/m28emUkzagaHTdrGZw=="
2501 "integrity": "sha512-G8mgUb/PqShPoH8AyjuxsTGvIr1o716BtQUKDM44C8qN2W615y7KGJ68MlTGamd0J0D/m28emUkzagaHTdrGZw==",
2502 "requires": {}
141 },
2503 },
142 "aws-sign2": {
2504 "aws-sign2": {
143 "version": "0.7.0",
2505 "version": "0.7.0",
@@ -1663,6 +4025,15 b''
1663 "tweetnacl": "~0.14.0"
4025 "tweetnacl": "~0.14.0"
1664 }
4026 }
1665 },
4027 },
4028 "string_decoder": {
4029 "version": "1.3.0",
4030 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
4031 "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
4032 "dev": true,
4033 "requires": {
4034 "safe-buffer": "~5.2.0"
4035 }
4036 },
1666 "string-width": {
4037 "string-width": {
1667 "version": "4.2.0",
4038 "version": "4.2.0",
1668 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
4039 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
@@ -1685,15 +4056,6 b''
1685 }
4056 }
1686 }
4057 }
1687 },
4058 },
1688 "string_decoder": {
1689 "version": "1.3.0",
1690 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1691 "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1692 "dev": true,
1693 "requires": {
1694 "safe-buffer": "~5.2.0"
1695 }
1696 },
1697 "strip-ansi": {
4059 "strip-ansi": {
1698 "version": "5.2.0",
4060 "version": "5.2.0",
1699 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
4061 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -521,9 +521,9 b' class LoginRequired(object):'
521 if self.allow_default_user:
521 if self.allow_default_user:
522 log.info('default user @ %s', loc)
522 log.info('default user @ %s', loc)
523 return func(*fargs, **fkwargs)
523 return func(*fargs, **fkwargs)
524 log.info('default user is not accepted here @ %s', loc)
524 log.info('default user is redirected to login @ %s', loc)
525 elif user.is_anonymous: # default user is disabled and no proper authentication
525 elif user.is_anonymous: # default user is disabled and no proper authentication
526 log.warning('user is anonymous and NOT authenticated with regular auth @ %s', loc)
526 log.info('anonymous user is redirected to login @ %s', loc)
527 else: # regular authentication
527 else: # regular authentication
528 log.info('user %s authenticated with regular auth @ %s', user, loc)
528 log.info('user %s authenticated with regular auth @ %s', user, loc)
529 return func(*fargs, **fkwargs)
529 return func(*fargs, **fkwargs)
@@ -117,7 +117,7 b' class MarkupRenderer(object):'
117 At last it will just do a simple html replacing new lines with <br/>
117 At last it will just do a simple html replacing new lines with <br/>
118
118
119 >>> MarkupRenderer.render('''<img id="a" style="margin-top:-1000px;color:red" src="http://example.com/test.jpg">''', '.md')
119 >>> MarkupRenderer.render('''<img id="a" style="margin-top:-1000px;color:red" src="http://example.com/test.jpg">''', '.md')
120 '<p><img id="a" src="http://example.com/test.jpg" style="color: red;"></p>'
120 '<p><img id="a" src="http://example.com/test.jpg" style=""></p>'
121 >>> MarkupRenderer.render('''<img class="c d" src="file://localhost/test.jpg">''', 'b.mkd')
121 >>> MarkupRenderer.render('''<img class="c d" src="file://localhost/test.jpg">''', 'b.mkd')
122 '<p><img class="c d"></p>'
122 '<p><img class="c d"></p>'
123 >>> MarkupRenderer.render('''<a href="foo">foo</a>''', 'c.mkdn')
123 >>> MarkupRenderer.render('''<a href="foo">foo</a>''', 'c.mkdn')
@@ -171,7 +171,7 b' class BaseRepository(object):'
171 :param start_date:
171 :param start_date:
172 :param end_date:
172 :param end_date:
173 :param branch_name:
173 :param branch_name:
174 :param reversed:
174 :param reverse:
175 """
175 """
176 raise NotImplementedError
176 raise NotImplementedError
177
177
@@ -19,7 +19,12 b' import urllib.parse'
19 import urllib.request
19 import urllib.request
20 from collections import OrderedDict
20 from collections import OrderedDict
21
21
22 import mercurial.util # import url as hg_url
22
23 try:
24 from mercurial.utils.urlutil import url as hg_url
25 except ImportError: # urlutil was introduced in Mercurial 5.8
26 from mercurial.util import url as hg_url
27
23 from dulwich.client import SubprocessGitClient
28 from dulwich.client import SubprocessGitClient
24 from dulwich.config import ConfigFile
29 from dulwich.config import ConfigFile
25 from dulwich.objects import Tag
30 from dulwich.objects import Tag
@@ -226,7 +231,7 b' class GitRepository(BaseRepository):'
226 if parsed_url.scheme not in ['http', 'https']:
231 if parsed_url.scheme not in ['http', 'https']:
227 raise urllib.error.URLError("Unsupported protocol in URL %r" % url)
232 raise urllib.error.URLError("Unsupported protocol in URL %r" % url)
228
233
229 url_obj = mercurial.util.url(safe_bytes(url))
234 url_obj = hg_url(safe_bytes(url))
230 test_uri, handlers = get_urllib_request_handlers(url_obj)
235 test_uri, handlers = get_urllib_request_handlers(url_obj)
231 if not test_uri.endswith(b'info/refs'):
236 if not test_uri.endswith(b'info/refs'):
232 test_uri = test_uri.rstrip(b'/') + b'/info/refs'
237 test_uri = test_uri.rstrip(b'/') + b'/info/refs'
@@ -34,7 +34,12 b' import mercurial.sshpeer'
34 import mercurial.tags
34 import mercurial.tags
35 import mercurial.ui
35 import mercurial.ui
36 import mercurial.unionrepo
36 import mercurial.unionrepo
37 import mercurial.util
37
38
39 try:
40 from mercurial.utils.urlutil import url as hg_url
41 except ImportError: # urlutil was introduced in Mercurial 5.8
42 from mercurial.util import url as hg_url
38
43
39 from kallithea.lib.vcs.backends.base import BaseRepository, CollectionGenerator
44 from kallithea.lib.vcs.backends.base import BaseRepository, CollectionGenerator
40 from kallithea.lib.vcs.exceptions import (BranchDoesNotExistError, ChangesetDoesNotExistError, EmptyRepositoryError, RepositoryError, TagAlreadyExistError,
45 from kallithea.lib.vcs.exceptions import (BranchDoesNotExistError, ChangesetDoesNotExistError, EmptyRepositoryError, RepositoryError, TagAlreadyExistError,
@@ -212,7 +217,7 b' class MercurialRepository(BaseRepository'
212 local = False
217 local = False
213
218
214 try:
219 try:
215 mercurial.tags.tag(self._repo, safe_bytes(name), mercurial.commands.nullid, safe_bytes(message), local, safe_bytes(user), date)
220 mercurial.tags.tag(self._repo, safe_bytes(name), mercurial.node.nullid, safe_bytes(message), local, safe_bytes(user), date)
216 self.tags = self._get_tags()
221 self.tags = self._get_tags()
217 except mercurial.error.Abort as e:
222 except mercurial.error.Abort as e:
218 raise RepositoryError(e.args[0])
223 raise RepositoryError(e.args[0])
@@ -336,7 +341,7 b' class MercurialRepository(BaseRepository'
336 if '+' in parsed_url.scheme: # strip 'git+' for hg-git URLs
341 if '+' in parsed_url.scheme: # strip 'git+' for hg-git URLs
337 url = url.split(b'+', 1)[1]
342 url = url.split(b'+', 1)[1]
338
343
339 url_obj = mercurial.util.url(url)
344 url_obj = hg_url(url)
340 test_uri, handlers = get_urllib_request_handlers(url_obj)
345 test_uri, handlers = get_urllib_request_handlers(url_obj)
341
346
342 url_obj.passwd = b'*****'
347 url_obj.passwd = b'*****'
@@ -523,7 +528,7 b' class MercurialRepository(BaseRepository'
523 :param start_date:
528 :param start_date:
524 :param end_date:
529 :param end_date:
525 :param branch_name:
530 :param branch_name:
526 :param reversed: return changesets in reversed order
531 :param reverse: return changesets in reversed order
527 """
532 """
528 start_raw_id = self._get_revision(start)
533 start_raw_id = self._get_revision(start)
529 start_pos = None if start is None else self.revisions.index(start_raw_id)
534 start_pos = None if start is None else self.revisions.index(start_raw_id)
@@ -245,7 +245,7 b' def get_urllib_request_handlers(url_obj)'
245 if authinfo:
245 if authinfo:
246 # authinfo is a tuple (realm, uris, user, password) where 'uris' itself
246 # authinfo is a tuple (realm, uris, user, password) where 'uris' itself
247 # is a tuple of URIs.
247 # is a tuple of URIs.
248 # If url_obj is obtained via mercurial.util.url, the obtained authinfo
248 # If url_obj is obtained via mercurial urlutil, the obtained authinfo
249 # values will be bytes, e.g.
249 # values will be bytes, e.g.
250 # (None, (b'http://127.0.0.1/repo', b'127.0.0.1'), b'user', b'pass')
250 # (None, (b'http://127.0.0.1/repo', b'127.0.0.1'), b'user', b'pass')
251 # However, urllib expects strings, not bytes, so we must convert them.
251 # However, urllib expects strings, not bytes, so we must convert them.
@@ -20,6 +20,7 b' thread-local "global" variables. It shou'
20 imported anywhere - just like the global variables can be used everywhere.
20 imported anywhere - just like the global variables can be used everywhere.
21 """
21 """
22
22
23 import collections
23 import datetime
24 import datetime
24 import json
25 import json
25 import logging
26 import logging
@@ -66,6 +67,10 b' assert truncate'
66 assert wrap_paragraphs
67 assert wrap_paragraphs
67
68
68
69
70 # work around webhelpers2 being a dead project that doesn't support Python 3.10
71 collections.Sequence = collections.abc.Sequence
72
73
69 #
74 #
70 # General Kallithea URL handling
75 # General Kallithea URL handling
71 #
76 #
@@ -713,6 +713,7 b' class ScmModel(object):'
713 log.error('error writing hook %s: %s', hook_file, e)
713 log.error('error writing hook %s: %s', hook_file, e)
714 elif h_type == 'pre-receive': # no longer used, so just remove any existing Kallithea hook
714 elif h_type == 'pre-receive': # no longer used, so just remove any existing Kallithea hook
715 if os.path.lexists(hook_file) and not other_hook:
715 if os.path.lexists(hook_file) and not other_hook:
716 log.warning('removing existing unused Kallithea hook %s', hook_file)
716 os.remove(hook_file)
717 os.remove(hook_file)
717
718
718
719
@@ -677,6 +677,7 b' function _comment_div_append_form($comme'
677 'class': 'btn-group'
677 'class': 'btn-group'
678 }).append(
678 }).append(
679 $('<button>', {
679 $('<button>', {
680 'type': 'button',
680 'class': 'btn btn-default btn-xs',
681 'class': 'btn btn-default btn-xs',
681 text: _TM['Retry']
682 text: _TM['Retry']
682 }).click(function() {
683 }).click(function() {
@@ -685,6 +686,7 b' function _comment_div_append_form($comme'
685 ajaxPOST(AJAX_COMMENT_URL, postData, success, failure);
686 ajaxPOST(AJAX_COMMENT_URL, postData, success, failure);
686 }),
687 }),
687 $('<button>', {
688 $('<button>', {
689 'type': 'button',
688 'class': 'btn btn-default btn-xs',
690 'class': 'btn btn-default btn-xs',
689 text: _TM['Cancel']
691 text: _TM['Cancel']
690 }).click(function() {
692 }).click(function() {
@@ -1,6 +1,5 b''
1 ${h.form(url('edit_repo_group_perms', group_name=c.repo_group.group_name))}
1 ${h.form(url('edit_repo_group_perms', group_name=c.repo_group.group_name))}
2 <div class="form">
2 <div class="form">
3 <div>
4 <div>
3 <div>
5 <table id="permissions_manage" class="table">
4 <table id="permissions_manage" class="table">
6 <tr>
5 <tr>
@@ -98,7 +97,6 b''
98 ${h.submit('save',_('Save'),class_="btn btn-default")}
97 ${h.submit('save',_('Save'),class_="btn btn-default")}
99 ${h.reset('reset',_('Reset'),class_="btn btn-default")}
98 ${h.reset('reset',_('Reset'),class_="btn btn-default")}
100 </div>
99 </div>
101 </div>
102 </div>
100 </div>
103 ${h.end_form()}
101 ${h.end_form()}
104
102
@@ -57,7 +57,9 b''
57 <td>
57 <td>
58 <i class="icon-users"></i>
58 <i class="icon-users"></i>
59 %if h.HasPermissionAny('hg.admin')():
59 %if h.HasPermissionAny('hg.admin')():
60 <a href="${h.url('edit_users_group',id=g2p.users_group.users_group_id)}">${g2p.users_group.users_group_name}</a>
60 <a href="${h.url('edit_users_group',id=g2p.users_group.users_group_id)}">
61 ${g2p.users_group.users_group_name}
62 </a>
61 %else:
63 %else:
62 ${g2p.users_group.users_group_name}
64 ${g2p.users_group.users_group_name}
63 %endif
65 %endif
@@ -80,7 +82,7 b''
80 </tr>
82 </tr>
81 </table>
83 </table>
82 </div>
84 </div>
83 <div class="form-group">
85 <div class="buttons">
84 ${h.submit('save',_('Save'),class_="btn btn-default")}
86 ${h.submit('save',_('Save'),class_="btn btn-default")}
85 ${h.reset('reset',_('Reset'),class_="btn btn-default")}
87 ${h.reset('reset',_('Reset'),class_="btn btn-default")}
86 </div>
88 </div>
@@ -1,6 +1,5 b''
1 ${h.form(url('edit_user_group_perms_update', id=c.user_group.users_group_id))}
1 ${h.form(url('edit_user_group_perms_update', id=c.user_group.users_group_id))}
2 <div class="form">
2 <div class="form">
3 <div>
4 <div>
3 <div>
5 <table id="permissions_manage" class="table">
4 <table id="permissions_manage" class="table">
6 <tr>
5 <tr>
@@ -31,7 +30,7 b''
31 <td>
30 <td>
32 %if r2p.user.username !='default':
31 %if r2p.user.username !='default':
33 <button type="button" class="btn btn-default btn-xs" onclick="ajaxActionRevoke(${r2p.user.user_id}, 'user', '${'id%s'%id(r2p.user.username)}', '${r2p.user.username}')">
32 <button type="button" class="btn btn-default btn-xs" onclick="ajaxActionRevoke(${r2p.user.user_id}, 'user', '${'id%s'%id(r2p.user.username)}', '${r2p.user.username}')">
34 <i class="icon-minus-circled"></i>${_('Revoke')}
33 <i class="icon-minus-circled"></i>${_('Revoke')}
35 </button>
34 </button>
36 %endif
35 %endif
37 </td>
36 </td>
@@ -67,7 +66,7 b''
67 %endif
66 %endif
68 </td>
67 </td>
69 <td>
68 <td>
70 <button class="btn btn-default btn-xs" onclick="ajaxActionRevoke(${g2p.user_group.users_group_id}, 'user_group', '${'id%s'%id(g2p.user_group.users_group_name)}', '${g2p.user_group.users_group_name}')">
69 <button type="button" class="btn btn-default btn-xs" onclick="ajaxActionRevoke(${g2p.user_group.users_group_id}, 'user_group', '${'id%s'%id(g2p.user_group.users_group_name)}', '${g2p.user_group.users_group_name}')">
71 <i class="icon-minus-circled"></i>${_('Revoke')}
70 <i class="icon-minus-circled"></i>${_('Revoke')}
72 </button>
71 </button>
73 </td>
72 </td>
@@ -77,7 +76,7 b''
77 <tr class="new_members last_new_member" id="add_perm_input"><td colspan="6"></td></tr>
76 <tr class="new_members last_new_member" id="add_perm_input"><td colspan="6"></td></tr>
78 <tr>
77 <tr>
79 <td colspan="6">
78 <td colspan="6">
80 <button id="add_perm" class="btn btn-link btn-xs">
79 <button type="button" id="add_perm" class="btn btn-link btn-xs">
81 <i class="icon-plus"></i>${_('Add new')}
80 <i class="icon-plus"></i>${_('Add new')}
82 </button>
81 </button>
83 </td>
82 </td>
@@ -88,7 +87,6 b''
88 ${h.submit('save',_('Save'),class_="btn btn-default")}
87 ${h.submit('save',_('Save'),class_="btn btn-default")}
89 ${h.reset('reset',_('Reset'),class_="btn btn-default")}
88 ${h.reset('reset',_('Reset'),class_="btn btn-default")}
90 </div>
89 </div>
91 </div>
92 </div>
90 </div>
93 ${h.end_form()}
91 ${h.end_form()}
94
92
@@ -23,7 +23,7 b''
23 <a class="navbar-link" href="${h.url('kallithea_project_url')}" target="_blank">Kallithea</a>,
23 <a class="navbar-link" href="${h.url('kallithea_project_url')}" target="_blank">Kallithea</a>,
24 %endif
24 %endif
25 which is
25 which is
26 <a class="navbar-link" href="${h.canonical_url('about')}#copyright">&copy; 2010&ndash;2021 by various authors &amp; licensed under GPLv3</a>.
26 <a class="navbar-link" href="${h.canonical_url('about')}#copyright">&copy; 2010&ndash;2022 by various authors &amp; licensed under GPLv3</a>.
27 %if c.issues_url:
27 %if c.issues_url:
28 &ndash; <a class="navbar-link" href="${c.issues_url}" target="_blank">${_('Support')}</a>
28 &ndash; <a class="navbar-link" href="${c.issues_url}" target="_blank">${_('Support')}</a>
29 %endif
29 %endif
@@ -4,7 +4,7 b''
4 cs_repo_name, cs_ref_name, cs_ref_type, cs_rev,
4 cs_repo_name, cs_ref_name, cs_ref_type, cs_rev,
5 file_diff_data)">
5 file_diff_data)">
6 <div class="diff-collapse">
6 <div class="diff-collapse">
7 <button data-target="${'diff-container-%s' % (id(file_diff_data))}" class="diff-collapse-button btn btn-link btn-sm">&uarr; ${_('Collapse Diff')} &uarr;</button>
7 <button type='button', data-target="${'diff-container-%s' % (id(file_diff_data))}" class="diff-collapse-button btn btn-link btn-sm">&uarr; ${_('Collapse Diff')} &uarr;</button>
8 </div>
8 </div>
9 %for id_fid, url_fid, op, a_filename, cs_filename, diff, stats in file_diff_data:
9 %for id_fid, url_fid, op, a_filename, cs_filename, diff, stats in file_diff_data:
10 ${diff_block_diffblock(id_fid, url_fid, op, diff,
10 ${diff_block_diffblock(id_fid, url_fid, op, diff,
@@ -70,7 +70,7 b''
70 <i class="icon-pencil"></i>${_('Edit')}
70 <i class="icon-pencil"></i>${_('Edit')}
71 </a>
71 </a>
72 ${webutils.form(webutils.url('delete_repo', repo_name=repo_name))}
72 ${webutils.form(webutils.url('delete_repo', repo_name=repo_name))}
73 <button name="${'remove_%s' % repo_name}" class="btn btn-default btn-xs"
73 <button type="submit" name="${'remove_%s' % repo_name}" class="btn btn-default btn-xs"
74 onclick="return confirm('${_('Confirm to delete this repository: %s') % repo_name}');">
74 onclick="return confirm('${_('Confirm to delete this repository: %s') % repo_name}');">
75 <i class="icon-trashcan"></i>${_('Delete')}
75 <i class="icon-trashcan"></i>${_('Delete')}
76 </button>
76 </button>
@@ -92,7 +92,7 b''
92 <i class="icon-pencil"></i>${_('Edit')}
92 <i class="icon-pencil"></i>${_('Edit')}
93 </a>
93 </a>
94 ${webutils.form(webutils.url('delete_user', id=user_id))}
94 ${webutils.form(webutils.url('delete_user', id=user_id))}
95 <button id="${'remove_user_%s' % user_id}" name="${'remove_user_%s' % repo_name}" class="btn btn-default btn-xs" title="${_('Delete')}"
95 <button type="submit" id="${'remove_user_%s' % user_id}" name="${'remove_user_%s' % repo_name}" class="btn btn-default btn-xs" title="${_('Delete')}"
96 onclick="return confirm('${_('Confirm to delete this user: %s') % username}');">
96 onclick="return confirm('${_('Confirm to delete this user: %s') % username}');">
97 <i class="icon-trashcan"></i>${_('Delete')}
97 <i class="icon-trashcan"></i>${_('Delete')}
98 </button>
98 </button>
@@ -104,7 +104,7 b''
104 <i class="icon-pencil"></i>${_('Edit')}
104 <i class="icon-pencil"></i>${_('Edit')}
105 </a>
105 </a>
106 ${webutils.form(webutils.url('delete_users_group', id=user_group_id))}
106 ${webutils.form(webutils.url('delete_users_group', id=user_group_id))}
107 <button id="${'remove_group_%s' % user_group_id}" name="${'remove_user_%s' % repo_name}" class="btn btn-default btn-xs" title="${_('Delete')}"
107 <button type="submit" id="${'remove_group_%s' % user_group_id}" name="${'remove_user_%s' % repo_name}" class="btn btn-default btn-xs" title="${_('Delete')}"
108 onclick="return confirm('${_('Confirm to delete this user group: %s') % user_group_name}');">
108 onclick="return confirm('${_('Confirm to delete this user group: %s') % user_group_name}');">
109 <i class="icon-trashcan"></i>${_('Delete')}
109 <i class="icon-trashcan"></i>${_('Delete')}
110 </button>
110 </button>
@@ -123,7 +123,7 b''
123 <i class="icon-pencil"></i>${_('Edit')}
123 <i class="icon-pencil"></i>${_('Edit')}
124 </a>
124 </a>
125 ${webutils.form(webutils.url('delete_repo_group', group_name=repo_group_name))}
125 ${webutils.form(webutils.url('delete_repo_group', group_name=repo_group_name))}
126 <button id="${'remove_%s' % repo_group_name}" name="${'remove_%s' % repo_group_name}" class="btn btn-default btn-xs" title="${_('Delete')}"
126 <button type="submit" id="${'remove_%s' % repo_group_name}" name="${'remove_%s' % repo_group_name}" class="btn btn-default btn-xs" title="${_('Delete')}"
127 onclick="return confirm('${ungettext('Confirm to delete this group: %s with %s repository','Confirm to delete this group: %s with %s repositories',gr_count) % (repo_group_name, gr_count)}')">
127 onclick="return confirm('${ungettext('Confirm to delete this group: %s with %s repository','Confirm to delete this group: %s with %s repositories',gr_count) % (repo_group_name, gr_count)}')">
128 <i class="icon-trashcan"></i>${_('Delete')}
128 <i class="icon-trashcan"></i>${_('Delete')}
129 </button>
129 </button>
@@ -1,26 +1,150 b''
1 from kallithea.model import meta
1 from kallithea.model import db, meta
2 from kallithea.model.repo_group import RepoGroupModel
2 from kallithea.model.repo_group import RepoGroupModel
3 from kallithea.tests.base import TestController, url
3 from kallithea.tests import base
4 from kallithea.tests.fixture import Fixture
4 from kallithea.tests.fixture import Fixture
5
5
6
6
7 fixture = Fixture()
7 fixture = Fixture()
8
8
9
9
10 class TestRepoGroupsController(TestController):
10 class TestRepoGroupsController(base.TestController):
11
12 def test_index(self):
13 self.log_user()
14 response = self.app.get(base.url('repos_groups'))
15 response.mustcontain('"records": []')
16
17 def test_new(self):
18 self.log_user()
19 response = self.app.get(base.url('new_repos_group'))
20
21 def test_create(self):
22 self.log_user()
23
24 group_name = 'foo'
25
26 # creation with form error
27 response = self.app.post(base.url('repos_groups'),
28 {'group_name': group_name,
29 '_session_csrf_secret_token': self.session_csrf_secret_token()})
30 response.mustcontain('name="group_name" type="text" value="%s"' % group_name)
31 response.mustcontain('<!-- for: group_description -->')
32
33 # creation
34 response = self.app.post(base.url('repos_groups'),
35 {'group_name': group_name,
36 'group_description': 'lala',
37 'parent_group_id': '-1',
38 'group_copy_permissions': 'True',
39 '_session_csrf_secret_token': self.session_csrf_secret_token()})
40 self.checkSessionFlash(response, 'Created repository group %s' % group_name)
41
42 # edit form
43 response = self.app.get(base.url('edit_repo_group', group_name=group_name))
44 response.mustcontain('>lala<')
45
46 # edit with form error
47 response = self.app.post(base.url('update_repos_group', group_name=group_name),
48 {'group_name': group_name,
49 '_session_csrf_secret_token': self.session_csrf_secret_token()})
50 response.mustcontain('name="group_name" type="text" value="%s"' % group_name)
51 response.mustcontain('<!-- for: group_description -->')
52
53 # edit
54 response = self.app.post(base.url('update_repos_group', group_name=group_name),
55 {'group_name': group_name,
56 'group_description': 'lolo',
57 '_session_csrf_secret_token': self.session_csrf_secret_token()})
58 self.checkSessionFlash(response, 'Updated repository group %s' % group_name)
59 response = response.follow()
60 response.mustcontain('name="group_name" type="text" value="%s"' % group_name)
61 response.mustcontain(no='<!-- for: group_description -->')
62 response.mustcontain('>lolo<')
63
64 # listing
65 response = self.app.get(base.url('repos_groups'))
66 response.mustcontain('raw_name": "%s"' % group_name)
67
68 # show
69 response = self.app.get(base.url('repos_group', group_name=group_name))
70 response.mustcontain('href="/_admin/repo_groups/%s/edit"' % group_name)
71
72 # show ignores extra trailing slashes in the URL
73 response = self.app.get(base.url('repos_group', group_name='%s//' % group_name))
74 response.mustcontain('href="/_admin/repo_groups/%s/edit"' % group_name)
75
76 # delete
77 response = self.app.post(base.url('delete_repo_group', group_name=group_name),
78 {'_session_csrf_secret_token': self.session_csrf_secret_token()})
79 self.checkSessionFlash(response, 'Removed repository group %s' % group_name)
80
81 def test_new_by_regular_user(self):
82 self.log_user(base.TEST_USER_REGULAR_LOGIN, base.TEST_USER_REGULAR_PASS)
83 response = self.app.get(base.url('new_repos_group'), status=403)
11
84
12 def test_case_insensitivity(self):
85 def test_case_insensitivity(self):
13 self.log_user()
86 self.log_user()
14 group_name = 'newgroup'
87 group_name = 'newgroup'
15 response = self.app.post(url('repos_groups'),
88 response = self.app.post(base.url('repos_groups'),
16 fixture._get_repo_group_create_params(group_name=group_name,
89 fixture._get_repo_group_create_params(group_name=group_name,
17 _session_csrf_secret_token=self.session_csrf_secret_token()))
90 _session_csrf_secret_token=self.session_csrf_secret_token()))
18 # try to create repo group with swapped case
91 # try to create repo group with swapped case
19 swapped_group_name = group_name.swapcase()
92 swapped_group_name = group_name.swapcase()
20 response = self.app.post(url('repos_groups'),
93 response = self.app.post(base.url('repos_groups'),
21 fixture._get_repo_group_create_params(group_name=swapped_group_name,
94 fixture._get_repo_group_create_params(group_name=swapped_group_name,
22 _session_csrf_secret_token=self.session_csrf_secret_token()))
95 _session_csrf_secret_token=self.session_csrf_secret_token()))
23 response.mustcontain('already exists')
96 response.mustcontain('already exists')
24
97
25 RepoGroupModel().delete(group_name)
98 RepoGroupModel().delete(group_name)
26 meta.Session().commit()
99 meta.Session().commit()
100
101 def test_subgroup_deletion(self):
102 self.log_user()
103 parent = None
104 parent_name = 'parent'
105 sub = None
106 sub_name = 'sub'
107 sub_path = 'parent/sub'
108
109 try:
110 # create parent group
111 assert db.RepoGroup.guess_instance(parent_name) is None
112 response = self.app.post(
113 base.url('repos_groups'),
114 fixture._get_repo_group_create_params(
115 group_name=parent_name,
116 _session_csrf_secret_token=self.session_csrf_secret_token()
117 )
118 )
119 parent = db.RepoGroup.guess_instance(parent_name)
120 assert parent is not None
121
122 # create sub group
123 assert db.RepoGroup.guess_instance(sub_path) is None
124 response = self.app.post(
125 base.url('repos_groups'),
126 fixture._get_repo_group_create_params(
127 group_name=sub_name,
128 parent_group_id=parent.group_id,
129 _session_csrf_secret_token=self.session_csrf_secret_token()
130 )
131 )
132 sub = db.RepoGroup.guess_instance(sub_path)
133 assert sub is not None
134
135 # delete sub group
136 response = self.app.post(
137 base.url('delete_repo_group', group_name=sub_path),
138 params={
139 '_session_csrf_secret_token': self.session_csrf_secret_token()
140 },
141 )
142 sub = db.RepoGroup.guess_instance(sub_path)
143 assert sub is None
144
145 finally:
146 if sub:
147 RepoGroupModel().delete(sub)
148 if parent:
149 RepoGroupModel().delete(parent)
150 meta.Session().commit()
@@ -50,7 +50,7 b' requirements = ['
50 "tgext.routes >= 0.2.0, < 1",
50 "tgext.routes >= 0.2.0, < 1",
51 "Beaker >= 1.10.1, < 2",
51 "Beaker >= 1.10.1, < 2",
52 "WebHelpers2 >= 2.0, < 2.1",
52 "WebHelpers2 >= 2.0, < 2.1",
53 "FormEncode >= 1.3.1, < 1.4",
53 "FormEncode >= 1.3.1, < 2.1",
54 "SQLAlchemy >= 1.2.9, < 1.4",
54 "SQLAlchemy >= 1.2.9, < 1.4",
55 "Mako >= 0.9.1, < 1.2",
55 "Mako >= 0.9.1, < 1.2",
56 "Pygments >= 2.2.0, < 2.7",
56 "Pygments >= 2.2.0, < 2.7",
@@ -63,10 +63,10 b' requirements = ['
63 "URLObject >= 2.3.4, < 2.5",
63 "URLObject >= 2.3.4, < 2.5",
64 "Routes >= 2.0, < 2.5",
64 "Routes >= 2.0, < 2.5",
65 "dulwich >= 0.19.0, < 0.20",
65 "dulwich >= 0.19.0, < 0.20",
66 "mercurial >= 5.2, < 5.9",
66 "mercurial >= 5.2, < 6.2",
67 "decorator >= 4.2.1, < 4.5",
67 "decorator >= 4.2.1, < 4.5",
68 "Paste >= 2.0.3, < 3.5",
68 "Paste >= 2.0.3, < 3.5",
69 "bleach >= 3.0, < 3.1.4",
69 "bleach >= 3.2, < 4.2",
70 "Click >= 7.0, < 8",
70 "Click >= 7.0, < 8",
71 "ipaddr >= 2.2.0, < 2.3",
71 "ipaddr >= 2.2.0, < 2.3",
72 "paginate >= 0.5, < 0.6",
72 "paginate >= 0.5, < 0.6",
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now