Version Description
The property access for shortcodes has been rewritten so that property names such as "extra.original.zip" (Datasource: ipstack) are possible now.
Download this release
Release Info
Developer | benjamin4 |
Plugin | GeoIP Detection |
Version | 3.1.0 |
Comparing to | |
See all releases |
Code changes from version 3.0.4 to 3.1.0
- ajax.php +10 -3
- composer.json +2 -1
- composer.lock +298 -2
- geoip-detect-lib.php +14 -1
- geoip-detect.php +2 -2
- js/dist/backend.f84e1103.js +1 -1
- js/dist/frontend.e6504b2e.js +26 -0
- js/dist/frontend.e6504b2e.js.map +1 -0
- js/dist/parcel.js +2 -2
- js/dist/parcel.json +2 -2
- js/dist/parcel.urls +2 -2
- js/frontend.js +16 -23
- js/localStorageAccess.js +21 -0
- js/xhr.js +56 -0
- package.json +4 -5
- readme.txt +12 -0
- shortcode.php +63 -1
- vendor/composer/autoload_classmap.php +29 -0
- vendor/composer/autoload_files.php +11 -0
- vendor/composer/autoload_psr4.php +4 -0
- vendor/composer/autoload_real.php +18 -0
- vendor/composer/autoload_static.php +57 -0
- vendor/composer/installed.json +306 -0
- vendor/paragonie/random_compat/LICENSE +22 -0
- vendor/paragonie/random_compat/build-phar.sh +5 -0
- vendor/paragonie/random_compat/composer.json +34 -0
- vendor/paragonie/random_compat/dist/random_compat.phar.pubkey +5 -0
- vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc +11 -0
- vendor/paragonie/random_compat/lib/random.php +32 -0
- vendor/paragonie/random_compat/other/build_phar.php +57 -0
- vendor/paragonie/random_compat/psalm-autoload.php +9 -0
- vendor/paragonie/random_compat/psalm.xml +19 -0
- vendor/symfony/inflector/Inflector.php +503 -0
- vendor/symfony/inflector/LICENSE +19 -0
- vendor/symfony/inflector/README.md +12 -0
- vendor/symfony/inflector/composer.json +41 -0
- vendor/symfony/polyfill-ctype/Ctype.php +227 -0
- vendor/symfony/polyfill-ctype/LICENSE +19 -0
- vendor/symfony/polyfill-ctype/README.md +12 -0
- vendor/symfony/polyfill-ctype/bootstrap.php +46 -0
- vendor/symfony/polyfill-ctype/composer.json +38 -0
- vendor/symfony/polyfill-php70/LICENSE +19 -0
- vendor/symfony/polyfill-php70/Php70.php +74 -0
- vendor/symfony/polyfill-php70/README.md +28 -0
- vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php +7 -0
- vendor/symfony/polyfill-php70/Resources/stubs/AssertionError.php +7 -0
- vendor/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php +7 -0
- vendor/symfony/polyfill-php70/Resources/stubs/Error.php +7 -0
- vendor/symfony/polyfill-php70/Resources/stubs/ParseError.php +7 -0
- vendor/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php +24 -0
- vendor/symfony/polyfill-php70/Resources/stubs/TypeError.php +7 -0
- vendor/symfony/polyfill-php70/bootstrap.php +30 -0
- vendor/symfony/polyfill-php70/composer.json +37 -0
- vendor/symfony/property-access/.gitignore +3 -0
- vendor/symfony/property-access/CHANGELOG.md +35 -0
- vendor/symfony/property-access/Exception/AccessException.php +21 -0
- vendor/symfony/property-access/Exception/ExceptionInterface.php +21 -0
- vendor/symfony/property-access/Exception/InvalidArgumentException.php +21 -0
- vendor/symfony/property-access/Exception/InvalidPropertyPathException.php +21 -0
- vendor/symfony/property-access/Exception/NoSuchIndexException.php +21 -0
- vendor/symfony/property-access/Exception/NoSuchPropertyException.php +21 -0
- vendor/symfony/property-access/Exception/OutOfBoundsException.php +21 -0
- vendor/symfony/property-access/Exception/RuntimeException.php +21 -0
- vendor/symfony/property-access/Exception/UnexpectedTypeException.php +40 -0
- vendor/symfony/property-access/LICENSE +19 -0
- vendor/symfony/property-access/PropertyAccess.php +47 -0
- vendor/symfony/property-access/PropertyAccessor.php +971 -0
- vendor/symfony/property-access/PropertyAccessorBuilder.php +131 -0
- vendor/symfony/property-access/PropertyAccessorInterface.php +114 -0
- vendor/symfony/property-access/PropertyPath.php +205 -0
- vendor/symfony/property-access/PropertyPathBuilder.php +298 -0
- vendor/symfony/property-access/PropertyPathInterface.php +86 -0
- vendor/symfony/property-access/PropertyPathIterator.php +49 -0
- vendor/symfony/property-access/PropertyPathIteratorInterface.php +34 -0
- vendor/symfony/property-access/README.md +14 -0
- vendor/symfony/property-access/StringUtil.php +51 -0
- vendor/symfony/property-access/composer.json +41 -0
- vendor/symfony/property-access/phpunit.xml.dist +31 -0
- views/lookup.php +39 -8
- views/options.php +1 -1
- yarn.lock +353 -306
ajax.php
CHANGED
@@ -109,9 +109,16 @@ function _geoip_detect_ajax_get_data($options = array()) {
|
|
109 |
|
110 |
/**
|
111 |
* Call this function if you want to register the JS script only for specific pages
|
|
|
112 |
*/
|
113 |
function geoip_detect2_enqueue_javascript() {
|
114 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
}
|
116 |
|
117 |
function _geoip_detect_parcel_get_dist_js($handle) {
|
@@ -122,7 +129,7 @@ function _geoip_detect_parcel_get_dist_js($handle) {
|
|
122 |
$urls = json_decode($json, true);
|
123 |
|
124 |
if (isset($urls[$handle]))
|
125 |
-
return '/js/dist' .$urls[$handle];
|
126 |
return false;
|
127 |
}
|
128 |
|
@@ -145,7 +152,7 @@ function _geoip_detect_register_javascript() {
|
|
145 |
return;
|
146 |
}
|
147 |
|
148 |
-
wp_register_script('geoip-detect-js', GEOIP_DETECT_PLUGIN_URI . $file_uri, array(
|
149 |
$data = [
|
150 |
'ajaxurl' => admin_url('/admin-ajax.php'),
|
151 |
'default_locales' => apply_filters('geoip_detect2_locales', null),
|
109 |
|
110 |
/**
|
111 |
* Call this function if you want to register the JS script only for specific pages
|
112 |
+
* @api
|
113 |
*/
|
114 |
function geoip_detect2_enqueue_javascript() {
|
115 |
+
if (did_action('wp_enqueue_scripts')) {
|
116 |
+
wp_enqueue_script('geoip-detect-js');
|
117 |
+
} else {
|
118 |
+
add_action('wp_enqueue_scripts', function() {
|
119 |
+
wp_enqueue_script('geoip-detect-js');
|
120 |
+
});
|
121 |
+
}
|
122 |
}
|
123 |
|
124 |
function _geoip_detect_parcel_get_dist_js($handle) {
|
129 |
$urls = json_decode($json, true);
|
130 |
|
131 |
if (isset($urls[$handle]))
|
132 |
+
return '/js/dist/' .$urls[$handle];
|
133 |
return false;
|
134 |
}
|
135 |
|
152 |
return;
|
153 |
}
|
154 |
|
155 |
+
wp_register_script('geoip-detect-js', GEOIP_DETECT_PLUGIN_URI . $file_uri, array(), GEOIP_DETECT_VERSION, true);
|
156 |
$data = [
|
157 |
'ajaxurl' => admin_url('/admin-ajax.php'),
|
158 |
'default_locales' => apply_filters('geoip_detect2_locales', null),
|
composer.json
CHANGED
@@ -14,6 +14,7 @@
|
|
14 |
],
|
15 |
"require": {
|
16 |
"geoip2/geoip2": "~2.0",
|
17 |
-
"php": ">=5.6"
|
|
|
18 |
}
|
19 |
}
|
14 |
],
|
15 |
"require": {
|
16 |
"geoip2/geoip2": "~2.0",
|
17 |
+
"php": ">=5.6",
|
18 |
+
"symfony/property-access": "^3.4"
|
19 |
}
|
20 |
}
|
composer.lock
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
5 |
"This file is @generated automatically"
|
6 |
],
|
7 |
-
"content-hash": "
|
8 |
"packages": [
|
9 |
{
|
10 |
"name": "composer/ca-bundle",
|
@@ -216,6 +216,302 @@
|
|
216 |
"description": "Internal MaxMind Web Service API",
|
217 |
"homepage": "https://github.com/maxmind/web-service-common-php",
|
218 |
"time": "2018-02-12T22:31:54+00:00"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
219 |
}
|
220 |
],
|
221 |
"packages-dev": [],
|
@@ -225,7 +521,7 @@
|
|
225 |
"prefer-stable": false,
|
226 |
"prefer-lowest": false,
|
227 |
"platform": {
|
228 |
-
"php": ">=5.
|
229 |
},
|
230 |
"platform-dev": []
|
231 |
}
|
4 |
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
5 |
"This file is @generated automatically"
|
6 |
],
|
7 |
+
"content-hash": "5c667020928ed82b17b5c3bbbf6a3c8f",
|
8 |
"packages": [
|
9 |
{
|
10 |
"name": "composer/ca-bundle",
|
216 |
"description": "Internal MaxMind Web Service API",
|
217 |
"homepage": "https://github.com/maxmind/web-service-common-php",
|
218 |
"time": "2018-02-12T22:31:54+00:00"
|
219 |
+
},
|
220 |
+
{
|
221 |
+
"name": "paragonie/random_compat",
|
222 |
+
"version": "v9.99.99",
|
223 |
+
"source": {
|
224 |
+
"type": "git",
|
225 |
+
"url": "https://github.com/paragonie/random_compat.git",
|
226 |
+
"reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
|
227 |
+
},
|
228 |
+
"dist": {
|
229 |
+
"type": "zip",
|
230 |
+
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
|
231 |
+
"reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
|
232 |
+
"shasum": ""
|
233 |
+
},
|
234 |
+
"require": {
|
235 |
+
"php": "^7"
|
236 |
+
},
|
237 |
+
"require-dev": {
|
238 |
+
"phpunit/phpunit": "4.*|5.*",
|
239 |
+
"vimeo/psalm": "^1"
|
240 |
+
},
|
241 |
+
"suggest": {
|
242 |
+
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
243 |
+
},
|
244 |
+
"type": "library",
|
245 |
+
"notification-url": "https://packagist.org/downloads/",
|
246 |
+
"license": [
|
247 |
+
"MIT"
|
248 |
+
],
|
249 |
+
"authors": [
|
250 |
+
{
|
251 |
+
"name": "Paragon Initiative Enterprises",
|
252 |
+
"email": "security@paragonie.com",
|
253 |
+
"homepage": "https://paragonie.com"
|
254 |
+
}
|
255 |
+
],
|
256 |
+
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
257 |
+
"keywords": [
|
258 |
+
"csprng",
|
259 |
+
"polyfill",
|
260 |
+
"pseudorandom",
|
261 |
+
"random"
|
262 |
+
],
|
263 |
+
"time": "2018-07-02T15:55:56+00:00"
|
264 |
+
},
|
265 |
+
{
|
266 |
+
"name": "symfony/inflector",
|
267 |
+
"version": "v4.4.10",
|
268 |
+
"source": {
|
269 |
+
"type": "git",
|
270 |
+
"url": "https://github.com/symfony/inflector.git",
|
271 |
+
"reference": "3330be44724db42f0aa493002ae63f5d29f8d5f7"
|
272 |
+
},
|
273 |
+
"dist": {
|
274 |
+
"type": "zip",
|
275 |
+
"url": "https://api.github.com/repos/symfony/inflector/zipball/3330be44724db42f0aa493002ae63f5d29f8d5f7",
|
276 |
+
"reference": "3330be44724db42f0aa493002ae63f5d29f8d5f7",
|
277 |
+
"shasum": ""
|
278 |
+
},
|
279 |
+
"require": {
|
280 |
+
"php": ">=7.1.3",
|
281 |
+
"symfony/polyfill-ctype": "~1.8"
|
282 |
+
},
|
283 |
+
"type": "library",
|
284 |
+
"extra": {
|
285 |
+
"branch-alias": {
|
286 |
+
"dev-master": "4.4-dev"
|
287 |
+
}
|
288 |
+
},
|
289 |
+
"autoload": {
|
290 |
+
"psr-4": {
|
291 |
+
"Symfony\\Component\\Inflector\\": ""
|
292 |
+
},
|
293 |
+
"exclude-from-classmap": [
|
294 |
+
"/Tests/"
|
295 |
+
]
|
296 |
+
},
|
297 |
+
"notification-url": "https://packagist.org/downloads/",
|
298 |
+
"license": [
|
299 |
+
"MIT"
|
300 |
+
],
|
301 |
+
"authors": [
|
302 |
+
{
|
303 |
+
"name": "Bernhard Schussek",
|
304 |
+
"email": "bschussek@gmail.com"
|
305 |
+
},
|
306 |
+
{
|
307 |
+
"name": "Symfony Community",
|
308 |
+
"homepage": "https://symfony.com/contributors"
|
309 |
+
}
|
310 |
+
],
|
311 |
+
"description": "Symfony Inflector Component",
|
312 |
+
"homepage": "https://symfony.com",
|
313 |
+
"keywords": [
|
314 |
+
"inflection",
|
315 |
+
"pluralize",
|
316 |
+
"singularize",
|
317 |
+
"string",
|
318 |
+
"symfony",
|
319 |
+
"words"
|
320 |
+
],
|
321 |
+
"time": "2020-05-20T08:37:50+00:00"
|
322 |
+
},
|
323 |
+
{
|
324 |
+
"name": "symfony/polyfill-ctype",
|
325 |
+
"version": "v1.17.1",
|
326 |
+
"source": {
|
327 |
+
"type": "git",
|
328 |
+
"url": "https://github.com/symfony/polyfill-ctype.git",
|
329 |
+
"reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d"
|
330 |
+
},
|
331 |
+
"dist": {
|
332 |
+
"type": "zip",
|
333 |
+
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d",
|
334 |
+
"reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d",
|
335 |
+
"shasum": ""
|
336 |
+
},
|
337 |
+
"require": {
|
338 |
+
"php": ">=5.3.3"
|
339 |
+
},
|
340 |
+
"suggest": {
|
341 |
+
"ext-ctype": "For best performance"
|
342 |
+
},
|
343 |
+
"type": "library",
|
344 |
+
"extra": {
|
345 |
+
"branch-alias": {
|
346 |
+
"dev-master": "1.17-dev"
|
347 |
+
},
|
348 |
+
"thanks": {
|
349 |
+
"name": "symfony/polyfill",
|
350 |
+
"url": "https://github.com/symfony/polyfill"
|
351 |
+
}
|
352 |
+
},
|
353 |
+
"autoload": {
|
354 |
+
"psr-4": {
|
355 |
+
"Symfony\\Polyfill\\Ctype\\": ""
|
356 |
+
},
|
357 |
+
"files": [
|
358 |
+
"bootstrap.php"
|
359 |
+
]
|
360 |
+
},
|
361 |
+
"notification-url": "https://packagist.org/downloads/",
|
362 |
+
"license": [
|
363 |
+
"MIT"
|
364 |
+
],
|
365 |
+
"authors": [
|
366 |
+
{
|
367 |
+
"name": "Gert de Pagter",
|
368 |
+
"email": "BackEndTea@gmail.com"
|
369 |
+
},
|
370 |
+
{
|
371 |
+
"name": "Symfony Community",
|
372 |
+
"homepage": "https://symfony.com/contributors"
|
373 |
+
}
|
374 |
+
],
|
375 |
+
"description": "Symfony polyfill for ctype functions",
|
376 |
+
"homepage": "https://symfony.com",
|
377 |
+
"keywords": [
|
378 |
+
"compatibility",
|
379 |
+
"ctype",
|
380 |
+
"polyfill",
|
381 |
+
"portable"
|
382 |
+
],
|
383 |
+
"time": "2020-06-06T08:46:27+00:00"
|
384 |
+
},
|
385 |
+
{
|
386 |
+
"name": "symfony/polyfill-php70",
|
387 |
+
"version": "v1.17.1",
|
388 |
+
"source": {
|
389 |
+
"type": "git",
|
390 |
+
"url": "https://github.com/symfony/polyfill-php70.git",
|
391 |
+
"reference": "471b096aede7025bace8eb356b9ac801aaba7e2d"
|
392 |
+
},
|
393 |
+
"dist": {
|
394 |
+
"type": "zip",
|
395 |
+
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/471b096aede7025bace8eb356b9ac801aaba7e2d",
|
396 |
+
"reference": "471b096aede7025bace8eb356b9ac801aaba7e2d",
|
397 |
+
"shasum": ""
|
398 |
+
},
|
399 |
+
"require": {
|
400 |
+
"paragonie/random_compat": "~1.0|~2.0|~9.99",
|
401 |
+
"php": ">=5.3.3"
|
402 |
+
},
|
403 |
+
"type": "library",
|
404 |
+
"extra": {
|
405 |
+
"branch-alias": {
|
406 |
+
"dev-master": "1.17-dev"
|
407 |
+
},
|
408 |
+
"thanks": {
|
409 |
+
"name": "symfony/polyfill",
|
410 |
+
"url": "https://github.com/symfony/polyfill"
|
411 |
+
}
|
412 |
+
},
|
413 |
+
"autoload": {
|
414 |
+
"psr-4": {
|
415 |
+
"Symfony\\Polyfill\\Php70\\": ""
|
416 |
+
},
|
417 |
+
"files": [
|
418 |
+
"bootstrap.php"
|
419 |
+
],
|
420 |
+
"classmap": [
|
421 |
+
"Resources/stubs"
|
422 |
+
]
|
423 |
+
},
|
424 |
+
"notification-url": "https://packagist.org/downloads/",
|
425 |
+
"license": [
|
426 |
+
"MIT"
|
427 |
+
],
|
428 |
+
"authors": [
|
429 |
+
{
|
430 |
+
"name": "Nicolas Grekas",
|
431 |
+
"email": "p@tchwork.com"
|
432 |
+
},
|
433 |
+
{
|
434 |
+
"name": "Symfony Community",
|
435 |
+
"homepage": "https://symfony.com/contributors"
|
436 |
+
}
|
437 |
+
],
|
438 |
+
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
|
439 |
+
"homepage": "https://symfony.com",
|
440 |
+
"keywords": [
|
441 |
+
"compatibility",
|
442 |
+
"polyfill",
|
443 |
+
"portable",
|
444 |
+
"shim"
|
445 |
+
],
|
446 |
+
"time": "2020-06-06T08:46:27+00:00"
|
447 |
+
},
|
448 |
+
{
|
449 |
+
"name": "symfony/property-access",
|
450 |
+
"version": "v3.4.42",
|
451 |
+
"source": {
|
452 |
+
"type": "git",
|
453 |
+
"url": "https://github.com/symfony/property-access.git",
|
454 |
+
"reference": "e1a6c91c0007e45bc1beba929c76548ca9fe8a85"
|
455 |
+
},
|
456 |
+
"dist": {
|
457 |
+
"type": "zip",
|
458 |
+
"url": "https://api.github.com/repos/symfony/property-access/zipball/e1a6c91c0007e45bc1beba929c76548ca9fe8a85",
|
459 |
+
"reference": "e1a6c91c0007e45bc1beba929c76548ca9fe8a85",
|
460 |
+
"shasum": ""
|
461 |
+
},
|
462 |
+
"require": {
|
463 |
+
"php": "^5.5.9|>=7.0.8",
|
464 |
+
"symfony/inflector": "~3.1|~4.0",
|
465 |
+
"symfony/polyfill-php70": "~1.0"
|
466 |
+
},
|
467 |
+
"require-dev": {
|
468 |
+
"symfony/cache": "~3.1|~4.0"
|
469 |
+
},
|
470 |
+
"suggest": {
|
471 |
+
"psr/cache-implementation": "To cache access methods."
|
472 |
+
},
|
473 |
+
"type": "library",
|
474 |
+
"extra": {
|
475 |
+
"branch-alias": {
|
476 |
+
"dev-master": "3.4-dev"
|
477 |
+
}
|
478 |
+
},
|
479 |
+
"autoload": {
|
480 |
+
"psr-4": {
|
481 |
+
"Symfony\\Component\\PropertyAccess\\": ""
|
482 |
+
},
|
483 |
+
"exclude-from-classmap": [
|
484 |
+
"/Tests/"
|
485 |
+
]
|
486 |
+
},
|
487 |
+
"notification-url": "https://packagist.org/downloads/",
|
488 |
+
"license": [
|
489 |
+
"MIT"
|
490 |
+
],
|
491 |
+
"authors": [
|
492 |
+
{
|
493 |
+
"name": "Fabien Potencier",
|
494 |
+
"email": "fabien@symfony.com"
|
495 |
+
},
|
496 |
+
{
|
497 |
+
"name": "Symfony Community",
|
498 |
+
"homepage": "https://symfony.com/contributors"
|
499 |
+
}
|
500 |
+
],
|
501 |
+
"description": "Symfony PropertyAccess Component",
|
502 |
+
"homepage": "https://symfony.com",
|
503 |
+
"keywords": [
|
504 |
+
"access",
|
505 |
+
"array",
|
506 |
+
"extraction",
|
507 |
+
"index",
|
508 |
+
"injection",
|
509 |
+
"object",
|
510 |
+
"property",
|
511 |
+
"property path",
|
512 |
+
"reflection"
|
513 |
+
],
|
514 |
+
"time": "2020-05-29T00:04:36+00:00"
|
515 |
}
|
516 |
],
|
517 |
"packages-dev": [],
|
521 |
"prefer-stable": false,
|
522 |
"prefer-lowest": false,
|
523 |
"platform": {
|
524 |
+
"php": ">=5.6"
|
525 |
},
|
526 |
"platform-dev": []
|
527 |
}
|
geoip-detect-lib.php
CHANGED
@@ -492,4 +492,17 @@ function geoip_detect_format_localtime($timestamp = 0) {
|
|
492 |
$format = get_option('date_format') . ' '. get_option('time_format');
|
493 |
|
494 |
return get_date_from_gmt ( date( 'Y-m-d H:i:s', $timestamp ), $format);
|
495 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
492 |
$format = get_option('date_format') . ' '. get_option('time_format');
|
493 |
|
494 |
return get_date_from_gmt ( date( 'Y-m-d H:i:s', $timestamp ), $format);
|
495 |
+
}
|
496 |
+
|
497 |
+
function _geoip_str_begins_with($string, $startString)
|
498 |
+
{
|
499 |
+
$len = mb_strlen($startString);
|
500 |
+
return (mb_substr($string, 0, $len) === $startString);
|
501 |
+
}
|
502 |
+
|
503 |
+
function _geoip_str_ends_with($string, $startString)
|
504 |
+
{
|
505 |
+
$len = mb_strlen($startString);
|
506 |
+
//if ($len === 0) return true; // Not sure what is "expected behavior"
|
507 |
+
return (mb_substr($string, -$len) === $startString);
|
508 |
+
}
|
geoip-detect.php
CHANGED
@@ -5,7 +5,7 @@ Plugin URI: http://www.yellowtree.de
|
|
5 |
Description: Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.
|
6 |
Author: Yellow Tree (Benjamin Pick)
|
7 |
Author URI: http://www.yellowtree.de
|
8 |
-
Version: 3.0
|
9 |
License: GPLv3 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
11 |
Text Domain: geoip-detect
|
@@ -16,7 +16,7 @@ Requires WP: 4.0
|
|
16 |
Requires PHP: 5.6
|
17 |
*/
|
18 |
|
19 |
-
define('GEOIP_DETECT_VERSION', '3.0
|
20 |
|
21 |
/*
|
22 |
Copyright 2013-2020 Yellow Tree, Siegen, Germany
|
5 |
Description: Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.
|
6 |
Author: Yellow Tree (Benjamin Pick)
|
7 |
Author URI: http://www.yellowtree.de
|
8 |
+
Version: 3.1.0
|
9 |
License: GPLv3 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
11 |
Text Domain: geoip-detect
|
16 |
Requires PHP: 5.6
|
17 |
*/
|
18 |
|
19 |
+
define('GEOIP_DETECT_VERSION', '3.1.0');
|
20 |
|
21 |
/*
|
22 |
Copyright 2013-2020 Yellow Tree, Siegen, Germany
|
js/dist/backend.f84e1103.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"gP7L":[function(require,module,exports) {
|
2 |
|
3 |
},{}]},{},["gP7L"], null)
|
4 |
-
//# sourceMappingURL
|
1 |
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"gP7L":[function(require,module,exports) {
|
2 |
|
3 |
},{}]},{},["gP7L"], null)
|
4 |
+
//# sourceMappingURL=backend.f84e1103.js.map
|
js/dist/frontend.e6504b2e.js
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"LNzP":[function(require,module,exports) {
|
2 |
+
function o(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?module.exports=o=function(o){return typeof o}:module.exports=o=function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},o(t)}module.exports=o;
|
3 |
+
},{}],"KA2S":[function(require,module,exports) {
|
4 |
+
var t=function(t){"use strict";var r,e=Object.prototype,n=e.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,r,e,n){var o=r&&r.prototype instanceof v?r:v,i=Object.create(o.prototype),a=new k(n||[]);return i._invoke=function(t,r,e){var n=f;return function(o,i){if(n===l)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw i;return N()}for(e.method=o,e.arg=i;;){var a=e.delegate;if(a){var c=_(a,e);if(c){if(c===y)continue;return c}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(n===f)throw n=p,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);n=l;var u=h(t,r,e);if("normal"===u.type){if(n=e.done?p:s,u.arg===y)continue;return{value:u.arg,done:e.done}}"throw"===u.type&&(n=p,e.method="throw",e.arg=u.arg)}}}(t,e,a),i}function h(t,r,e){try{return{type:"normal",arg:t.call(r,e)}}catch(n){return{type:"throw",arg:n}}}t.wrap=u;var f="suspendedStart",s="suspendedYield",l="executing",p="completed",y={};function v(){}function d(){}function g(){}var m={};m[i]=function(){return this};var w=Object.getPrototypeOf,L=w&&w(w(G([])));L&&L!==e&&n.call(L,i)&&(m=L);var x=g.prototype=v.prototype=Object.create(m);function E(t){["next","throw","return"].forEach(function(r){t[r]=function(t){return this._invoke(r,t)}})}function b(t,r){var e;this._invoke=function(o,i){function a(){return new r(function(e,a){!function e(o,i,a,c){var u=h(t[o],t,i);if("throw"!==u.type){var f=u.arg,s=f.value;return s&&"object"==typeof s&&n.call(s,"__await")?r.resolve(s.__await).then(function(t){e("next",t,a,c)},function(t){e("throw",t,a,c)}):r.resolve(s).then(function(t){f.value=t,a(f)},function(t){return e("throw",t,a,c)})}c(u.arg)}(o,i,e,a)})}return e=e?e.then(a,a):a()}}function _(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,_(t,e),"throw"===e.method))return y;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return y}var o=h(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,y;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,y):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,y)}function j(t){var r={tryLoc:t[0]};1 in t&&(r.catchLoc=t[1]),2 in t&&(r.finallyLoc=t[2],r.afterLoc=t[3]),this.tryEntries.push(r)}function O(t){var r=t.completion||{};r.type="normal",delete r.arg,t.completion=r}function k(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(j,this),this.reset(!0)}function G(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function e(){for(;++o<t.length;)if(n.call(t,o))return e.value=t[o],e.done=!1,e;return e.value=r,e.done=!0,e};return a.next=a}}return{next:N}}function N(){return{value:r,done:!0}}return d.prototype=x.constructor=g,g.constructor=d,g[c]=d.displayName="GeneratorFunction",t.isGeneratorFunction=function(t){var r="function"==typeof t&&t.constructor;return!!r&&(r===d||"GeneratorFunction"===(r.displayName||r.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,g):(t.__proto__=g,c in t||(t[c]="GeneratorFunction")),t.prototype=Object.create(x),t},t.awrap=function(t){return{__await:t}},E(b.prototype),b.prototype[a]=function(){return this},t.AsyncIterator=b,t.async=function(r,e,n,o,i){void 0===i&&(i=Promise);var a=new b(u(r,e,n,o),i);return t.isGeneratorFunction(e)?a:a.next().then(function(t){return t.done?t.value:a.next()})},E(x),x[c]="Generator",x[i]=function(){return this},x.toString=function(){return"[object Generator]"},t.keys=function(t){var r=[];for(var e in t)r.push(e);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=G,k.prototype={constructor:k,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(O),!t)for(var e in this)"t"===e.charAt(0)&&n.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=r)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function o(n,o){return c.type="throw",c.arg=t,e.next=n,o&&(e.method="next",e.arg=r),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),h=n.call(a,"finallyLoc");if(u&&h){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!h)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,r){for(var e=this.tryEntries.length-1;e>=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=r&&r<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=r,i?(this.method="next",this.next=i.finallyLoc,y):this.complete(a)},complete:function(t,r){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&r&&(this.next=r),y},finish:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),O(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;O(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:G(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}("object"==typeof module?module.exports:{});try{regeneratorRuntime=t}catch(r){Function("r","regeneratorRuntime = r")(t)}
|
5 |
+
},{}],"m4eR":[function(require,module,exports) {
|
6 |
+
module.exports=require("regenerator-runtime");
|
7 |
+
},{"regenerator-runtime":"KA2S"}],"fwsn":[function(require,module,exports) {
|
8 |
+
function n(n,t,o,r,e,i,u){try{var c=n[i](u),v=c.value}catch(a){return void o(a)}c.done?t(v):Promise.resolve(v).then(r,e)}function t(t){return function(){var o=this,r=arguments;return new Promise(function(e,i){var u=t.apply(o,r);function c(t){n(u,e,i,c,v,"next",t)}function v(t){n(u,e,i,c,v,"throw",t)}c(void 0)})}}module.exports=t;
|
9 |
+
},{}],"ZBnv":[function(require,module,exports) {
|
10 |
+
function n(n,o){if(!(n instanceof o))throw new TypeError("Cannot call a class as a function")}module.exports=n;
|
11 |
+
},{}],"NoOd":[function(require,module,exports) {
|
12 |
+
function e(e,r){for(var n=0;n<r.length;n++){var t=r[n];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,t.key,t)}}function r(r,n,t){return n&&e(r.prototype,n),t&&e(r,t),r}module.exports=r;
|
13 |
+
},{}],"AuD4":[function(require,module,exports) {
|
14 |
+
var global = arguments[3];
|
15 |
+
var define;
|
16 |
+
var t,e=arguments[3],n=r(require("@babel/runtime/helpers/typeof"));function r(t){return t&&t.__esModule?t:{default:t}}(function(){var r,o="Expected a function",u="__lodash_hash_undefined__",i=500,a=1/0,c="[object AsyncFunction]",l="[object Function]",s="[object GeneratorFunction]",f="[object Null]",p="[object Proxy]",h="[object Symbol]",_="[object Undefined]",d=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,y=/^\w*$/,v=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,b=/\\(\\)?/g,g=/^\[object .+?Constructor\]$/,j="object"==(void 0===e?"undefined":(0,n.default)(e))&&e&&e.Object===Object&&e,m="object"==("undefined"==typeof self?"undefined":(0,n.default)(self))&&self&&self.Object===Object&&self,O=j||m||Function("return this")(),z="object"==("undefined"==typeof exports?"undefined":(0,n.default)(exports))&&exports&&!exports.nodeType&&exports,x=z&&"object"==("undefined"==typeof module?"undefined":(0,n.default)(module))&&module&&!module.nodeType&&module;var S,w=Array.prototype,$=Function.prototype,A=Object.prototype,F=O["__core-js_shared__"],E=$.toString,T=A.hasOwnProperty,C=(S=/[^.]+$/.exec(F&&F.keys&&F.keys.IE_PROTO||""))?"Symbol(src)_1."+S:"",P=A.toString,k=RegExp("^"+E.call(T).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),R=O.Symbol,q=w.splice,I=R?R.toStringTag:r,M=Y(O,"Map"),N=Y(Object,"create"),G=R?R.prototype:r,L=G?G.toString:r;function U(){}function V(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function B(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function D(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function H(t,e){for(var n=t.length;n--;)if(ut(t[n][0],e))return n;return-1}function J(t,e){for(var o=0,u=(e=function(t,e){if(it(t))return t;return function(t,e){if(it(t))return!1;var r=(0,n.default)(t);if("number"==r||"symbol"==r||"boolean"==r||null==t||st(t))return!0;return y.test(t)||!d.test(t)||null!=e&&t in Object(e)}(t,e)?[t]:nt(ft(t))}(e,t)).length;null!=t&&o<u;)t=t[rt(e[o++])];return o&&o==u?t:r}function K(t){return null==t?t===r?_:f:I&&I in Object(t)?function(t){var e=T.call(t,I),n=t[I];try{t[I]=r;var o=!0}catch(i){}var u=P.call(t);o&&(e?t[I]=n:delete t[I]);return u}(t):function(t){return P.call(t)}(t)}function Q(t){return!(!ct(t)||(e=t,C&&C in e))&&(at(t)?k:g).test(function(t){if(null!=t){try{return E.call(t)}catch(e){}try{return t+""}catch(e){}}return""}(t));var e}function W(t){if("string"==typeof t)return t;if(it(t))return function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}(t,W)+"";if(st(t))return L?L.call(t):"";var e=t+"";return"0"==e&&1/t==-a?"-0":e}function X(t,e){var r,o,u=t.__data__;return r=e,("string"==(o=(0,n.default)(r))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==r:null===r)?u["string"==typeof e?"string":"hash"]:u.map}function Y(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Q(n)?n:r}V.prototype.clear=function(){this.__data__=N?N(null):{},this.size=0},V.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},V.prototype.get=function(t){var e=this.__data__;if(N){var n=e[t];return n===u?r:n}return T.call(e,t)?e[t]:r},V.prototype.has=function(t){var e=this.__data__;return N?e[t]!==r:T.call(e,t)},V.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=N&&e===r?u:e,this},B.prototype.clear=function(){this.__data__=[],this.size=0},B.prototype.delete=function(t){var e=this.__data__,n=H(e,t);return!(n<0||(n==e.length-1?e.pop():q.call(e,n,1),--this.size,0))},B.prototype.get=function(t){var e=this.__data__,n=H(e,t);return n<0?r:e[n][1]},B.prototype.has=function(t){return H(this.__data__,t)>-1},B.prototype.set=function(t,e){var n=this.__data__,r=H(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},D.prototype.clear=function(){this.size=0,this.__data__={hash:new V,map:new(M||B),string:new V}},D.prototype.delete=function(t){var e=X(this,t).delete(t);return this.size-=e?1:0,e},D.prototype.get=function(t){return X(this,t).get(t)},D.prototype.has=function(t){return X(this,t).has(t)},D.prototype.set=function(t,e){var n=X(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this};var Z,tt,et,nt=(Z=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(v,function(t,n,r,o){e.push(r?o.replace(b,"$1"):n||t)}),e},tt=ot(Z,function(t){return et.size===i&&et.clear(),t}),et=tt.cache,tt);function rt(t){if("string"==typeof t||st(t))return t;var e=t+"";return"0"==e&&1/t==-a?"-0":e}function ot(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(o);var n=function n(){var r=arguments,o=e?e.apply(this,r):r[0],u=n.cache;if(u.has(o))return u.get(o);var i=t.apply(this,r);return n.cache=u.set(o,i)||u,i};return n.cache=new(ot.Cache||D),n}function ut(t,e){return t===e||t!=t&&e!=e}ot.Cache=D;var it=Array.isArray;function at(t){if(!ct(t))return!1;var e=K(t);return e==l||e==s||e==c||e==p}function ct(t){var e=(0,n.default)(t);return null!=t&&("object"==e||"function"==e)}function lt(t){return null!=t&&"object"==(0,n.default)(t)}function st(t){return"symbol"==(0,n.default)(t)||lt(t)&&K(t)==h}function ft(t){return null==t?"":W(t)}U.memoize=ot,U.eq=ut,U.get=function(t,e,n){var o=null==t?r:J(t,e);return o===r?n:o},U.isArray=it,U.isFunction=at,U.isObject=ct,U.isObjectLike=lt,U.isSymbol=st,U.toString=ft,U.VERSION="4.17.5","function"==typeof t&&"object"==(0,n.default)(t.amd)&&t.amd?(O._=U,t(function(){return U})):x?((x.exports=U)._=U,z._=U):O._=U}).call(void 0);
|
17 |
+
},{"@babel/runtime/helpers/typeof":"LNzP"}],"yK6K":[function(require,module,exports) {
|
18 |
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("@babel/runtime/helpers/classCallCheck")),t=a(require("@babel/runtime/helpers/createClass")),r=a(require("@babel/runtime/helpers/typeof")),n=a(require("../lodash.custom"));function a(e){return e&&e.__esModule?e:{default:e}}function u(e){if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=o(e))){var t=0,r=function(){};return{s:r,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,a,u=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return u=e.done,e},e:function(e){l=!0,a=e},f:function(){try{u||null==n.return||n.return()}finally{if(l)throw a}}}}function o(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var i=function(e,t){if("object"==(0,r.default)(e)&&"object"==(0,r.default)(e.names)){"string"==typeof t&&(t=[t]);var n,a=u(t);try{for(a.s();!(n=a.n()).done;){var o=n.value;if(e.names[o])return e.names[o]}}catch(l){a.e(l)}finally{a.f()}return""}return e},s=function(){function r(t,n){(0,e.default)(this,r),this.data={},this.default_locales=[],this.data=t||{},this.default_locales=n||["en"]}return(0,t.default)(r,[{key:"get",value:function(e,t){return this.get_with_locales(e,this.default_locales,t)}},{key:"get_with_locales",value:function(e,t,r){".name"===e.substr(-5)&&(e=e.substr(0,e.length-5));var a=n.default.get(this.data,e,r);return a=i(a,t)}},{key:"error",value:function(){return n.default.get(this.data,"extra.error","")}}]),r}(),f=s;exports.default=f;
|
19 |
+
},{"@babel/runtime/helpers/classCallCheck":"ZBnv","@babel/runtime/helpers/createClass":"NoOd","@babel/runtime/helpers/typeof":"LNzP","../lodash.custom":"AuD4"}],"d429":[function(require,module,exports) {
|
20 |
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getLocalStorage=exports.setLocalStorage=void 0;var e=function(e,t,r){var a={value:t,expires_at:(new Date).getTime()+1e3*r/1};localStorage.setItem(e.toString(),JSON.stringify(a))};exports.setLocalStorage=e;var t=function(e){var t=null;try{t=JSON.parse(localStorage.getItem(e.toString()))}catch(r){return null}if(null!==t){if(!(null!==t.expires_at&&t.expires_at<(new Date).getTime()))return t.value;localStorage.removeItem(e.toString())}return null};exports.getLocalStorage=t;
|
21 |
+
},{}],"BTyy":[function(require,module,exports) {
|
22 |
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.makeJSONRequest=exports.makeRequest=void 0;var e=r(require("@babel/runtime/regenerator")),t=r(require("@babel/runtime/helpers/asyncToGenerator"));function r(e){return e&&e.__esModule?e:{default:e}}var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",r=new XMLHttpRequest;return new Promise(function(n,u){r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r):u({status:r.status,statusText:r.statusText,request:r}))},r.open(t||"GET",e,!0),r.send()})};exports.makeRequest=n;var u=function(e){try{return JSON.parse(e)}catch(t){return e}},s=function(){var r=(0,t.default)(e.default.mark(function t(r){var s,a,o=arguments;return e.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return s=o.length>1&&void 0!==o[1]?o[1]:"GET",e.prev=1,e.next=4,n(r,s);case 4:return a=e.sent,e.abrupt("return",u(a.responseText));case 8:return e.prev=8,e.t0=e.catch(1),e.abrupt("return",u(e.t0.request.responseText));case 11:case"end":return e.stop()}},t,null,[[1,8]])}));return function(e){return r.apply(this,arguments)}}();exports.makeJSONRequest=s;
|
23 |
+
},{"@babel/runtime/regenerator":"m4eR","@babel/runtime/helpers/asyncToGenerator":"fwsn"}],"ZVsn":[function(require,module,exports) {
|
24 |
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.get_info=f;var e=c(require("@babel/runtime/helpers/typeof")),t=c(require("@babel/runtime/regenerator")),r=c(require("@babel/runtime/helpers/asyncToGenerator")),n=c(require("./models/record")),o=require("./localStorageAccess"),a=c(require("./lodash.custom")),i=require("./xhr");function c(e){return e&&e.__esModule?e:{default:e}}window.geoip_detect||console.error("Geoip-detect: the JS variable window.geoip_detect is missing - this is needed for the options");var s=window.geoip_detect.options||{},u=null;function d(){if(!u){var e=s.ajaxurl+"?action=geoip_detect2_get_info_from_current_ip";u=(0,i.makeJSONRequest)(e)}return u}function l(){return p.apply(this,arguments)}function p(){return(p=(0,r.default)(t.default.mark(function e(){var r;return t.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=!1,!s.cookie_name){e.next=5;break}if(!(r=(0,o.getLocalStorage)(s.cookie_name))||!r.extra){e.next=5;break}return e.abrupt("return",r);case 5:return e.prev=5,e.next=8,d();case 8:r=e.sent,e.next=14;break;case 11:e.prev=11,e.t0=e.catch(5),r=e.t0.responseJSON||e.t0;case 14:return s.cookie_name&&(0,o.setLocalStorage)(s.cookie_name,r,24*s.cookie_duration_in_days*60*60),e.abrupt("return",r);case 16:case"end":return e.stop()}},e,null,[[5,11]])}))).apply(this,arguments)}function f(){return _.apply(this,arguments)}function _(){return(_=(0,r.default)(t.default.mark(function r(){var o,a;return t.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l();case 2:return o=t.sent,"object"!==(0,e.default)(o)&&(console.error("Geoip-detect: Record should be an object, not a "+(0,e.default)(o),o),o={extra:{error:o||"Network error, look at the original server response ..."}}),a=new n.default(o,s.default_locales),t.abrupt("return",a);case 6:case"end":return t.stop()}},r)}))).apply(this,arguments)}function g(){return b.apply(this,arguments)}function b(){return(b=(0,r.default)(t.default.mark(function e(){var r,n,o,a,i,c,s;return t.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,f();case 2:for((r=e.sent).error()&&console.error("Geodata Error (could not add CSS-classes to body): "+r.error()),n={country:r.get("country.iso_code"),"country-is-in-european-union":r.get("country.is_in_european_union"),continent:r.get("continent.code"),province:r.get("most_specific_subdivision.iso_code")},o=document.getElementsByTagName("body")[0],a=0,i=Object.keys(n);a<i.length;a++)c=i[a],(s=n[c])&&("string"==typeof s?o.classList.add("geoip-".concat(c,"-").concat(s)):o.classList.add("geoip-".concat(c)));case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}s.do_body_classes&&g(),window.geoip_detect.get_info=f;
|
25 |
+
},{"@babel/runtime/helpers/typeof":"LNzP","@babel/runtime/regenerator":"m4eR","@babel/runtime/helpers/asyncToGenerator":"fwsn","./models/record":"yK6K","./localStorageAccess":"d429","./lodash.custom":"AuD4","./xhr":"BTyy"}]},{},["ZVsn"], null)
|
26 |
+
//# sourceMappingURL=frontend.e6504b2e.js.map
|
js/dist/frontend.e6504b2e.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
{"version":3,"sources":["node_modules/@babel/runtime/helpers/typeof.js","node_modules/regenerator-runtime/runtime.js","node_modules/@babel/runtime/regenerator/index.js","node_modules/@babel/runtime/helpers/asyncToGenerator.js","node_modules/@babel/runtime/helpers/classCallCheck.js","node_modules/@babel/runtime/helpers/createClass.js","js/lodash.custom.js","js/models/record.js","js/localStorageAccess.js","js/xhr.js","js/frontend.js"],"names":["undefined","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","INFINITY","asyncTag","funcTag","genTag","nullTag","proxyTag","symbolTag","undefinedTag","reIsDeepProp","reIsPlainProp","rePropName","reEscapeChar","reIsHostCtor","freeGlobal","global","Object","freeSelf","self","root","Function","freeExports","exports","nodeType","freeModule","module","arrayProto","uid","Array","prototype","funcProto","objectProto","coreJsData","funcToString","toString","hasOwnProperty","maskSrcKey","exec","keys","IE_PROTO","nativeObjectToString","reIsNative","RegExp","call","replace","Symbol","splice","symToStringTag","toStringTag","Map","getNative","nativeCreate","symbolProto","symbolToString","lodash","Hash","entries","index","length","clear","entry","set","ListCache","MapCache","assocIndexOf","array","key","eq","baseGet","object","path","castPath","value","isArray","isKey","type","isSymbol","test","stringToPath","toKey","baseGetTag","getRawTag","isOwn","tag","unmasked","e","result","objectToString","baseIsNative","isObject","func","isFunction","toSource","isMasked","baseToString","arrayMap","iteratee","getMapData","map","data","__data__","isKeyable","getValue","hashClear","size","hashDelete","has","get","hashGet","hashHas","hashSet","listCacheClear","listCacheDelete","pop","listCacheGet","listCacheHas","listCacheSet","push","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","cache","string","charCodeAt","match","number","quote","subString","memoize","resolver","TypeError","memoized","args","arguments","apply","Cache","other","isObjectLike","defaultValue","VERSION","define","amd","_","Record","_get_localized","ret","locales","names","locale","default_locales","prop","default_value","get_with_locales","substr","setLocalStorage","variable","ttl_sec","expires_at","Date","getTime","localStorage","setItem","JSON","stringify","getLocalStorage","parse","getItem","removeItem","makeRequest","url","method","request","XMLHttpRequest","Promise","resolve","reject","onreadystatechange","readyState","status","statusText","open","send","jsonDecodeIfPossible","str","makeJSONRequest","responseText","window","geoip_detect","console","error","options","ajaxPromise","get_info_raw","ajaxurl","get_info_cached","response","cookie_name","extra","responseJSON","cookie_duration_in_days","get_info","record","add_body_classes","css_classes","country","continent","province","body","document","getElementsByTagName","classList","add","do_body_classes"],"mappings":"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","file":"frontend.e6504b2e.js","sourceRoot":"../..","sourcesContent":["function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = require(\"regenerator-runtime\");\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","/**\n * @license\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash include=\"get\" -o js/lodash.custom.js`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.5';\n\n /** Error message constants. */\n var FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0;\n\n /** `Object#toString` result references. */\n var asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n nullTag = '[object Null]',\n proxyTag = '[object Proxy]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]';\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = root['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Symbol = root.Symbol,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n /* Built-in method references that are verified to be native. */\n var Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash() {\n // No operation performed.\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.memoize = memoize;\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.eq = eq;\n lodash.get = get;\n lodash.isArray = isArray;\n lodash.isFunction = isFunction;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isSymbol = isSymbol;\n lodash.toString = toString;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n /*--------------------------------------------------------------------------*/\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = lodash;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return lodash;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = lodash)._ = lodash;\n // Export for CommonJS support.\n freeExports._ = lodash;\n }\n else {\n // Export to the global object.\n root._ = lodash;\n }\n}.call(this));\n","\nimport _ from '../lodash.custom';\n\n\nconst _get_localized = function(ret, locales) {\n if (typeof(ret) == 'object' && typeof(ret.names) == 'object') {\n if (typeof(locales) == 'string') {\n locales = [ locales ];\n }\n\n for (let locale of locales) {\n if (ret.names[locale]) {\n return ret.names[locale];\n }\n }\n \n return '';\n }\n return ret;\n}\n\n\n\nclass Record {\n data = {};\n default_locales = [];\n\n constructor(data, default_locales) {\n this.data = data || {};\n this.default_locales = default_locales || ['en']; \n }\n\n get(prop, default_value) {\n return this.get_with_locales(prop, this.default_locales, default_value);\n }\n \n \n get_with_locales(prop, locales, default_value) {\n // Treat pseudo-property 'name' as if it never existed\n if (prop.substr(-5) === '.name') {\n prop = prop.substr(0, prop.length - 5);\n }\n\n // TODO handle most_specific_subdivision (here or in PHP)?\n\n let ret = _.get(this.data, prop, default_value);\n\n // Localize property, if possible\n ret = _get_localized(ret, locales);\n\n return ret;\n }\n \n /**\n * Get error message, if any\n * @return string Error Message\n */\n error() {\n return _.get(this.data, 'extra.error', '');\n }\n}\n\nexport default Record;","export const setLocalStorage = function (variable, value, ttl_sec) {\n var data = { value: value, expires_at: new Date().getTime() + (ttl_sec * 1000) / 1 };\n localStorage.setItem(variable.toString(), JSON.stringify(data));\n};\n\nexport const getLocalStorage = function (variable) {\n let data = null;\n try {\n data = JSON.parse(localStorage.getItem(variable.toString()));\n } catch(e) {\n return null;\n }\n if (data !== null) {\n if (data.expires_at !== null && data.expires_at < new Date().getTime()) {\n localStorage.removeItem(variable.toString());\n } else {\n return data.value;\n }\n }\n return null;\n}\n","// @see https://gomakethings.com/promise-based-xhr/\n\nexport const makeRequest = function (url, method = 'GET') {\n\n // Create the XHR request\n var request = new XMLHttpRequest();\n\n // Return it as a Promise\n return new Promise(function (resolve, reject) {\n\n // Setup our listener to process compeleted requests\n request.onreadystatechange = function () {\n\n // Only run if the request is complete\n if (request.readyState !== 4) return;\n\n // Process the response\n if (request.status >= 200 && request.status < 300) {\n // If successful\n resolve(request);\n } else {\n // If failed\n reject({\n status: request.status,\n statusText: request.statusText,\n request: request\n });\n }\n\n };\n\n // Setup our HTTP request\n request.open(method || 'GET', url, true);\n\n // Send the request\n request.send();\n\n });\n};\n\nconst jsonDecodeIfPossible = function(str) {\n try {\n return JSON.parse(str);\n } catch(e) {\n return str;\n }\n}\n\nexport const makeJSONRequest = async function(url, method = 'GET') {\n try {\n const request = await makeRequest(url, method);\n return jsonDecodeIfPossible(request.responseText);\n } catch(e) {\n return jsonDecodeIfPossible(e.request.responseText);\n }\n}\n","import Record from './models/record';\nimport { getLocalStorage, setLocalStorage } from './localStorageAccess';\nimport _ from './lodash.custom';\nimport { makeJSONRequest } from './xhr';\n\nif (!window.geoip_detect) {\n console.error('Geoip-detect: the JS variable window.geoip_detect is missing - this is needed for the options')\n}\nconst options = window.geoip_detect.options || {};\n\nlet ajaxPromise = null;\n\nfunction get_info_raw() {\n if (!ajaxPromise) {\n // Do Ajax Request only once per page load\n const url = options.ajaxurl + '?action=geoip_detect2_get_info_from_current_ip'\n\n ajaxPromise = makeJSONRequest(url);\n }\n\n return ajaxPromise;\n}\n\nasync function get_info_cached() {\n let response = false;\n\n // 1) Load Info from cookie cache, if possible\n if (options.cookie_name) {\n response = getLocalStorage(options.cookie_name)\n if (response && response.extra) {\n // This might be an error object - cache it anyway\n return response;\n }\n }\n\n // 2) Get response\n try {\n response = await get_info_raw();\n } catch(err) {\n response = err.responseJSON || err;\n }\n\n // 3) Save info to cookie cache\n if (options.cookie_name) {\n setLocalStorage(options.cookie_name, response, options.cookie_duration_in_days * 24 * 60 * 60)\n }\n\n return response;\n}\n\n\nexport async function get_info() {\n let response = await get_info_cached();\n\n if (typeof(response) !== 'object') {\n console.error('Geoip-detect: Record should be an object, not a ' + typeof(response), response);\n response = { 'extra': { 'error': response || 'Network error, look at the original server response ...' }};\n }\n\n const record = new Record(response, options.default_locales);\n return record;\n}\n\nasync function add_body_classes() {\n const record = await get_info();\n\n if (record.error()) {\n console.error('Geodata Error (could not add CSS-classes to body): ' + record.error());\n }\n\n const css_classes = {\n country: record.get('country.iso_code'),\n 'country-is-in-european-union': record.get('country.is_in_european_union'),\n continent: record.get('continent.code'),\n province: record.get('most_specific_subdivision.iso_code'),\n };\n\n const body = document.getElementsByTagName('body')[0];\n for(let key of Object.keys(css_classes)) {\n const value = css_classes[key];\n if (value) {\n if (typeof(value) == 'string') {\n body.classList.add(`geoip-${key}-${value}`);\n } else {\n body.classList.add(`geoip-${key}`);\n }\n }\n }\n}\nif (options.do_body_classes) {\n add_body_classes();\n}\n\n// Extend window object \nwindow.geoip_detect.get_info = get_info;"]}
|
js/dist/parcel.js
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"mzZo":[function(require,module,exports) {
|
2 |
-
module.exports={frontendJS:"
|
3 |
-
},{"./js/frontend.js":[["frontend.
|
1 |
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"mzZo":[function(require,module,exports) {
|
2 |
+
module.exports={frontendJS:"frontend.e6504b2e.js",backendJS:"backend.f84e1103.js"};
|
3 |
+
},{"./js/frontend.js":[["frontend.e6504b2e.js","ZVsn"],"frontend.e6504b2e.js.map","ZVsn"],"./js/backend.js":[["backend.f84e1103.js","gP7L"],"backend.f84e1103.js.map","gP7L"]}]},{},[], null)
|
js/dist/parcel.json
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
{
|
2 |
-
"frontendJS": "
|
3 |
-
"backendJS": "
|
4 |
}
|
1 |
{
|
2 |
+
"frontendJS": "frontend.e6504b2e.js",
|
3 |
+
"backendJS": "backend.f84e1103.js"
|
4 |
}
|
js/dist/parcel.urls
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
frontendJS:
|
2 |
-
backendJS:
|
1 |
+
frontendJS: frontend.e6504b2e.js
|
2 |
+
backendJS: backend.f84e1103.js
|
js/frontend.js
CHANGED
@@ -1,14 +1,10 @@
|
|
1 |
import Record from './models/record';
|
2 |
-
import
|
3 |
-
|
4 |
-
|
5 |
-
console.error('Geoip-detect: window.jQuery is missing!');
|
6 |
-
}
|
7 |
-
const $ = window.jQuery;
|
8 |
-
|
9 |
|
10 |
if (!window.geoip_detect) {
|
11 |
-
console.error('Geoip-detect: window.geoip_detect')
|
12 |
}
|
13 |
const options = window.geoip_detect.options || {};
|
14 |
|
@@ -17,13 +13,9 @@ let ajaxPromise = null;
|
|
17 |
function get_info_raw() {
|
18 |
if (!ajaxPromise) {
|
19 |
// Do Ajax Request only once per page load
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
data: {
|
24 |
-
action: 'geoip_detect2_get_info_from_current_ip'
|
25 |
-
}
|
26 |
-
});
|
27 |
}
|
28 |
|
29 |
return ajaxPromise;
|
@@ -34,7 +26,11 @@ async function get_info_cached() {
|
|
34 |
|
35 |
// 1) Load Info from cookie cache, if possible
|
36 |
if (options.cookie_name) {
|
37 |
-
response =
|
|
|
|
|
|
|
|
|
38 |
}
|
39 |
|
40 |
// 2) Get response
|
@@ -46,11 +42,7 @@ async function get_info_cached() {
|
|
46 |
|
47 |
// 3) Save info to cookie cache
|
48 |
if (options.cookie_name) {
|
49 |
-
|
50 |
-
if (options.cookie_duration_in_days) {
|
51 |
-
cookie_options.expires = options.cookie_duration_in_days;
|
52 |
-
}
|
53 |
-
Cookies.set(options.cookie_name, JSON.stringify(response), cookie_options);
|
54 |
}
|
55 |
|
56 |
return response;
|
@@ -83,13 +75,14 @@ async function add_body_classes() {
|
|
83 |
province: record.get('most_specific_subdivision.iso_code'),
|
84 |
};
|
85 |
|
|
|
86 |
for(let key of Object.keys(css_classes)) {
|
87 |
const value = css_classes[key];
|
88 |
if (value) {
|
89 |
if (typeof(value) == 'string') {
|
90 |
-
|
91 |
} else {
|
92 |
-
|
93 |
}
|
94 |
}
|
95 |
}
|
1 |
import Record from './models/record';
|
2 |
+
import { getLocalStorage, setLocalStorage } from './localStorageAccess';
|
3 |
+
import _ from './lodash.custom';
|
4 |
+
import { makeJSONRequest } from './xhr';
|
|
|
|
|
|
|
|
|
5 |
|
6 |
if (!window.geoip_detect) {
|
7 |
+
console.error('Geoip-detect: the JS variable window.geoip_detect is missing - this is needed for the options')
|
8 |
}
|
9 |
const options = window.geoip_detect.options || {};
|
10 |
|
13 |
function get_info_raw() {
|
14 |
if (!ajaxPromise) {
|
15 |
// Do Ajax Request only once per page load
|
16 |
+
const url = options.ajaxurl + '?action=geoip_detect2_get_info_from_current_ip'
|
17 |
+
|
18 |
+
ajaxPromise = makeJSONRequest(url);
|
|
|
|
|
|
|
|
|
19 |
}
|
20 |
|
21 |
return ajaxPromise;
|
26 |
|
27 |
// 1) Load Info from cookie cache, if possible
|
28 |
if (options.cookie_name) {
|
29 |
+
response = getLocalStorage(options.cookie_name)
|
30 |
+
if (response && response.extra) {
|
31 |
+
// This might be an error object - cache it anyway
|
32 |
+
return response;
|
33 |
+
}
|
34 |
}
|
35 |
|
36 |
// 2) Get response
|
42 |
|
43 |
// 3) Save info to cookie cache
|
44 |
if (options.cookie_name) {
|
45 |
+
setLocalStorage(options.cookie_name, response, options.cookie_duration_in_days * 24 * 60 * 60)
|
|
|
|
|
|
|
|
|
46 |
}
|
47 |
|
48 |
return response;
|
75 |
province: record.get('most_specific_subdivision.iso_code'),
|
76 |
};
|
77 |
|
78 |
+
const body = document.getElementsByTagName('body')[0];
|
79 |
for(let key of Object.keys(css_classes)) {
|
80 |
const value = css_classes[key];
|
81 |
if (value) {
|
82 |
if (typeof(value) == 'string') {
|
83 |
+
body.classList.add(`geoip-${key}-${value}`);
|
84 |
} else {
|
85 |
+
body.classList.add(`geoip-${key}`);
|
86 |
}
|
87 |
}
|
88 |
}
|
js/localStorageAccess.js
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
export const setLocalStorage = function (variable, value, ttl_sec) {
|
2 |
+
var data = { value: value, expires_at: new Date().getTime() + (ttl_sec * 1000) / 1 };
|
3 |
+
localStorage.setItem(variable.toString(), JSON.stringify(data));
|
4 |
+
};
|
5 |
+
|
6 |
+
export const getLocalStorage = function (variable) {
|
7 |
+
let data = null;
|
8 |
+
try {
|
9 |
+
data = JSON.parse(localStorage.getItem(variable.toString()));
|
10 |
+
} catch(e) {
|
11 |
+
return null;
|
12 |
+
}
|
13 |
+
if (data !== null) {
|
14 |
+
if (data.expires_at !== null && data.expires_at < new Date().getTime()) {
|
15 |
+
localStorage.removeItem(variable.toString());
|
16 |
+
} else {
|
17 |
+
return data.value;
|
18 |
+
}
|
19 |
+
}
|
20 |
+
return null;
|
21 |
+
}
|
js/xhr.js
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// @see https://gomakethings.com/promise-based-xhr/
|
2 |
+
|
3 |
+
export const makeRequest = function (url, method = 'GET') {
|
4 |
+
|
5 |
+
// Create the XHR request
|
6 |
+
var request = new XMLHttpRequest();
|
7 |
+
|
8 |
+
// Return it as a Promise
|
9 |
+
return new Promise(function (resolve, reject) {
|
10 |
+
|
11 |
+
// Setup our listener to process compeleted requests
|
12 |
+
request.onreadystatechange = function () {
|
13 |
+
|
14 |
+
// Only run if the request is complete
|
15 |
+
if (request.readyState !== 4) return;
|
16 |
+
|
17 |
+
// Process the response
|
18 |
+
if (request.status >= 200 && request.status < 300) {
|
19 |
+
// If successful
|
20 |
+
resolve(request);
|
21 |
+
} else {
|
22 |
+
// If failed
|
23 |
+
reject({
|
24 |
+
status: request.status,
|
25 |
+
statusText: request.statusText,
|
26 |
+
request: request
|
27 |
+
});
|
28 |
+
}
|
29 |
+
|
30 |
+
};
|
31 |
+
|
32 |
+
// Setup our HTTP request
|
33 |
+
request.open(method || 'GET', url, true);
|
34 |
+
|
35 |
+
// Send the request
|
36 |
+
request.send();
|
37 |
+
|
38 |
+
});
|
39 |
+
};
|
40 |
+
|
41 |
+
const jsonDecodeIfPossible = function(str) {
|
42 |
+
try {
|
43 |
+
return JSON.parse(str);
|
44 |
+
} catch(e) {
|
45 |
+
return str;
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
export const makeJSONRequest = async function(url, method = 'GET') {
|
50 |
+
try {
|
51 |
+
const request = await makeRequest(url, method);
|
52 |
+
return jsonDecodeIfPossible(request.responseText);
|
53 |
+
} catch(e) {
|
54 |
+
return jsonDecodeIfPossible(e.request.responseText);
|
55 |
+
}
|
56 |
+
}
|
package.json
CHANGED
@@ -9,22 +9,21 @@
|
|
9 |
"scripts": {
|
10 |
"clean": "rm -rf .cache",
|
11 |
"build-lodash": "lodash include=get -o js/lodash.custom.js",
|
12 |
-
"start": "rm -rf js/dist && parcel parcel.urls --out-dir js/dist",
|
13 |
-
"build": "rm -rf js/dist && parcel build parcel.urls --out-dir js/dist"
|
14 |
},
|
15 |
"private": false,
|
16 |
"dependencies": {
|
17 |
"@babel/runtime": ">=7.7.2",
|
18 |
"babel-plugin-transform-class-properties": "^6.24.1",
|
19 |
-
"emoji-flags": "matiassingers/emoji-flags#master"
|
20 |
-
"js-cookie": "^2.2.1"
|
21 |
},
|
22 |
"devDependencies": {
|
23 |
"@babel/core": ">=7.7.2",
|
24 |
"@babel/plugin-transform-runtime": ">=7.6.2",
|
25 |
"babel-plugin-transform-runtime": ">=6.23.0",
|
26 |
"eslint": "^6.6.0",
|
27 |
-
"lodash-cli": "
|
28 |
"parcel-bundler": ">=1.12.4",
|
29 |
"parcel-plugin-assets-list": ">=1.7.1"
|
30 |
}
|
9 |
"scripts": {
|
10 |
"clean": "rm -rf .cache",
|
11 |
"build-lodash": "lodash include=get -o js/lodash.custom.js",
|
12 |
+
"start": "rm -rf js/dist && parcel parcel.urls --out-dir js/dist --public-url .",
|
13 |
+
"build": "rm -rf js/dist && parcel build parcel.urls --out-dir js/dist --public-url ."
|
14 |
},
|
15 |
"private": false,
|
16 |
"dependencies": {
|
17 |
"@babel/runtime": ">=7.7.2",
|
18 |
"babel-plugin-transform-class-properties": "^6.24.1",
|
19 |
+
"emoji-flags": "matiassingers/emoji-flags#master"
|
|
|
20 |
},
|
21 |
"devDependencies": {
|
22 |
"@babel/core": ">=7.7.2",
|
23 |
"@babel/plugin-transform-runtime": ">=7.6.2",
|
24 |
"babel-plugin-transform-runtime": ">=6.23.0",
|
25 |
"eslint": "^6.6.0",
|
26 |
+
"lodash-cli": ">=4.17.5",
|
27 |
"parcel-bundler": ">=1.12.4",
|
28 |
"parcel-plugin-assets-list": ">=1.7.1"
|
29 |
}
|
readme.txt
CHANGED
@@ -108,6 +108,9 @@ Does `geoip_detect2_get_info_from_current_ip()` return the same country, regardl
|
|
108 |
|
109 |
== Upgrade Notice ==
|
110 |
|
|
|
|
|
|
|
111 |
= 3.0.3.1 =
|
112 |
Hotfix for the Manual download Maxmind datasource.
|
113 |
The Plugin was renamed to Geolocation IP Detection in order to prevent trademark issues.
|
@@ -150,6 +153,14 @@ New: Shortcode for showing/hiding content!
|
|
150 |
|
151 |
== Changelog ==
|
152 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
= 3.0.4 =
|
154 |
* When an error occurs during the Cron update of the Maxmind database, it is now shown in the backend.
|
155 |
* FIX: All times shown in the Admin backend now use the timezone set by Wordpress
|
@@ -195,6 +206,7 @@ https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-g
|
|
195 |
= 2.12.0 =
|
196 |
* NEW: It is now possible to use ipstack.com as a data source.
|
197 |
* The Backend Lookup UI now can show all properties and you can choose if you want to see the PHP, Shortcode or JS syntax.
|
|
|
198 |
|
199 |
= 2.11.2 =
|
200 |
* The auto-updater of the Maxmind City Lite source now updates more often (every 1-2weeks) in order to get more accurate data.
|
108 |
|
109 |
== Upgrade Notice ==
|
110 |
|
111 |
+
= 3.1.0 =
|
112 |
+
The property access for shortcodes has been rewritten so that property names such as "extra.original.zip" (Datasource: ipstack) are possible now.
|
113 |
+
|
114 |
= 3.0.3.1 =
|
115 |
Hotfix for the Manual download Maxmind datasource.
|
116 |
The Plugin was renamed to Geolocation IP Detection in order to prevent trademark issues.
|
153 |
|
154 |
== Changelog ==
|
155 |
|
156 |
+
= 3.1.0 =
|
157 |
+
* FIX: The property access for shortcodes has been rewritten so that property names such as "extra.original.zip" (Datasource: ipstack) are possible now.
|
158 |
+
* FIX: The lookup page now also shows subdivisions (e.g. for IPs from Uk that have 2 levels of subdivisions)
|
159 |
+
* NEW: The (CF7) shortcode `[geoip_detect2_countries mycountry include_blank flag tel]` now adds the flag emoji (or ISO code in Windows) and the telephone international code to the country name
|
160 |
+
* FIX: AJAX mode: Using localStorage instead of Cookies for caching (as we hit the Cookie size limitation sometimes)
|
161 |
+
* FIX: AJAX mode: Remove jQuery dependency
|
162 |
+
* FIX: AJAX mode: `geoip_detect2_enqueue_javascript()` can be used now in function.php or templates (see [PHP Example](https://github.com/yellowtree/geoip-detect/wiki/API-Usage-Examples#ajax-enqueue-the-js-file-manually))
|
163 |
+
|
164 |
= 3.0.4 =
|
165 |
* When an error occurs during the Cron update of the Maxmind database, it is now shown in the backend.
|
166 |
* FIX: All times shown in the Admin backend now use the timezone set by Wordpress
|
206 |
= 2.12.0 =
|
207 |
* NEW: It is now possible to use ipstack.com as a data source.
|
208 |
* The Backend Lookup UI now can show all properties and you can choose if you want to see the PHP, Shortcode or JS syntax.
|
209 |
+
* The property "extra->original" now contains the original Web Answer array from the datasources ipstack & hostinfo
|
210 |
|
211 |
= 2.11.2 =
|
212 |
* The auto-updater of the Maxmind City Lite source now updates more often (every 1-2weeks) in order to get more accurate data.
|
shortcode.php
CHANGED
@@ -120,6 +120,41 @@ add_shortcode('geoip_detect2', 'geoip_detect2_shortcode');
|
|
120 |
* @throws \RuntimeException (if Property name invalid)
|
121 |
*/
|
122 |
function geoip_detect2_shortcode_get_property($userInfo, $propertyName) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
$return = '';
|
124 |
$properties = explode('.', $propertyName);
|
125 |
if (count($properties) == 1) {
|
@@ -147,6 +182,8 @@ function geoip_detect2_shortcode_get_property($userInfo, $propertyName) {
|
|
147 |
}
|
148 |
return $return;
|
149 |
}
|
|
|
|
|
150 |
|
151 |
function geoip_detect2_shortcode_client_ip() {
|
152 |
$client_ip = geoip_detect2_get_client_ip();
|
@@ -199,6 +236,9 @@ add_shortcode('geoip_detect2_get_current_source_description', 'geoip_detect2_sho
|
|
199 |
* @param string $selected Which country to select by default (2-letter ISO code.) (optional. If not set, the country will be detected by client ip.)
|
200 |
* @param string $default Default Value that will be used if country cannot be detected (optional)
|
201 |
* @param string $include_blank If this value contains 'true', a empty value will be prepended ('---', i.e. no country) (optional)
|
|
|
|
|
|
|
202 |
*
|
203 |
* @return string The generated HTML
|
204 |
*/
|
@@ -229,6 +269,22 @@ function geoip_detect2_shortcode_country_select($attr) {
|
|
229 |
$countryInfo = new YellowTree\GeoipDetect\Geonames\CountryInformation();
|
230 |
$countries = $countryInfo->getAllCountries($locales);
|
231 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
/**
|
233 |
* Filter: geoip_detect2_shortcode_country_select_countries
|
234 |
* Change the list of countries that should show up in the select box.
|
@@ -282,6 +338,9 @@ function _geoip_detect_flatten_html_attr($attr) {
|
|
282 |
* `[geoip_detect2_countries mycountry include_blank]`
|
283 |
* Country names are in the current site language. User can also choose '---' for no country at all.
|
284 |
*
|
|
|
|
|
|
|
285 |
* `[geoip_detect2_countries mycountry "US"]`
|
286 |
* "United States" is preselected, there is no visitor IP detection going on here
|
287 |
*
|
@@ -311,7 +370,10 @@ function geoip_detect2_shortcode_country_select_wpcf7($tag) {
|
|
311 |
'lang' => $tag->get_option('lang', '', true),
|
312 |
'selected' => $default,
|
313 |
'default' => $tag->get_option('default', '', true),
|
|
|
|
|
314 |
);
|
|
|
315 |
$html = geoip_detect2_shortcode_country_select($attr);
|
316 |
|
317 |
$html = sprintf(
|
@@ -547,7 +609,7 @@ add_shortcode('geoip_detect2_user_info', 'geoip_detect_shortcode_user_info');
|
|
547 |
* `[geoip_detect2_show_if property="location.timeZone" property_value="Europe/Berlin"]TEXT[/geoip_detect2_show_if]`
|
548 |
*
|
549 |
* Show TEXT if the visitor is in the european union
|
550 |
-
* `[geoip_detect2_show_if property="country.isInEuropeanUnion" property_value="true"]
|
551 |
*
|
552 |
* LIMITATIONS:
|
553 |
* - You cannot nest several of these shortcodes within one another. Instead, seperate them into several blocks of shortcodes.
|
120 |
* @throws \RuntimeException (if Property name invalid)
|
121 |
*/
|
122 |
function geoip_detect2_shortcode_get_property($userInfo, $propertyName) {
|
123 |
+
/*
|
124 |
+
if (version_compare ( PHP_VERSION, '7.2.5', '<' )) {
|
125 |
+
return _deprecated_geoip_detect2_shortcode_get_property($userInfo, $propertyName);
|
126 |
+
}
|
127 |
+
*/
|
128 |
+
$propertyAccessor = \Symfony\Component\PropertyAccess\PropertyAccess::createPropertyAccessorBuilder()
|
129 |
+
->enableExceptionOnInvalidIndex()
|
130 |
+
->getPropertyAccessor();
|
131 |
+
|
132 |
+
if (_geoip_str_begins_with($propertyName, 'extra.original.')) {
|
133 |
+
$properties = explode('.', $propertyName);
|
134 |
+
$properties = array_slice($properties, 2);
|
135 |
+
$propertyName = 'extra.original[' . implode($properties, '][') . ']';
|
136 |
+
}
|
137 |
+
|
138 |
+
// subdivisions.0.isoCode -> subdivisions[0].isoCode
|
139 |
+
$propertyName = preg_replace('/\.([0-9])/', '[$1]', $propertyName);
|
140 |
+
|
141 |
+
try {
|
142 |
+
return $propertyAccessor->getValue($userInfo, $propertyName);
|
143 |
+
} catch(\Exception $e) {
|
144 |
+
throw new \RuntimeException('Invalid property name.');
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Get property from object by string (old version, deprecated)
|
150 |
+
* Remove when PHP <= 7.1 not supported anymore (EOL has passed end 2019, but Maxmind lib is still compatible 5.6)
|
151 |
+
*
|
152 |
+
* @param YellowTree\GeoipDetect\DataSources\City $userInfo GeoIP information object
|
153 |
+
* @param string $propertyName property name, e.g. "city.isoCode"
|
154 |
+
* @return string|\GeoIp2\Record\AbstractRecord Property Value
|
155 |
+
* @throws \RuntimeException (if Property name invalid)
|
156 |
+
*
|
157 |
+
function _deprecated_geoip_detect2_shortcode_get_property($userInfo, $propertyName) {
|
158 |
$return = '';
|
159 |
$properties = explode('.', $propertyName);
|
160 |
if (count($properties) == 1) {
|
182 |
}
|
183 |
return $return;
|
184 |
}
|
185 |
+
*/
|
186 |
+
|
187 |
|
188 |
function geoip_detect2_shortcode_client_ip() {
|
189 |
$client_ip = geoip_detect2_get_client_ip();
|
236 |
* @param string $selected Which country to select by default (2-letter ISO code.) (optional. If not set, the country will be detected by client ip.)
|
237 |
* @param string $default Default Value that will be used if country cannot be detected (optional)
|
238 |
* @param string $include_blank If this value contains 'true', a empty value will be prepended ('---', i.e. no country) (optional)
|
239 |
+
* @param bool $flag If a flag should be added before the country name (In Windows, there are no flags, ISO-Country codes instead. This is a design choice by Windows.)
|
240 |
+
* @param bool $tel If the international code should be added after the country name
|
241 |
+
|
242 |
*
|
243 |
* @return string The generated HTML
|
244 |
*/
|
269 |
$countryInfo = new YellowTree\GeoipDetect\Geonames\CountryInformation();
|
270 |
$countries = $countryInfo->getAllCountries($locales);
|
271 |
|
272 |
+
if (!empty($attr['flag'])) {
|
273 |
+
array_walk($countries, function(&$value, $key) use($countryInfo) {
|
274 |
+
$flag = $countryInfo->getFlagEmoji($key);
|
275 |
+
$value = $flag . ' ' . $value;
|
276 |
+
});
|
277 |
+
}
|
278 |
+
|
279 |
+
if (!empty($attr['tel'])) {
|
280 |
+
array_walk($countries, function(&$value, $key) use($countryInfo) {
|
281 |
+
$tel = $countryInfo->getTelephonePrefix($key);
|
282 |
+
if ($tel) {
|
283 |
+
$value = $value . ' (' . $tel . ')';
|
284 |
+
}
|
285 |
+
});
|
286 |
+
}
|
287 |
+
|
288 |
/**
|
289 |
* Filter: geoip_detect2_shortcode_country_select_countries
|
290 |
* Change the list of countries that should show up in the select box.
|
338 |
* `[geoip_detect2_countries mycountry include_blank]`
|
339 |
* Country names are in the current site language. User can also choose '---' for no country at all.
|
340 |
*
|
341 |
+
* `[geoip_detect2_countries mycountry flag tel]`
|
342 |
+
* Country names have a UTF-8 flag in front of the country name, and the (+1) internation phone code after it
|
343 |
+
*
|
344 |
* `[geoip_detect2_countries mycountry "US"]`
|
345 |
* "United States" is preselected, there is no visitor IP detection going on here
|
346 |
*
|
370 |
'lang' => $tag->get_option('lang', '', true),
|
371 |
'selected' => $default,
|
372 |
'default' => $tag->get_option('default', '', true),
|
373 |
+
'flag' => $tag->has_option('flag'),
|
374 |
+
'tel' => $tag->has_option('tel'),
|
375 |
);
|
376 |
+
|
377 |
$html = geoip_detect2_shortcode_country_select($attr);
|
378 |
|
379 |
$html = sprintf(
|
609 |
* `[geoip_detect2_show_if property="location.timeZone" property_value="Europe/Berlin"]TEXT[/geoip_detect2_show_if]`
|
610 |
*
|
611 |
* Show TEXT if the visitor is in the european union
|
612 |
+
* `[geoip_detect2_show_if property="country.isInEuropeanUnion" property_value="true"]TEXT[/geoip_detect2_show_if]`
|
613 |
*
|
614 |
* LIMITATIONS:
|
615 |
* - You cannot nest several of these shortcodes within one another. Instead, seperate them into several blocks of shortcodes.
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -6,7 +6,11 @@ $vendorDir = dirname(dirname(__FILE__));
|
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
|
|
|
|
9 |
'Composer\\CaBundle\\CaBundle' => $vendorDir . '/composer/ca-bundle/src/CaBundle.php',
|
|
|
|
|
10 |
'GeoIp2\\Database\\Reader' => $vendorDir . '/geoip2/geoip2/src/Database/Reader.php',
|
11 |
'GeoIp2\\Exception\\AddressNotFoundException' => $vendorDir . '/geoip2/geoip2/src/Exception/AddressNotFoundException.php',
|
12 |
'GeoIp2\\Exception\\AuthenticationException' => $vendorDir . '/geoip2/geoip2/src/Exception/AuthenticationException.php',
|
@@ -54,4 +58,29 @@ return array(
|
|
54 |
'MaxMind\\WebService\\Http\\CurlRequest' => $vendorDir . '/maxmind/web-service-common/src/WebService/Http/CurlRequest.php',
|
55 |
'MaxMind\\WebService\\Http\\Request' => $vendorDir . '/maxmind/web-service-common/src/WebService/Http/Request.php',
|
56 |
'MaxMind\\WebService\\Http\\RequestFactory' => $vendorDir . '/maxmind/web-service-common/src/WebService/Http/RequestFactory.php',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
);
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
9 |
+
'ArithmeticError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php',
|
10 |
+
'AssertionError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
|
11 |
'Composer\\CaBundle\\CaBundle' => $vendorDir . '/composer/ca-bundle/src/CaBundle.php',
|
12 |
+
'DivisionByZeroError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php',
|
13 |
+
'Error' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/Error.php',
|
14 |
'GeoIp2\\Database\\Reader' => $vendorDir . '/geoip2/geoip2/src/Database/Reader.php',
|
15 |
'GeoIp2\\Exception\\AddressNotFoundException' => $vendorDir . '/geoip2/geoip2/src/Exception/AddressNotFoundException.php',
|
16 |
'GeoIp2\\Exception\\AuthenticationException' => $vendorDir . '/geoip2/geoip2/src/Exception/AuthenticationException.php',
|
58 |
'MaxMind\\WebService\\Http\\CurlRequest' => $vendorDir . '/maxmind/web-service-common/src/WebService/Http/CurlRequest.php',
|
59 |
'MaxMind\\WebService\\Http\\Request' => $vendorDir . '/maxmind/web-service-common/src/WebService/Http/Request.php',
|
60 |
'MaxMind\\WebService\\Http\\RequestFactory' => $vendorDir . '/maxmind/web-service-common/src/WebService/Http/RequestFactory.php',
|
61 |
+
'ParseError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ParseError.php',
|
62 |
+
'SessionUpdateTimestampHandlerInterface' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php',
|
63 |
+
'Symfony\\Component\\Inflector\\Inflector' => $vendorDir . '/symfony/inflector/Inflector.php',
|
64 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\AccessException' => $vendorDir . '/symfony/property-access/Exception/AccessException.php',
|
65 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/property-access/Exception/ExceptionInterface.php',
|
66 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/property-access/Exception/InvalidArgumentException.php',
|
67 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\InvalidPropertyPathException' => $vendorDir . '/symfony/property-access/Exception/InvalidPropertyPathException.php',
|
68 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\NoSuchIndexException' => $vendorDir . '/symfony/property-access/Exception/NoSuchIndexException.php',
|
69 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\NoSuchPropertyException' => $vendorDir . '/symfony/property-access/Exception/NoSuchPropertyException.php',
|
70 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\OutOfBoundsException' => $vendorDir . '/symfony/property-access/Exception/OutOfBoundsException.php',
|
71 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\RuntimeException' => $vendorDir . '/symfony/property-access/Exception/RuntimeException.php',
|
72 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\UnexpectedTypeException' => $vendorDir . '/symfony/property-access/Exception/UnexpectedTypeException.php',
|
73 |
+
'Symfony\\Component\\PropertyAccess\\PropertyAccess' => $vendorDir . '/symfony/property-access/PropertyAccess.php',
|
74 |
+
'Symfony\\Component\\PropertyAccess\\PropertyAccessor' => $vendorDir . '/symfony/property-access/PropertyAccessor.php',
|
75 |
+
'Symfony\\Component\\PropertyAccess\\PropertyAccessorBuilder' => $vendorDir . '/symfony/property-access/PropertyAccessorBuilder.php',
|
76 |
+
'Symfony\\Component\\PropertyAccess\\PropertyAccessorInterface' => $vendorDir . '/symfony/property-access/PropertyAccessorInterface.php',
|
77 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPath' => $vendorDir . '/symfony/property-access/PropertyPath.php',
|
78 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPathBuilder' => $vendorDir . '/symfony/property-access/PropertyPathBuilder.php',
|
79 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPathInterface' => $vendorDir . '/symfony/property-access/PropertyPathInterface.php',
|
80 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPathIterator' => $vendorDir . '/symfony/property-access/PropertyPathIterator.php',
|
81 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPathIteratorInterface' => $vendorDir . '/symfony/property-access/PropertyPathIteratorInterface.php',
|
82 |
+
'Symfony\\Component\\PropertyAccess\\StringUtil' => $vendorDir . '/symfony/property-access/StringUtil.php',
|
83 |
+
'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php',
|
84 |
+
'Symfony\\Polyfill\\Php70\\Php70' => $vendorDir . '/symfony/polyfill-php70/Php70.php',
|
85 |
+
'TypeError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/TypeError.php',
|
86 |
);
|
vendor/composer/autoload_files.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_files.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
10 |
+
'023d27dca8066ef29e6739335ea73bad' => $vendorDir . '/symfony/polyfill-php70/bootstrap.php',
|
11 |
+
);
|
vendor/composer/autoload_psr4.php
CHANGED
@@ -6,6 +6,10 @@ $vendorDir = dirname(dirname(__FILE__));
|
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
|
|
|
|
|
|
|
|
9 |
'MaxMind\\WebService\\' => array($vendorDir . '/maxmind/web-service-common/src/WebService'),
|
10 |
'MaxMind\\Exception\\' => array($vendorDir . '/maxmind/web-service-common/src/Exception'),
|
11 |
'MaxMind\\Db\\' => array($vendorDir . '/maxmind-db/reader/src/MaxMind/Db'),
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
9 |
+
'Symfony\\Polyfill\\Php70\\' => array($vendorDir . '/symfony/polyfill-php70'),
|
10 |
+
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
|
11 |
+
'Symfony\\Component\\PropertyAccess\\' => array($vendorDir . '/symfony/property-access'),
|
12 |
+
'Symfony\\Component\\Inflector\\' => array($vendorDir . '/symfony/inflector'),
|
13 |
'MaxMind\\WebService\\' => array($vendorDir . '/maxmind/web-service-common/src/WebService'),
|
14 |
'MaxMind\\Exception\\' => array($vendorDir . '/maxmind/web-service-common/src/Exception'),
|
15 |
'MaxMind\\Db\\' => array($vendorDir . '/maxmind-db/reader/src/MaxMind/Db'),
|
vendor/composer/autoload_real.php
CHANGED
@@ -47,6 +47,24 @@ class ComposerAutoloaderInite354937679ffa734a3f63544e59103dd
|
|
47 |
|
48 |
$loader->register(true);
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
return $loader;
|
51 |
}
|
52 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
$loader->register(true);
|
49 |
|
50 |
+
if ($useStaticLoader) {
|
51 |
+
$includeFiles = Composer\Autoload\ComposerStaticInite354937679ffa734a3f63544e59103dd::$files;
|
52 |
+
} else {
|
53 |
+
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
+
}
|
55 |
+
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequiree354937679ffa734a3f63544e59103dd($fileIdentifier, $file);
|
57 |
+
}
|
58 |
+
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
+
|
63 |
+
function composerRequiree354937679ffa734a3f63544e59103dd($fileIdentifier, $file)
|
64 |
+
{
|
65 |
+
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
+
require $file;
|
67 |
+
|
68 |
+
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
69 |
+
}
|
70 |
+
}
|
vendor/composer/autoload_static.php
CHANGED
@@ -6,7 +6,19 @@ namespace Composer\Autoload;
|
|
6 |
|
7 |
class ComposerStaticInite354937679ffa734a3f63544e59103dd
|
8 |
{
|
|
|
|
|
|
|
|
|
|
|
9 |
public static $prefixLengthsPsr4 = array (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
'M' =>
|
11 |
array (
|
12 |
'MaxMind\\WebService\\' => 19,
|
@@ -24,6 +36,22 @@ class ComposerStaticInite354937679ffa734a3f63544e59103dd
|
|
24 |
);
|
25 |
|
26 |
public static $prefixDirsPsr4 = array (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
'MaxMind\\WebService\\' =>
|
28 |
array (
|
29 |
0 => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService',
|
@@ -47,7 +75,11 @@ class ComposerStaticInite354937679ffa734a3f63544e59103dd
|
|
47 |
);
|
48 |
|
49 |
public static $classMap = array (
|
|
|
|
|
50 |
'Composer\\CaBundle\\CaBundle' => __DIR__ . '/..' . '/composer/ca-bundle/src/CaBundle.php',
|
|
|
|
|
51 |
'GeoIp2\\Database\\Reader' => __DIR__ . '/..' . '/geoip2/geoip2/src/Database/Reader.php',
|
52 |
'GeoIp2\\Exception\\AddressNotFoundException' => __DIR__ . '/..' . '/geoip2/geoip2/src/Exception/AddressNotFoundException.php',
|
53 |
'GeoIp2\\Exception\\AuthenticationException' => __DIR__ . '/..' . '/geoip2/geoip2/src/Exception/AuthenticationException.php',
|
@@ -95,6 +127,31 @@ class ComposerStaticInite354937679ffa734a3f63544e59103dd
|
|
95 |
'MaxMind\\WebService\\Http\\CurlRequest' => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService/Http/CurlRequest.php',
|
96 |
'MaxMind\\WebService\\Http\\Request' => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService/Http/Request.php',
|
97 |
'MaxMind\\WebService\\Http\\RequestFactory' => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService/Http/RequestFactory.php',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
);
|
99 |
|
100 |
public static function getInitializer(ClassLoader $loader)
|
6 |
|
7 |
class ComposerStaticInite354937679ffa734a3f63544e59103dd
|
8 |
{
|
9 |
+
public static $files = array (
|
10 |
+
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
11 |
+
'023d27dca8066ef29e6739335ea73bad' => __DIR__ . '/..' . '/symfony/polyfill-php70/bootstrap.php',
|
12 |
+
);
|
13 |
+
|
14 |
public static $prefixLengthsPsr4 = array (
|
15 |
+
'S' =>
|
16 |
+
array (
|
17 |
+
'Symfony\\Polyfill\\Php70\\' => 23,
|
18 |
+
'Symfony\\Polyfill\\Ctype\\' => 23,
|
19 |
+
'Symfony\\Component\\PropertyAccess\\' => 33,
|
20 |
+
'Symfony\\Component\\Inflector\\' => 28,
|
21 |
+
),
|
22 |
'M' =>
|
23 |
array (
|
24 |
'MaxMind\\WebService\\' => 19,
|
36 |
);
|
37 |
|
38 |
public static $prefixDirsPsr4 = array (
|
39 |
+
'Symfony\\Polyfill\\Php70\\' =>
|
40 |
+
array (
|
41 |
+
0 => __DIR__ . '/..' . '/symfony/polyfill-php70',
|
42 |
+
),
|
43 |
+
'Symfony\\Polyfill\\Ctype\\' =>
|
44 |
+
array (
|
45 |
+
0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
|
46 |
+
),
|
47 |
+
'Symfony\\Component\\PropertyAccess\\' =>
|
48 |
+
array (
|
49 |
+
0 => __DIR__ . '/..' . '/symfony/property-access',
|
50 |
+
),
|
51 |
+
'Symfony\\Component\\Inflector\\' =>
|
52 |
+
array (
|
53 |
+
0 => __DIR__ . '/..' . '/symfony/inflector',
|
54 |
+
),
|
55 |
'MaxMind\\WebService\\' =>
|
56 |
array (
|
57 |
0 => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService',
|
75 |
);
|
76 |
|
77 |
public static $classMap = array (
|
78 |
+
'ArithmeticError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php',
|
79 |
+
'AssertionError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
|
80 |
'Composer\\CaBundle\\CaBundle' => __DIR__ . '/..' . '/composer/ca-bundle/src/CaBundle.php',
|
81 |
+
'DivisionByZeroError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php',
|
82 |
+
'Error' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/Error.php',
|
83 |
'GeoIp2\\Database\\Reader' => __DIR__ . '/..' . '/geoip2/geoip2/src/Database/Reader.php',
|
84 |
'GeoIp2\\Exception\\AddressNotFoundException' => __DIR__ . '/..' . '/geoip2/geoip2/src/Exception/AddressNotFoundException.php',
|
85 |
'GeoIp2\\Exception\\AuthenticationException' => __DIR__ . '/..' . '/geoip2/geoip2/src/Exception/AuthenticationException.php',
|
127 |
'MaxMind\\WebService\\Http\\CurlRequest' => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService/Http/CurlRequest.php',
|
128 |
'MaxMind\\WebService\\Http\\Request' => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService/Http/Request.php',
|
129 |
'MaxMind\\WebService\\Http\\RequestFactory' => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService/Http/RequestFactory.php',
|
130 |
+
'ParseError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ParseError.php',
|
131 |
+
'SessionUpdateTimestampHandlerInterface' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php',
|
132 |
+
'Symfony\\Component\\Inflector\\Inflector' => __DIR__ . '/..' . '/symfony/inflector/Inflector.php',
|
133 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/property-access/Exception/AccessException.php',
|
134 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/property-access/Exception/ExceptionInterface.php',
|
135 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/property-access/Exception/InvalidArgumentException.php',
|
136 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\InvalidPropertyPathException' => __DIR__ . '/..' . '/symfony/property-access/Exception/InvalidPropertyPathException.php',
|
137 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\NoSuchIndexException' => __DIR__ . '/..' . '/symfony/property-access/Exception/NoSuchIndexException.php',
|
138 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\NoSuchPropertyException' => __DIR__ . '/..' . '/symfony/property-access/Exception/NoSuchPropertyException.php',
|
139 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\OutOfBoundsException' => __DIR__ . '/..' . '/symfony/property-access/Exception/OutOfBoundsException.php',
|
140 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/property-access/Exception/RuntimeException.php',
|
141 |
+
'Symfony\\Component\\PropertyAccess\\Exception\\UnexpectedTypeException' => __DIR__ . '/..' . '/symfony/property-access/Exception/UnexpectedTypeException.php',
|
142 |
+
'Symfony\\Component\\PropertyAccess\\PropertyAccess' => __DIR__ . '/..' . '/symfony/property-access/PropertyAccess.php',
|
143 |
+
'Symfony\\Component\\PropertyAccess\\PropertyAccessor' => __DIR__ . '/..' . '/symfony/property-access/PropertyAccessor.php',
|
144 |
+
'Symfony\\Component\\PropertyAccess\\PropertyAccessorBuilder' => __DIR__ . '/..' . '/symfony/property-access/PropertyAccessorBuilder.php',
|
145 |
+
'Symfony\\Component\\PropertyAccess\\PropertyAccessorInterface' => __DIR__ . '/..' . '/symfony/property-access/PropertyAccessorInterface.php',
|
146 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPath' => __DIR__ . '/..' . '/symfony/property-access/PropertyPath.php',
|
147 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPathBuilder' => __DIR__ . '/..' . '/symfony/property-access/PropertyPathBuilder.php',
|
148 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPathInterface' => __DIR__ . '/..' . '/symfony/property-access/PropertyPathInterface.php',
|
149 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPathIterator' => __DIR__ . '/..' . '/symfony/property-access/PropertyPathIterator.php',
|
150 |
+
'Symfony\\Component\\PropertyAccess\\PropertyPathIteratorInterface' => __DIR__ . '/..' . '/symfony/property-access/PropertyPathIteratorInterface.php',
|
151 |
+
'Symfony\\Component\\PropertyAccess\\StringUtil' => __DIR__ . '/..' . '/symfony/property-access/StringUtil.php',
|
152 |
+
'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php',
|
153 |
+
'Symfony\\Polyfill\\Php70\\Php70' => __DIR__ . '/..' . '/symfony/polyfill-php70/Php70.php',
|
154 |
+
'TypeError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/TypeError.php',
|
155 |
);
|
156 |
|
157 |
public static function getInitializer(ClassLoader $loader)
|
vendor/composer/installed.json
CHANGED
@@ -217,5 +217,311 @@
|
|
217 |
],
|
218 |
"description": "Internal MaxMind Web Service API",
|
219 |
"homepage": "https://github.com/maxmind/web-service-common-php"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
220 |
}
|
221 |
]
|
217 |
],
|
218 |
"description": "Internal MaxMind Web Service API",
|
219 |
"homepage": "https://github.com/maxmind/web-service-common-php"
|
220 |
+
},
|
221 |
+
{
|
222 |
+
"name": "paragonie/random_compat",
|
223 |
+
"version": "v9.99.99",
|
224 |
+
"version_normalized": "9.99.99.0",
|
225 |
+
"source": {
|
226 |
+
"type": "git",
|
227 |
+
"url": "https://github.com/paragonie/random_compat.git",
|
228 |
+
"reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
|
229 |
+
},
|
230 |
+
"dist": {
|
231 |
+
"type": "zip",
|
232 |
+
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
|
233 |
+
"reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
|
234 |
+
"shasum": ""
|
235 |
+
},
|
236 |
+
"require": {
|
237 |
+
"php": "^7"
|
238 |
+
},
|
239 |
+
"require-dev": {
|
240 |
+
"phpunit/phpunit": "4.*|5.*",
|
241 |
+
"vimeo/psalm": "^1"
|
242 |
+
},
|
243 |
+
"suggest": {
|
244 |
+
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
245 |
+
},
|
246 |
+
"time": "2018-07-02T15:55:56+00:00",
|
247 |
+
"type": "library",
|
248 |
+
"installation-source": "dist",
|
249 |
+
"notification-url": "https://packagist.org/downloads/",
|
250 |
+
"license": [
|
251 |
+
"MIT"
|
252 |
+
],
|
253 |
+
"authors": [
|
254 |
+
{
|
255 |
+
"name": "Paragon Initiative Enterprises",
|
256 |
+
"email": "security@paragonie.com",
|
257 |
+
"homepage": "https://paragonie.com"
|
258 |
+
}
|
259 |
+
],
|
260 |
+
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
261 |
+
"keywords": [
|
262 |
+
"csprng",
|
263 |
+
"polyfill",
|
264 |
+
"pseudorandom",
|
265 |
+
"random"
|
266 |
+
]
|
267 |
+
},
|
268 |
+
{
|
269 |
+
"name": "symfony/inflector",
|
270 |
+
"version": "v4.4.10",
|
271 |
+
"version_normalized": "4.4.10.0",
|
272 |
+
"source": {
|
273 |
+
"type": "git",
|
274 |
+
"url": "https://github.com/symfony/inflector.git",
|
275 |
+
"reference": "3330be44724db42f0aa493002ae63f5d29f8d5f7"
|
276 |
+
},
|
277 |
+
"dist": {
|
278 |
+
"type": "zip",
|
279 |
+
"url": "https://api.github.com/repos/symfony/inflector/zipball/3330be44724db42f0aa493002ae63f5d29f8d5f7",
|
280 |
+
"reference": "3330be44724db42f0aa493002ae63f5d29f8d5f7",
|
281 |
+
"shasum": ""
|
282 |
+
},
|
283 |
+
"require": {
|
284 |
+
"php": ">=7.1.3",
|
285 |
+
"symfony/polyfill-ctype": "~1.8"
|
286 |
+
},
|
287 |
+
"time": "2020-05-20T08:37:50+00:00",
|
288 |
+
"type": "library",
|
289 |
+
"extra": {
|
290 |
+
"branch-alias": {
|
291 |
+
"dev-master": "4.4-dev"
|
292 |
+
}
|
293 |
+
},
|
294 |
+
"installation-source": "dist",
|
295 |
+
"autoload": {
|
296 |
+
"psr-4": {
|
297 |
+
"Symfony\\Component\\Inflector\\": ""
|
298 |
+
},
|
299 |
+
"exclude-from-classmap": [
|
300 |
+
"/Tests/"
|
301 |
+
]
|
302 |
+
},
|
303 |
+
"notification-url": "https://packagist.org/downloads/",
|
304 |
+
"license": [
|
305 |
+
"MIT"
|
306 |
+
],
|
307 |
+
"authors": [
|
308 |
+
{
|
309 |
+
"name": "Bernhard Schussek",
|
310 |
+
"email": "bschussek@gmail.com"
|
311 |
+
},
|
312 |
+
{
|
313 |
+
"name": "Symfony Community",
|
314 |
+
"homepage": "https://symfony.com/contributors"
|
315 |
+
}
|
316 |
+
],
|
317 |
+
"description": "Symfony Inflector Component",
|
318 |
+
"homepage": "https://symfony.com",
|
319 |
+
"keywords": [
|
320 |
+
"inflection",
|
321 |
+
"pluralize",
|
322 |
+
"singularize",
|
323 |
+
"string",
|
324 |
+
"symfony",
|
325 |
+
"words"
|
326 |
+
]
|
327 |
+
},
|
328 |
+
{
|
329 |
+
"name": "symfony/polyfill-ctype",
|
330 |
+
"version": "v1.17.1",
|
331 |
+
"version_normalized": "1.17.1.0",
|
332 |
+
"source": {
|
333 |
+
"type": "git",
|
334 |
+
"url": "https://github.com/symfony/polyfill-ctype.git",
|
335 |
+
"reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d"
|
336 |
+
},
|
337 |
+
"dist": {
|
338 |
+
"type": "zip",
|
339 |
+
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d",
|
340 |
+
"reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d",
|
341 |
+
"shasum": ""
|
342 |
+
},
|
343 |
+
"require": {
|
344 |
+
"php": ">=5.3.3"
|
345 |
+
},
|
346 |
+
"suggest": {
|
347 |
+
"ext-ctype": "For best performance"
|
348 |
+
},
|
349 |
+
"time": "2020-06-06T08:46:27+00:00",
|
350 |
+
"type": "library",
|
351 |
+
"extra": {
|
352 |
+
"branch-alias": {
|
353 |
+
"dev-master": "1.17-dev"
|
354 |
+
},
|
355 |
+
"thanks": {
|
356 |
+
"name": "symfony/polyfill",
|
357 |
+
"url": "https://github.com/symfony/polyfill"
|
358 |
+
}
|
359 |
+
},
|
360 |
+
"installation-source": "dist",
|
361 |
+
"autoload": {
|
362 |
+
"psr-4": {
|
363 |
+
"Symfony\\Polyfill\\Ctype\\": ""
|
364 |
+
},
|
365 |
+
"files": [
|
366 |
+
"bootstrap.php"
|
367 |
+
]
|
368 |
+
},
|
369 |
+
"notification-url": "https://packagist.org/downloads/",
|
370 |
+
"license": [
|
371 |
+
"MIT"
|
372 |
+
],
|
373 |
+
"authors": [
|
374 |
+
{
|
375 |
+
"name": "Gert de Pagter",
|
376 |
+
"email": "BackEndTea@gmail.com"
|
377 |
+
},
|
378 |
+
{
|
379 |
+
"name": "Symfony Community",
|
380 |
+
"homepage": "https://symfony.com/contributors"
|
381 |
+
}
|
382 |
+
],
|
383 |
+
"description": "Symfony polyfill for ctype functions",
|
384 |
+
"homepage": "https://symfony.com",
|
385 |
+
"keywords": [
|
386 |
+
"compatibility",
|
387 |
+
"ctype",
|
388 |
+
"polyfill",
|
389 |
+
"portable"
|
390 |
+
]
|
391 |
+
},
|
392 |
+
{
|
393 |
+
"name": "symfony/polyfill-php70",
|
394 |
+
"version": "v1.17.1",
|
395 |
+
"version_normalized": "1.17.1.0",
|
396 |
+
"source": {
|
397 |
+
"type": "git",
|
398 |
+
"url": "https://github.com/symfony/polyfill-php70.git",
|
399 |
+
"reference": "471b096aede7025bace8eb356b9ac801aaba7e2d"
|
400 |
+
},
|
401 |
+
"dist": {
|
402 |
+
"type": "zip",
|
403 |
+
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/471b096aede7025bace8eb356b9ac801aaba7e2d",
|
404 |
+
"reference": "471b096aede7025bace8eb356b9ac801aaba7e2d",
|
405 |
+
"shasum": ""
|
406 |
+
},
|
407 |
+
"require": {
|
408 |
+
"paragonie/random_compat": "~1.0|~2.0|~9.99",
|
409 |
+
"php": ">=5.3.3"
|
410 |
+
},
|
411 |
+
"time": "2020-06-06T08:46:27+00:00",
|
412 |
+
"type": "library",
|
413 |
+
"extra": {
|
414 |
+
"branch-alias": {
|
415 |
+
"dev-master": "1.17-dev"
|
416 |
+
},
|
417 |
+
"thanks": {
|
418 |
+
"name": "symfony/polyfill",
|
419 |
+
"url": "https://github.com/symfony/polyfill"
|
420 |
+
}
|
421 |
+
},
|
422 |
+
"installation-source": "dist",
|
423 |
+
"autoload": {
|
424 |
+
"psr-4": {
|
425 |
+
"Symfony\\Polyfill\\Php70\\": ""
|
426 |
+
},
|
427 |
+
"files": [
|
428 |
+
"bootstrap.php"
|
429 |
+
],
|
430 |
+
"classmap": [
|
431 |
+
"Resources/stubs"
|
432 |
+
]
|
433 |
+
},
|
434 |
+
"notification-url": "https://packagist.org/downloads/",
|
435 |
+
"license": [
|
436 |
+
"MIT"
|
437 |
+
],
|
438 |
+
"authors": [
|
439 |
+
{
|
440 |
+
"name": "Nicolas Grekas",
|
441 |
+
"email": "p@tchwork.com"
|
442 |
+
},
|
443 |
+
{
|
444 |
+
"name": "Symfony Community",
|
445 |
+
"homepage": "https://symfony.com/contributors"
|
446 |
+
}
|
447 |
+
],
|
448 |
+
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
|
449 |
+
"homepage": "https://symfony.com",
|
450 |
+
"keywords": [
|
451 |
+
"compatibility",
|
452 |
+
"polyfill",
|
453 |
+
"portable",
|
454 |
+
"shim"
|
455 |
+
]
|
456 |
+
},
|
457 |
+
{
|
458 |
+
"name": "symfony/property-access",
|
459 |
+
"version": "v3.4.42",
|
460 |
+
"version_normalized": "3.4.42.0",
|
461 |
+
"source": {
|
462 |
+
"type": "git",
|
463 |
+
"url": "https://github.com/symfony/property-access.git",
|
464 |
+
"reference": "e1a6c91c0007e45bc1beba929c76548ca9fe8a85"
|
465 |
+
},
|
466 |
+
"dist": {
|
467 |
+
"type": "zip",
|
468 |
+
"url": "https://api.github.com/repos/symfony/property-access/zipball/e1a6c91c0007e45bc1beba929c76548ca9fe8a85",
|
469 |
+
"reference": "e1a6c91c0007e45bc1beba929c76548ca9fe8a85",
|
470 |
+
"shasum": ""
|
471 |
+
},
|
472 |
+
"require": {
|
473 |
+
"php": "^5.5.9|>=7.0.8",
|
474 |
+
"symfony/inflector": "~3.1|~4.0",
|
475 |
+
"symfony/polyfill-php70": "~1.0"
|
476 |
+
},
|
477 |
+
"require-dev": {
|
478 |
+
"symfony/cache": "~3.1|~4.0"
|
479 |
+
},
|
480 |
+
"suggest": {
|
481 |
+
"psr/cache-implementation": "To cache access methods."
|
482 |
+
},
|
483 |
+
"time": "2020-05-29T00:04:36+00:00",
|
484 |
+
"type": "library",
|
485 |
+
"extra": {
|
486 |
+
"branch-alias": {
|
487 |
+
"dev-master": "3.4-dev"
|
488 |
+
}
|
489 |
+
},
|
490 |
+
"installation-source": "dist",
|
491 |
+
"autoload": {
|
492 |
+
"psr-4": {
|
493 |
+
"Symfony\\Component\\PropertyAccess\\": ""
|
494 |
+
},
|
495 |
+
"exclude-from-classmap": [
|
496 |
+
"/Tests/"
|
497 |
+
]
|
498 |
+
},
|
499 |
+
"notification-url": "https://packagist.org/downloads/",
|
500 |
+
"license": [
|
501 |
+
"MIT"
|
502 |
+
],
|
503 |
+
"authors": [
|
504 |
+
{
|
505 |
+
"name": "Fabien Potencier",
|
506 |
+
"email": "fabien@symfony.com"
|
507 |
+
},
|
508 |
+
{
|
509 |
+
"name": "Symfony Community",
|
510 |
+
"homepage": "https://symfony.com/contributors"
|
511 |
+
}
|
512 |
+
],
|
513 |
+
"description": "Symfony PropertyAccess Component",
|
514 |
+
"homepage": "https://symfony.com",
|
515 |
+
"keywords": [
|
516 |
+
"access",
|
517 |
+
"array",
|
518 |
+
"extraction",
|
519 |
+
"index",
|
520 |
+
"injection",
|
521 |
+
"object",
|
522 |
+
"property",
|
523 |
+
"property path",
|
524 |
+
"reflection"
|
525 |
+
]
|
526 |
}
|
527 |
]
|
vendor/paragonie/random_compat/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
The MIT License (MIT)
|
2 |
+
|
3 |
+
Copyright (c) 2015 Paragon Initiative Enterprises
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
+
of this software and associated documentation files (the "Software"), to deal
|
7 |
+
in the Software without restriction, including without limitation the rights
|
8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
+
copies of the Software, and to permit persons to whom the Software is
|
10 |
+
furnished to do so, subject to the following conditions:
|
11 |
+
|
12 |
+
The above copyright notice and this permission notice shall be included in all
|
13 |
+
copies or substantial portions of the Software.
|
14 |
+
|
15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
+
SOFTWARE.
|
22 |
+
|
vendor/paragonie/random_compat/build-phar.sh
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env bash
|
2 |
+
|
3 |
+
basedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) )
|
4 |
+
|
5 |
+
php -dphar.readonly=0 "$basedir/other/build_phar.php" $*
|
vendor/paragonie/random_compat/composer.json
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "paragonie/random_compat",
|
3 |
+
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
4 |
+
"keywords": [
|
5 |
+
"csprng",
|
6 |
+
"random",
|
7 |
+
"polyfill",
|
8 |
+
"pseudorandom"
|
9 |
+
],
|
10 |
+
"license": "MIT",
|
11 |
+
"type": "library",
|
12 |
+
"authors": [
|
13 |
+
{
|
14 |
+
"name": "Paragon Initiative Enterprises",
|
15 |
+
"email": "security@paragonie.com",
|
16 |
+
"homepage": "https://paragonie.com"
|
17 |
+
}
|
18 |
+
],
|
19 |
+
"support": {
|
20 |
+
"issues": "https://github.com/paragonie/random_compat/issues",
|
21 |
+
"email": "info@paragonie.com",
|
22 |
+
"source": "https://github.com/paragonie/random_compat"
|
23 |
+
},
|
24 |
+
"require": {
|
25 |
+
"php": "^7"
|
26 |
+
},
|
27 |
+
"require-dev": {
|
28 |
+
"vimeo/psalm": "^1",
|
29 |
+
"phpunit/phpunit": "4.*|5.*"
|
30 |
+
},
|
31 |
+
"suggest": {
|
32 |
+
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
33 |
+
}
|
34 |
+
}
|
vendor/paragonie/random_compat/dist/random_compat.phar.pubkey
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm
|
3 |
+
pui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p
|
4 |
+
+h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc
|
5 |
+
-----END PUBLIC KEY-----
|
vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
-----BEGIN PGP SIGNATURE-----
|
2 |
+
Version: GnuPG v2.0.22 (MingW32)
|
3 |
+
|
4 |
+
iQEcBAABAgAGBQJWtW1hAAoJEGuXocKCZATaJf0H+wbZGgskK1dcRTsuVJl9IWip
|
5 |
+
QwGw/qIKI280SD6/ckoUMxKDCJiFuPR14zmqnS36k7N5UNPnpdTJTS8T11jttSpg
|
6 |
+
1LCmgpbEIpgaTah+cELDqFCav99fS+bEiAL5lWDAHBTE/XPjGVCqeehyPYref4IW
|
7 |
+
NDBIEsvnHPHPLsn6X5jq4+Yj5oUixgxaMPiR+bcO4Sh+RzOVB6i2D0upWfRXBFXA
|
8 |
+
NNnsg9/zjvoC7ZW73y9uSH+dPJTt/Vgfeiv52/v41XliyzbUyLalf02GNPY+9goV
|
9 |
+
JHG1ulEEBJOCiUD9cE1PUIJwHA/HqyhHIvV350YoEFiHl8iSwm7SiZu5kPjaq74=
|
10 |
+
=B6+8
|
11 |
+
-----END PGP SIGNATURE-----
|
vendor/paragonie/random_compat/lib/random.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Random_* Compatibility Library
|
4 |
+
* for using the new PHP 7 random_* API in PHP 5 projects
|
5 |
+
*
|
6 |
+
* @version 2.99.99
|
7 |
+
* @released 2018-06-06
|
8 |
+
*
|
9 |
+
* The MIT License (MIT)
|
10 |
+
*
|
11 |
+
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
12 |
+
*
|
13 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
14 |
+
* of this software and associated documentation files (the "Software"), to deal
|
15 |
+
* in the Software without restriction, including without limitation the rights
|
16 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
17 |
+
* copies of the Software, and to permit persons to whom the Software is
|
18 |
+
* furnished to do so, subject to the following conditions:
|
19 |
+
*
|
20 |
+
* The above copyright notice and this permission notice shall be included in
|
21 |
+
* all copies or substantial portions of the Software.
|
22 |
+
*
|
23 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
24 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
25 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
26 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
27 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
28 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
29 |
+
* SOFTWARE.
|
30 |
+
*/
|
31 |
+
|
32 |
+
// NOP
|
vendor/paragonie/random_compat/other/build_phar.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$dist = dirname(__DIR__).'/dist';
|
3 |
+
if (!is_dir($dist)) {
|
4 |
+
mkdir($dist, 0755);
|
5 |
+
}
|
6 |
+
if (file_exists($dist.'/random_compat.phar')) {
|
7 |
+
unlink($dist.'/random_compat.phar');
|
8 |
+
}
|
9 |
+
$phar = new Phar(
|
10 |
+
$dist.'/random_compat.phar',
|
11 |
+
FilesystemIterator::CURRENT_AS_FILEINFO | \FilesystemIterator::KEY_AS_FILENAME,
|
12 |
+
'random_compat.phar'
|
13 |
+
);
|
14 |
+
rename(
|
15 |
+
dirname(__DIR__).'/lib/random.php',
|
16 |
+
dirname(__DIR__).'/lib/index.php'
|
17 |
+
);
|
18 |
+
$phar->buildFromDirectory(dirname(__DIR__).'/lib');
|
19 |
+
rename(
|
20 |
+
dirname(__DIR__).'/lib/index.php',
|
21 |
+
dirname(__DIR__).'/lib/random.php'
|
22 |
+
);
|
23 |
+
|
24 |
+
/**
|
25 |
+
* If we pass an (optional) path to a private key as a second argument, we will
|
26 |
+
* sign the Phar with OpenSSL.
|
27 |
+
*
|
28 |
+
* If you leave this out, it will produce an unsigned .phar!
|
29 |
+
*/
|
30 |
+
if ($argc > 1) {
|
31 |
+
if (!@is_readable($argv[1])) {
|
32 |
+
echo 'Could not read the private key file:', $argv[1], "\n";
|
33 |
+
exit(255);
|
34 |
+
}
|
35 |
+
$pkeyFile = file_get_contents($argv[1]);
|
36 |
+
|
37 |
+
$private = openssl_get_privatekey($pkeyFile);
|
38 |
+
if ($private !== false) {
|
39 |
+
$pkey = '';
|
40 |
+
openssl_pkey_export($private, $pkey);
|
41 |
+
$phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey);
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Save the corresponding public key to the file
|
45 |
+
*/
|
46 |
+
if (!@is_readable($dist.'/random_compat.phar.pubkey')) {
|
47 |
+
$details = openssl_pkey_get_details($private);
|
48 |
+
file_put_contents(
|
49 |
+
$dist.'/random_compat.phar.pubkey',
|
50 |
+
$details['key']
|
51 |
+
);
|
52 |
+
}
|
53 |
+
} else {
|
54 |
+
echo 'An error occurred reading the private key from OpenSSL.', "\n";
|
55 |
+
exit(255);
|
56 |
+
}
|
57 |
+
}
|
vendor/paragonie/random_compat/psalm-autoload.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'lib/byte_safe_strings.php';
|
4 |
+
require_once 'lib/cast_to_int.php';
|
5 |
+
require_once 'lib/error_polyfill.php';
|
6 |
+
require_once 'other/ide_stubs/libsodium.php';
|
7 |
+
require_once 'lib/random.php';
|
8 |
+
|
9 |
+
$int = random_int(0, 65536);
|
vendor/paragonie/random_compat/psalm.xml
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<psalm
|
3 |
+
autoloader="psalm-autoload.php"
|
4 |
+
stopOnFirstError="false"
|
5 |
+
useDocblockTypes="true"
|
6 |
+
>
|
7 |
+
<projectFiles>
|
8 |
+
<directory name="lib" />
|
9 |
+
</projectFiles>
|
10 |
+
<issueHandlers>
|
11 |
+
<RedundantConditionGivenDocblockType errorLevel="info" />
|
12 |
+
<UnresolvableInclude errorLevel="info" />
|
13 |
+
<DuplicateClass errorLevel="info" />
|
14 |
+
<InvalidOperand errorLevel="info" />
|
15 |
+
<UndefinedConstant errorLevel="info" />
|
16 |
+
<MissingReturnType errorLevel="info" />
|
17 |
+
<InvalidReturnType errorLevel="info" />
|
18 |
+
</issueHandlers>
|
19 |
+
</psalm>
|
vendor/symfony/inflector/Inflector.php
ADDED
@@ -0,0 +1,503 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Inflector;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Converts words between singular and plural forms.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
final class Inflector
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* Map English plural to singular suffixes.
|
23 |
+
*
|
24 |
+
* @see http://english-zone.com/spelling/plurals.html
|
25 |
+
*/
|
26 |
+
private static $pluralMap = [
|
27 |
+
// First entry: plural suffix, reversed
|
28 |
+
// Second entry: length of plural suffix
|
29 |
+
// Third entry: Whether the suffix may succeed a vocal
|
30 |
+
// Fourth entry: Whether the suffix may succeed a consonant
|
31 |
+
// Fifth entry: singular suffix, normal
|
32 |
+
|
33 |
+
// bacteria (bacterium), criteria (criterion), phenomena (phenomenon)
|
34 |
+
['a', 1, true, true, ['on', 'um']],
|
35 |
+
|
36 |
+
// nebulae (nebula)
|
37 |
+
['ea', 2, true, true, 'a'],
|
38 |
+
|
39 |
+
// services (service)
|
40 |
+
['secivres', 8, true, true, 'service'],
|
41 |
+
|
42 |
+
// mice (mouse), lice (louse)
|
43 |
+
['eci', 3, false, true, 'ouse'],
|
44 |
+
|
45 |
+
// geese (goose)
|
46 |
+
['esee', 4, false, true, 'oose'],
|
47 |
+
|
48 |
+
// fungi (fungus), alumni (alumnus), syllabi (syllabus), radii (radius)
|
49 |
+
['i', 1, true, true, 'us'],
|
50 |
+
|
51 |
+
// men (man), women (woman)
|
52 |
+
['nem', 3, true, true, 'man'],
|
53 |
+
|
54 |
+
// children (child)
|
55 |
+
['nerdlihc', 8, true, true, 'child'],
|
56 |
+
|
57 |
+
// oxen (ox)
|
58 |
+
['nexo', 4, false, false, 'ox'],
|
59 |
+
|
60 |
+
// indices (index), appendices (appendix), prices (price)
|
61 |
+
['seci', 4, false, true, ['ex', 'ix', 'ice']],
|
62 |
+
|
63 |
+
// selfies (selfie)
|
64 |
+
['seifles', 7, true, true, 'selfie'],
|
65 |
+
|
66 |
+
// movies (movie)
|
67 |
+
['seivom', 6, true, true, 'movie'],
|
68 |
+
|
69 |
+
// feet (foot)
|
70 |
+
['teef', 4, true, true, 'foot'],
|
71 |
+
|
72 |
+
// geese (goose)
|
73 |
+
['eseeg', 5, true, true, 'goose'],
|
74 |
+
|
75 |
+
// teeth (tooth)
|
76 |
+
['hteet', 5, true, true, 'tooth'],
|
77 |
+
|
78 |
+
// news (news)
|
79 |
+
['swen', 4, true, true, 'news'],
|
80 |
+
|
81 |
+
// series (series)
|
82 |
+
['seires', 6, true, true, 'series'],
|
83 |
+
|
84 |
+
// babies (baby)
|
85 |
+
['sei', 3, false, true, 'y'],
|
86 |
+
|
87 |
+
// accesses (access), addresses (address), kisses (kiss)
|
88 |
+
['sess', 4, true, false, 'ss'],
|
89 |
+
|
90 |
+
// analyses (analysis), ellipses (ellipsis), fungi (fungus),
|
91 |
+
// neuroses (neurosis), theses (thesis), emphases (emphasis),
|
92 |
+
// oases (oasis), crises (crisis), houses (house), bases (base),
|
93 |
+
// atlases (atlas)
|
94 |
+
['ses', 3, true, true, ['s', 'se', 'sis']],
|
95 |
+
|
96 |
+
// objectives (objective), alternative (alternatives)
|
97 |
+
['sevit', 5, true, true, 'tive'],
|
98 |
+
|
99 |
+
// drives (drive)
|
100 |
+
['sevird', 6, false, true, 'drive'],
|
101 |
+
|
102 |
+
// lives (life), wives (wife)
|
103 |
+
['sevi', 4, false, true, 'ife'],
|
104 |
+
|
105 |
+
// moves (move)
|
106 |
+
['sevom', 5, true, true, 'move'],
|
107 |
+
|
108 |
+
// hooves (hoof), dwarves (dwarf), elves (elf), leaves (leaf), caves (cave), staves (staff)
|
109 |
+
['sev', 3, true, true, ['f', 've', 'ff']],
|
110 |
+
|
111 |
+
// axes (axis), axes (ax), axes (axe)
|
112 |
+
['sexa', 4, false, false, ['ax', 'axe', 'axis']],
|
113 |
+
|
114 |
+
// indexes (index), matrixes (matrix)
|
115 |
+
['sex', 3, true, false, 'x'],
|
116 |
+
|
117 |
+
// quizzes (quiz)
|
118 |
+
['sezz', 4, true, false, 'z'],
|
119 |
+
|
120 |
+
// bureaus (bureau)
|
121 |
+
['suae', 4, false, true, 'eau'],
|
122 |
+
|
123 |
+
// fees (fee), trees (tree), employees (employee)
|
124 |
+
['see', 3, true, true, 'ee'],
|
125 |
+
|
126 |
+
// roses (rose), garages (garage), cassettes (cassette),
|
127 |
+
// waltzes (waltz), heroes (hero), bushes (bush), arches (arch),
|
128 |
+
// shoes (shoe)
|
129 |
+
['se', 2, true, true, ['', 'e']],
|
130 |
+
|
131 |
+
// tags (tag)
|
132 |
+
['s', 1, true, true, ''],
|
133 |
+
|
134 |
+
// chateaux (chateau)
|
135 |
+
['xuae', 4, false, true, 'eau'],
|
136 |
+
|
137 |
+
// people (person)
|
138 |
+
['elpoep', 6, true, true, 'person'],
|
139 |
+
];
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Map English singular to plural suffixes.
|
143 |
+
*
|
144 |
+
* @see http://english-zone.com/spelling/plurals.html
|
145 |
+
*/
|
146 |
+
private static $singularMap = [
|
147 |
+
// First entry: singular suffix, reversed
|
148 |
+
// Second entry: length of singular suffix
|
149 |
+
// Third entry: Whether the suffix may succeed a vocal
|
150 |
+
// Fourth entry: Whether the suffix may succeed a consonant
|
151 |
+
// Fifth entry: plural suffix, normal
|
152 |
+
|
153 |
+
// criterion (criteria)
|
154 |
+
['airetirc', 8, false, false, 'criterion'],
|
155 |
+
|
156 |
+
// nebulae (nebula)
|
157 |
+
['aluben', 6, false, false, 'nebulae'],
|
158 |
+
|
159 |
+
// children (child)
|
160 |
+
['dlihc', 5, true, true, 'children'],
|
161 |
+
|
162 |
+
// prices (price)
|
163 |
+
['eci', 3, false, true, 'ices'],
|
164 |
+
|
165 |
+
// services (service)
|
166 |
+
['ecivres', 7, true, true, 'services'],
|
167 |
+
|
168 |
+
// lives (life), wives (wife)
|
169 |
+
['efi', 3, false, true, 'ives'],
|
170 |
+
|
171 |
+
// selfies (selfie)
|
172 |
+
['eifles', 6, true, true, 'selfies'],
|
173 |
+
|
174 |
+
// movies (movie)
|
175 |
+
['eivom', 5, true, true, 'movies'],
|
176 |
+
|
177 |
+
// lice (louse)
|
178 |
+
['esuol', 5, false, true, 'lice'],
|
179 |
+
|
180 |
+
// mice (mouse)
|
181 |
+
['esuom', 5, false, true, 'mice'],
|
182 |
+
|
183 |
+
// geese (goose)
|
184 |
+
['esoo', 4, false, true, 'eese'],
|
185 |
+
|
186 |
+
// houses (house), bases (base)
|
187 |
+
['es', 2, true, true, 'ses'],
|
188 |
+
|
189 |
+
// geese (goose)
|
190 |
+
['esoog', 5, true, true, 'geese'],
|
191 |
+
|
192 |
+
// caves (cave)
|
193 |
+
['ev', 2, true, true, 'ves'],
|
194 |
+
|
195 |
+
// drives (drive)
|
196 |
+
['evird', 5, false, true, 'drives'],
|
197 |
+
|
198 |
+
// objectives (objective), alternative (alternatives)
|
199 |
+
['evit', 4, true, true, 'tives'],
|
200 |
+
|
201 |
+
// moves (move)
|
202 |
+
['evom', 4, true, true, 'moves'],
|
203 |
+
|
204 |
+
// staves (staff)
|
205 |
+
['ffats', 5, true, true, 'staves'],
|
206 |
+
|
207 |
+
// hooves (hoof), dwarves (dwarf), elves (elf), leaves (leaf)
|
208 |
+
['ff', 2, true, true, 'ffs'],
|
209 |
+
|
210 |
+
// hooves (hoof), dwarves (dwarf), elves (elf), leaves (leaf)
|
211 |
+
['f', 1, true, true, ['fs', 'ves']],
|
212 |
+
|
213 |
+
// arches (arch)
|
214 |
+
['hc', 2, true, true, 'ches'],
|
215 |
+
|
216 |
+
// bushes (bush)
|
217 |
+
['hs', 2, true, true, 'shes'],
|
218 |
+
|
219 |
+
// teeth (tooth)
|
220 |
+
['htoot', 5, true, true, 'teeth'],
|
221 |
+
|
222 |
+
// bacteria (bacterium), criteria (criterion), phenomena (phenomenon)
|
223 |
+
['mu', 2, true, true, 'a'],
|
224 |
+
|
225 |
+
// men (man), women (woman)
|
226 |
+
['nam', 3, true, true, 'men'],
|
227 |
+
|
228 |
+
// people (person)
|
229 |
+
['nosrep', 6, true, true, ['persons', 'people']],
|
230 |
+
|
231 |
+
// bacteria (bacterium), criteria (criterion), phenomena (phenomenon)
|
232 |
+
['noi', 3, true, true, 'ions'],
|
233 |
+
|
234 |
+
// seasons (season), treasons (treason), poisons (poison), lessons (lesson)
|
235 |
+
['nos', 3, true, true, 'sons'],
|
236 |
+
|
237 |
+
// bacteria (bacterium), criteria (criterion), phenomena (phenomenon)
|
238 |
+
['no', 2, true, true, 'a'],
|
239 |
+
|
240 |
+
// echoes (echo)
|
241 |
+
['ohce', 4, true, true, 'echoes'],
|
242 |
+
|
243 |
+
// heroes (hero)
|
244 |
+
['oreh', 4, true, true, 'heroes'],
|
245 |
+
|
246 |
+
// atlases (atlas)
|
247 |
+
['salta', 5, true, true, 'atlases'],
|
248 |
+
|
249 |
+
// irises (iris)
|
250 |
+
['siri', 4, true, true, 'irises'],
|
251 |
+
|
252 |
+
// analyses (analysis), ellipses (ellipsis), neuroses (neurosis)
|
253 |
+
// theses (thesis), emphases (emphasis), oases (oasis),
|
254 |
+
// crises (crisis)
|
255 |
+
['sis', 3, true, true, 'ses'],
|
256 |
+
|
257 |
+
// accesses (access), addresses (address), kisses (kiss)
|
258 |
+
['ss', 2, true, false, 'sses'],
|
259 |
+
|
260 |
+
// syllabi (syllabus)
|
261 |
+
['suballys', 8, true, true, 'syllabi'],
|
262 |
+
|
263 |
+
// buses (bus)
|
264 |
+
['sub', 3, true, true, 'buses'],
|
265 |
+
|
266 |
+
// circuses (circus)
|
267 |
+
['suc', 3, true, true, 'cuses'],
|
268 |
+
|
269 |
+
// fungi (fungus), alumni (alumnus), syllabi (syllabus), radii (radius)
|
270 |
+
['su', 2, true, true, 'i'],
|
271 |
+
|
272 |
+
// news (news)
|
273 |
+
['swen', 4, true, true, 'news'],
|
274 |
+
|
275 |
+
// feet (foot)
|
276 |
+
['toof', 4, true, true, 'feet'],
|
277 |
+
|
278 |
+
// chateaux (chateau), bureaus (bureau)
|
279 |
+
['uae', 3, false, true, ['eaus', 'eaux']],
|
280 |
+
|
281 |
+
// oxen (ox)
|
282 |
+
['xo', 2, false, false, 'oxen'],
|
283 |
+
|
284 |
+
// hoaxes (hoax)
|
285 |
+
['xaoh', 4, true, false, 'hoaxes'],
|
286 |
+
|
287 |
+
// indices (index)
|
288 |
+
['xedni', 5, false, true, ['indicies', 'indexes']],
|
289 |
+
|
290 |
+
// boxes (box)
|
291 |
+
['xo', 2, false, true, 'oxes'],
|
292 |
+
|
293 |
+
// indexes (index), matrixes (matrix)
|
294 |
+
['x', 1, true, false, ['cies', 'xes']],
|
295 |
+
|
296 |
+
// appendices (appendix)
|
297 |
+
['xi', 2, false, true, 'ices'],
|
298 |
+
|
299 |
+
// babies (baby)
|
300 |
+
['y', 1, false, true, 'ies'],
|
301 |
+
|
302 |
+
// quizzes (quiz)
|
303 |
+
['ziuq', 4, true, false, 'quizzes'],
|
304 |
+
|
305 |
+
// waltzes (waltz)
|
306 |
+
['z', 1, true, true, 'zes'],
|
307 |
+
];
|
308 |
+
|
309 |
+
/**
|
310 |
+
* A list of words which should not be inflected, reversed.
|
311 |
+
*/
|
312 |
+
private static $uninflected = [
|
313 |
+
'atad',
|
314 |
+
'reed',
|
315 |
+
'kcabdeef',
|
316 |
+
'hsif',
|
317 |
+
'ofni',
|
318 |
+
'esoom',
|
319 |
+
'seires',
|
320 |
+
'peehs',
|
321 |
+
'seiceps',
|
322 |
+
];
|
323 |
+
|
324 |
+
/**
|
325 |
+
* This class should not be instantiated.
|
326 |
+
*/
|
327 |
+
private function __construct()
|
328 |
+
{
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Returns the singular form of a word.
|
333 |
+
*
|
334 |
+
* If the method can't determine the form with certainty, an array of the
|
335 |
+
* possible singulars is returned.
|
336 |
+
*
|
337 |
+
* @param string $plural A word in plural form
|
338 |
+
*
|
339 |
+
* @return string|array The singular form or an array of possible singular forms
|
340 |
+
*/
|
341 |
+
public static function singularize(string $plural)
|
342 |
+
{
|
343 |
+
$pluralRev = strrev($plural);
|
344 |
+
$lowerPluralRev = strtolower($pluralRev);
|
345 |
+
$pluralLength = \strlen($lowerPluralRev);
|
346 |
+
|
347 |
+
// Check if the word is one which is not inflected, return early if so
|
348 |
+
if (\in_array($lowerPluralRev, self::$uninflected, true)) {
|
349 |
+
return $plural;
|
350 |
+
}
|
351 |
+
|
352 |
+
// The outer loop iterates over the entries of the plural table
|
353 |
+
// The inner loop $j iterates over the characters of the plural suffix
|
354 |
+
// in the plural table to compare them with the characters of the actual
|
355 |
+
// given plural suffix
|
356 |
+
foreach (self::$pluralMap as $map) {
|
357 |
+
$suffix = $map[0];
|
358 |
+
$suffixLength = $map[1];
|
359 |
+
$j = 0;
|
360 |
+
|
361 |
+
// Compare characters in the plural table and of the suffix of the
|
362 |
+
// given plural one by one
|
363 |
+
while ($suffix[$j] === $lowerPluralRev[$j]) {
|
364 |
+
// Let $j point to the next character
|
365 |
+
++$j;
|
366 |
+
|
367 |
+
// Successfully compared the last character
|
368 |
+
// Add an entry with the singular suffix to the singular array
|
369 |
+
if ($j === $suffixLength) {
|
370 |
+
// Is there any character preceding the suffix in the plural string?
|
371 |
+
if ($j < $pluralLength) {
|
372 |
+
$nextIsVocal = false !== strpos('aeiou', $lowerPluralRev[$j]);
|
373 |
+
|
374 |
+
if (!$map[2] && $nextIsVocal) {
|
375 |
+
// suffix may not succeed a vocal but next char is one
|
376 |
+
break;
|
377 |
+
}
|
378 |
+
|
379 |
+
if (!$map[3] && !$nextIsVocal) {
|
380 |
+
// suffix may not succeed a consonant but next char is one
|
381 |
+
break;
|
382 |
+
}
|
383 |
+
}
|
384 |
+
|
385 |
+
$newBase = substr($plural, 0, $pluralLength - $suffixLength);
|
386 |
+
$newSuffix = $map[4];
|
387 |
+
|
388 |
+
// Check whether the first character in the plural suffix
|
389 |
+
// is uppercased. If yes, uppercase the first character in
|
390 |
+
// the singular suffix too
|
391 |
+
$firstUpper = ctype_upper($pluralRev[$j - 1]);
|
392 |
+
|
393 |
+
if (\is_array($newSuffix)) {
|
394 |
+
$singulars = [];
|
395 |
+
|
396 |
+
foreach ($newSuffix as $newSuffixEntry) {
|
397 |
+
$singulars[] = $newBase.($firstUpper ? ucfirst($newSuffixEntry) : $newSuffixEntry);
|
398 |
+
}
|
399 |
+
|
400 |
+
return $singulars;
|
401 |
+
}
|
402 |
+
|
403 |
+
return $newBase.($firstUpper ? ucfirst($newSuffix) : $newSuffix);
|
404 |
+
}
|
405 |
+
|
406 |
+
// Suffix is longer than word
|
407 |
+
if ($j === $pluralLength) {
|
408 |
+
break;
|
409 |
+
}
|
410 |
+
}
|
411 |
+
}
|
412 |
+
|
413 |
+
// Assume that plural and singular is identical
|
414 |
+
return $plural;
|
415 |
+
}
|
416 |
+
|
417 |
+
/**
|
418 |
+
* Returns the plural form of a word.
|
419 |
+
*
|
420 |
+
* If the method can't determine the form with certainty, an array of the
|
421 |
+
* possible plurals is returned.
|
422 |
+
*
|
423 |
+
* @param string $singular A word in singular form
|
424 |
+
*
|
425 |
+
* @return string|array The plural form or an array of possible plural forms
|
426 |
+
*/
|
427 |
+
public static function pluralize(string $singular)
|
428 |
+
{
|
429 |
+
$singularRev = strrev($singular);
|
430 |
+
$lowerSingularRev = strtolower($singularRev);
|
431 |
+
$singularLength = \strlen($lowerSingularRev);
|
432 |
+
|
433 |
+
// Check if the word is one which is not inflected, return early if so
|
434 |
+
if (\in_array($lowerSingularRev, self::$uninflected, true)) {
|
435 |
+
return $singular;
|
436 |
+
}
|
437 |
+
|
438 |
+
// The outer loop iterates over the entries of the singular table
|
439 |
+
// The inner loop $j iterates over the characters of the singular suffix
|
440 |
+
// in the singular table to compare them with the characters of the actual
|
441 |
+
// given singular suffix
|
442 |
+
foreach (self::$singularMap as $map) {
|
443 |
+
$suffix = $map[0];
|
444 |
+
$suffixLength = $map[1];
|
445 |
+
$j = 0;
|
446 |
+
|
447 |
+
// Compare characters in the singular table and of the suffix of the
|
448 |
+
// given plural one by one
|
449 |
+
|
450 |
+
while ($suffix[$j] === $lowerSingularRev[$j]) {
|
451 |
+
// Let $j point to the next character
|
452 |
+
++$j;
|
453 |
+
|
454 |
+
// Successfully compared the last character
|
455 |
+
// Add an entry with the plural suffix to the plural array
|
456 |
+
if ($j === $suffixLength) {
|
457 |
+
// Is there any character preceding the suffix in the plural string?
|
458 |
+
if ($j < $singularLength) {
|
459 |
+
$nextIsVocal = false !== strpos('aeiou', $lowerSingularRev[$j]);
|
460 |
+
|
461 |
+
if (!$map[2] && $nextIsVocal) {
|
462 |
+
// suffix may not succeed a vocal but next char is one
|
463 |
+
break;
|
464 |
+
}
|
465 |
+
|
466 |
+
if (!$map[3] && !$nextIsVocal) {
|
467 |
+
// suffix may not succeed a consonant but next char is one
|
468 |
+
break;
|
469 |
+
}
|
470 |
+
}
|
471 |
+
|
472 |
+
$newBase = substr($singular, 0, $singularLength - $suffixLength);
|
473 |
+
$newSuffix = $map[4];
|
474 |
+
|
475 |
+
// Check whether the first character in the singular suffix
|
476 |
+
// is uppercased. If yes, uppercase the first character in
|
477 |
+
// the singular suffix too
|
478 |
+
$firstUpper = ctype_upper($singularRev[$j - 1]);
|
479 |
+
|
480 |
+
if (\is_array($newSuffix)) {
|
481 |
+
$plurals = [];
|
482 |
+
|
483 |
+
foreach ($newSuffix as $newSuffixEntry) {
|
484 |
+
$plurals[] = $newBase.($firstUpper ? ucfirst($newSuffixEntry) : $newSuffixEntry);
|
485 |
+
}
|
486 |
+
|
487 |
+
return $plurals;
|
488 |
+
}
|
489 |
+
|
490 |
+
return $newBase.($firstUpper ? ucfirst($newSuffix) : $newSuffix);
|
491 |
+
}
|
492 |
+
|
493 |
+
// Suffix is longer than word
|
494 |
+
if ($j === $singularLength) {
|
495 |
+
break;
|
496 |
+
}
|
497 |
+
}
|
498 |
+
}
|
499 |
+
|
500 |
+
// Assume that plural is singular with a trailing `s`
|
501 |
+
return $singular.'s';
|
502 |
+
}
|
503 |
+
}
|
vendor/symfony/inflector/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2012-2020 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
vendor/symfony/inflector/README.md
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Inflector Component
|
2 |
+
===================
|
3 |
+
|
4 |
+
Inflector converts words between their singular and plural forms (English only).
|
5 |
+
|
6 |
+
Resources
|
7 |
+
---------
|
8 |
+
|
9 |
+
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
10 |
+
* [Report issues](https://github.com/symfony/symfony/issues) and
|
11 |
+
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
12 |
+
in the [main Symfony repository](https://github.com/symfony/symfony)
|
vendor/symfony/inflector/composer.json
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "symfony/inflector",
|
3 |
+
"type": "library",
|
4 |
+
"description": "Symfony Inflector Component",
|
5 |
+
"keywords": [
|
6 |
+
"string",
|
7 |
+
"inflection",
|
8 |
+
"singularize",
|
9 |
+
"pluralize",
|
10 |
+
"words",
|
11 |
+
"symfony"
|
12 |
+
],
|
13 |
+
"homepage": "https://symfony.com",
|
14 |
+
"license": "MIT",
|
15 |
+
"authors": [
|
16 |
+
{
|
17 |
+
"name": "Bernhard Schussek",
|
18 |
+
"email": "bschussek@gmail.com"
|
19 |
+
},
|
20 |
+
{
|
21 |
+
"name": "Symfony Community",
|
22 |
+
"homepage": "https://symfony.com/contributors"
|
23 |
+
}
|
24 |
+
],
|
25 |
+
"require": {
|
26 |
+
"php": ">=7.1.3",
|
27 |
+
"symfony/polyfill-ctype": "~1.8"
|
28 |
+
},
|
29 |
+
"autoload": {
|
30 |
+
"psr-4": { "Symfony\\Component\\Inflector\\": "" },
|
31 |
+
"exclude-from-classmap": [
|
32 |
+
"/Tests/"
|
33 |
+
]
|
34 |
+
},
|
35 |
+
"minimum-stability": "dev",
|
36 |
+
"extra": {
|
37 |
+
"branch-alias": {
|
38 |
+
"dev-master": "4.4-dev"
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
vendor/symfony/polyfill-ctype/Ctype.php
ADDED
@@ -0,0 +1,227 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Polyfill\Ctype;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Ctype implementation through regex.
|
16 |
+
*
|
17 |
+
* @internal
|
18 |
+
*
|
19 |
+
* @author Gert de Pagter <BackEndTea@gmail.com>
|
20 |
+
*/
|
21 |
+
final class Ctype
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise.
|
25 |
+
*
|
26 |
+
* @see https://php.net/ctype-alnum
|
27 |
+
*
|
28 |
+
* @param string|int $text
|
29 |
+
*
|
30 |
+
* @return bool
|
31 |
+
*/
|
32 |
+
public static function ctype_alnum($text)
|
33 |
+
{
|
34 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
35 |
+
|
36 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text);
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Returns TRUE if every character in text is a letter, FALSE otherwise.
|
41 |
+
*
|
42 |
+
* @see https://php.net/ctype-alpha
|
43 |
+
*
|
44 |
+
* @param string|int $text
|
45 |
+
*
|
46 |
+
* @return bool
|
47 |
+
*/
|
48 |
+
public static function ctype_alpha($text)
|
49 |
+
{
|
50 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
51 |
+
|
52 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text);
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise.
|
57 |
+
*
|
58 |
+
* @see https://php.net/ctype-cntrl
|
59 |
+
*
|
60 |
+
* @param string|int $text
|
61 |
+
*
|
62 |
+
* @return bool
|
63 |
+
*/
|
64 |
+
public static function ctype_cntrl($text)
|
65 |
+
{
|
66 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
67 |
+
|
68 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise.
|
73 |
+
*
|
74 |
+
* @see https://php.net/ctype-digit
|
75 |
+
*
|
76 |
+
* @param string|int $text
|
77 |
+
*
|
78 |
+
* @return bool
|
79 |
+
*/
|
80 |
+
public static function ctype_digit($text)
|
81 |
+
{
|
82 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
83 |
+
|
84 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text);
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise.
|
89 |
+
*
|
90 |
+
* @see https://php.net/ctype-graph
|
91 |
+
*
|
92 |
+
* @param string|int $text
|
93 |
+
*
|
94 |
+
* @return bool
|
95 |
+
*/
|
96 |
+
public static function ctype_graph($text)
|
97 |
+
{
|
98 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
99 |
+
|
100 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text);
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Returns TRUE if every character in text is a lowercase letter.
|
105 |
+
*
|
106 |
+
* @see https://php.net/ctype-lower
|
107 |
+
*
|
108 |
+
* @param string|int $text
|
109 |
+
*
|
110 |
+
* @return bool
|
111 |
+
*/
|
112 |
+
public static function ctype_lower($text)
|
113 |
+
{
|
114 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
115 |
+
|
116 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text);
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all.
|
121 |
+
*
|
122 |
+
* @see https://php.net/ctype-print
|
123 |
+
*
|
124 |
+
* @param string|int $text
|
125 |
+
*
|
126 |
+
* @return bool
|
127 |
+
*/
|
128 |
+
public static function ctype_print($text)
|
129 |
+
{
|
130 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
131 |
+
|
132 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text);
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise.
|
137 |
+
*
|
138 |
+
* @see https://php.net/ctype-punct
|
139 |
+
*
|
140 |
+
* @param string|int $text
|
141 |
+
*
|
142 |
+
* @return bool
|
143 |
+
*/
|
144 |
+
public static function ctype_punct($text)
|
145 |
+
{
|
146 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
147 |
+
|
148 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text);
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters.
|
153 |
+
*
|
154 |
+
* @see https://php.net/ctype-space
|
155 |
+
*
|
156 |
+
* @param string|int $text
|
157 |
+
*
|
158 |
+
* @return bool
|
159 |
+
*/
|
160 |
+
public static function ctype_space($text)
|
161 |
+
{
|
162 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
163 |
+
|
164 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text);
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Returns TRUE if every character in text is an uppercase letter.
|
169 |
+
*
|
170 |
+
* @see https://php.net/ctype-upper
|
171 |
+
*
|
172 |
+
* @param string|int $text
|
173 |
+
*
|
174 |
+
* @return bool
|
175 |
+
*/
|
176 |
+
public static function ctype_upper($text)
|
177 |
+
{
|
178 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
179 |
+
|
180 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text);
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise.
|
185 |
+
*
|
186 |
+
* @see https://php.net/ctype-xdigit
|
187 |
+
*
|
188 |
+
* @param string|int $text
|
189 |
+
*
|
190 |
+
* @return bool
|
191 |
+
*/
|
192 |
+
public static function ctype_xdigit($text)
|
193 |
+
{
|
194 |
+
$text = self::convert_int_to_char_for_ctype($text);
|
195 |
+
|
196 |
+
return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text);
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Converts integers to their char versions according to normal ctype behaviour, if needed.
|
201 |
+
*
|
202 |
+
* If an integer between -128 and 255 inclusive is provided,
|
203 |
+
* it is interpreted as the ASCII value of a single character
|
204 |
+
* (negative values have 256 added in order to allow characters in the Extended ASCII range).
|
205 |
+
* Any other integer is interpreted as a string containing the decimal digits of the integer.
|
206 |
+
*
|
207 |
+
* @param string|int $int
|
208 |
+
*
|
209 |
+
* @return mixed
|
210 |
+
*/
|
211 |
+
private static function convert_int_to_char_for_ctype($int)
|
212 |
+
{
|
213 |
+
if (!\is_int($int)) {
|
214 |
+
return $int;
|
215 |
+
}
|
216 |
+
|
217 |
+
if ($int < -128 || $int > 255) {
|
218 |
+
return (string) $int;
|
219 |
+
}
|
220 |
+
|
221 |
+
if ($int < 0) {
|
222 |
+
$int += 256;
|
223 |
+
}
|
224 |
+
|
225 |
+
return \chr($int);
|
226 |
+
}
|
227 |
+
}
|
vendor/symfony/polyfill-ctype/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2018-2019 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
vendor/symfony/polyfill-ctype/README.md
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Symfony Polyfill / Ctype
|
2 |
+
========================
|
3 |
+
|
4 |
+
This component provides `ctype_*` functions to users who run php versions without the ctype extension.
|
5 |
+
|
6 |
+
More information can be found in the
|
7 |
+
[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
|
8 |
+
|
9 |
+
License
|
10 |
+
=======
|
11 |
+
|
12 |
+
This library is released under the [MIT license](LICENSE).
|
vendor/symfony/polyfill-ctype/bootstrap.php
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
use Symfony\Polyfill\Ctype as p;
|
13 |
+
|
14 |
+
if (!function_exists('ctype_alnum')) {
|
15 |
+
function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); }
|
16 |
+
}
|
17 |
+
if (!function_exists('ctype_alpha')) {
|
18 |
+
function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); }
|
19 |
+
}
|
20 |
+
if (!function_exists('ctype_cntrl')) {
|
21 |
+
function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); }
|
22 |
+
}
|
23 |
+
if (!function_exists('ctype_digit')) {
|
24 |
+
function ctype_digit($text) { return p\Ctype::ctype_digit($text); }
|
25 |
+
}
|
26 |
+
if (!function_exists('ctype_graph')) {
|
27 |
+
function ctype_graph($text) { return p\Ctype::ctype_graph($text); }
|
28 |
+
}
|
29 |
+
if (!function_exists('ctype_lower')) {
|
30 |
+
function ctype_lower($text) { return p\Ctype::ctype_lower($text); }
|
31 |
+
}
|
32 |
+
if (!function_exists('ctype_print')) {
|
33 |
+
function ctype_print($text) { return p\Ctype::ctype_print($text); }
|
34 |
+
}
|
35 |
+
if (!function_exists('ctype_punct')) {
|
36 |
+
function ctype_punct($text) { return p\Ctype::ctype_punct($text); }
|
37 |
+
}
|
38 |
+
if (!function_exists('ctype_space')) {
|
39 |
+
function ctype_space($text) { return p\Ctype::ctype_space($text); }
|
40 |
+
}
|
41 |
+
if (!function_exists('ctype_upper')) {
|
42 |
+
function ctype_upper($text) { return p\Ctype::ctype_upper($text); }
|
43 |
+
}
|
44 |
+
if (!function_exists('ctype_xdigit')) {
|
45 |
+
function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); }
|
46 |
+
}
|
vendor/symfony/polyfill-ctype/composer.json
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "symfony/polyfill-ctype",
|
3 |
+
"type": "library",
|
4 |
+
"description": "Symfony polyfill for ctype functions",
|
5 |
+
"keywords": ["polyfill", "compatibility", "portable", "ctype"],
|
6 |
+
"homepage": "https://symfony.com",
|
7 |
+
"license": "MIT",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Gert de Pagter",
|
11 |
+
"email": "BackEndTea@gmail.com"
|
12 |
+
},
|
13 |
+
{
|
14 |
+
"name": "Symfony Community",
|
15 |
+
"homepage": "https://symfony.com/contributors"
|
16 |
+
}
|
17 |
+
],
|
18 |
+
"require": {
|
19 |
+
"php": ">=5.3.3"
|
20 |
+
},
|
21 |
+
"autoload": {
|
22 |
+
"psr-4": { "Symfony\\Polyfill\\Ctype\\": "" },
|
23 |
+
"files": [ "bootstrap.php" ]
|
24 |
+
},
|
25 |
+
"suggest": {
|
26 |
+
"ext-ctype": "For best performance"
|
27 |
+
},
|
28 |
+
"minimum-stability": "dev",
|
29 |
+
"extra": {
|
30 |
+
"branch-alias": {
|
31 |
+
"dev-master": "1.17-dev"
|
32 |
+
},
|
33 |
+
"thanks": {
|
34 |
+
"name": "symfony/polyfill",
|
35 |
+
"url": "https://github.com/symfony/polyfill"
|
36 |
+
}
|
37 |
+
}
|
38 |
+
}
|
vendor/symfony/polyfill-php70/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2015-2019 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
vendor/symfony/polyfill-php70/Php70.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Polyfill\Php70;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @author Nicolas Grekas <p@tchwork.com>
|
16 |
+
*
|
17 |
+
* @internal
|
18 |
+
*/
|
19 |
+
final class Php70
|
20 |
+
{
|
21 |
+
public static function intdiv($dividend, $divisor)
|
22 |
+
{
|
23 |
+
$dividend = self::intArg($dividend, __FUNCTION__, 1);
|
24 |
+
$divisor = self::intArg($divisor, __FUNCTION__, 2);
|
25 |
+
|
26 |
+
if (0 === $divisor) {
|
27 |
+
throw new \DivisionByZeroError('Division by zero');
|
28 |
+
}
|
29 |
+
if (-1 === $divisor && ~PHP_INT_MAX === $dividend) {
|
30 |
+
throw new \ArithmeticError('Division of PHP_INT_MIN by -1 is not an integer');
|
31 |
+
}
|
32 |
+
|
33 |
+
return ($dividend - ($dividend % $divisor)) / $divisor;
|
34 |
+
}
|
35 |
+
|
36 |
+
public static function preg_replace_callback_array(array $patterns, $subject, $limit = -1, &$count = 0)
|
37 |
+
{
|
38 |
+
$count = 0;
|
39 |
+
$result = (string) $subject;
|
40 |
+
if (0 === $limit = self::intArg($limit, __FUNCTION__, 3)) {
|
41 |
+
return $result;
|
42 |
+
}
|
43 |
+
|
44 |
+
foreach ($patterns as $pattern => $callback) {
|
45 |
+
$result = preg_replace_callback($pattern, $callback, $result, $limit, $c);
|
46 |
+
$count += $c;
|
47 |
+
}
|
48 |
+
|
49 |
+
return $result;
|
50 |
+
}
|
51 |
+
|
52 |
+
public static function error_clear_last()
|
53 |
+
{
|
54 |
+
static $handler;
|
55 |
+
if (!$handler) {
|
56 |
+
$handler = function () { return false; };
|
57 |
+
}
|
58 |
+
set_error_handler($handler);
|
59 |
+
@trigger_error('');
|
60 |
+
restore_error_handler();
|
61 |
+
}
|
62 |
+
|
63 |
+
private static function intArg($value, $caller, $pos)
|
64 |
+
{
|
65 |
+
if (\is_int($value)) {
|
66 |
+
return $value;
|
67 |
+
}
|
68 |
+
if (!\is_numeric($value) || PHP_INT_MAX <= ($value += 0) || ~PHP_INT_MAX >= $value) {
|
69 |
+
throw new \TypeError(sprintf('%s() expects parameter %d to be integer, %s given', $caller, $pos, \gettype($value)));
|
70 |
+
}
|
71 |
+
|
72 |
+
return (int) $value;
|
73 |
+
}
|
74 |
+
}
|
vendor/symfony/polyfill-php70/README.md
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Symfony Polyfill / Php70
|
2 |
+
========================
|
3 |
+
|
4 |
+
This component provides features unavailable in releases prior to PHP 7.0:
|
5 |
+
|
6 |
+
- [`intdiv`](https://php.net/intdiv)
|
7 |
+
- [`preg_replace_callback_array`](https://php.net/preg_replace_callback_array)
|
8 |
+
- [`error_clear_last`](https://php.net/error_clear_last)
|
9 |
+
- `random_bytes` and `random_int` (from [paragonie/random_compat](https://github.com/paragonie/random_compat))
|
10 |
+
- [`*Error` throwable classes](https://php.net/Error)
|
11 |
+
- [`PHP_INT_MIN`](https://php.net/reserved.constants#constant.php-int-min)
|
12 |
+
- `SessionUpdateTimestampHandlerInterface`
|
13 |
+
|
14 |
+
More information can be found in the
|
15 |
+
[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
|
16 |
+
|
17 |
+
Compatibility notes
|
18 |
+
===================
|
19 |
+
|
20 |
+
To write portable code between PHP5 and PHP7, some care must be taken:
|
21 |
+
- `\*Error` exceptions must be caught before `\Exception`;
|
22 |
+
- after calling `error_clear_last()`, the result of `$e = error_get_last()` must be
|
23 |
+
verified using `isset($e['message'][0])` instead of `null !== $e`.
|
24 |
+
|
25 |
+
License
|
26 |
+
=======
|
27 |
+
|
28 |
+
This library is released under the [MIT license](LICENSE).
|
vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!class_exists('ArithmeticError')) {
|
4 |
+
class ArithmeticError extends Error
|
5 |
+
{
|
6 |
+
}
|
7 |
+
}
|
vendor/symfony/polyfill-php70/Resources/stubs/AssertionError.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!class_exists('AssertionError')) {
|
4 |
+
class AssertionError extends Error
|
5 |
+
{
|
6 |
+
}
|
7 |
+
}
|
vendor/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!class_exists('DivisionByZeroError')) {
|
4 |
+
class DivisionByZeroError extends Error
|
5 |
+
{
|
6 |
+
}
|
7 |
+
}
|
vendor/symfony/polyfill-php70/Resources/stubs/Error.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!class_exists('Error')) {
|
4 |
+
class Error extends Exception
|
5 |
+
{
|
6 |
+
}
|
7 |
+
}
|
vendor/symfony/polyfill-php70/Resources/stubs/ParseError.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!class_exists('ParseError')) {
|
4 |
+
class ParseError extends Error
|
5 |
+
{
|
6 |
+
}
|
7 |
+
}
|
vendor/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if (!interface_exists('SessionUpdateTimestampHandlerInterface')) {
|
3 |
+
interface SessionUpdateTimestampHandlerInterface
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* Checks if a session identifier already exists or not.
|
7 |
+
*
|
8 |
+
* @param string $key
|
9 |
+
*
|
10 |
+
* @return bool
|
11 |
+
*/
|
12 |
+
public function validateId($key);
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Updates the timestamp of a session when its data didn't change.
|
16 |
+
*
|
17 |
+
* @param string $key
|
18 |
+
* @param string $val
|
19 |
+
*
|
20 |
+
* @return bool
|
21 |
+
*/
|
22 |
+
public function updateTimestamp($key, $val);
|
23 |
+
}
|
24 |
+
}
|
vendor/symfony/polyfill-php70/Resources/stubs/TypeError.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!class_exists('TypeError')) {
|
4 |
+
class TypeError extends Error
|
5 |
+
{
|
6 |
+
}
|
7 |
+
}
|
vendor/symfony/polyfill-php70/bootstrap.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
use Symfony\Polyfill\Php70 as p;
|
13 |
+
|
14 |
+
if (PHP_VERSION_ID >= 70000) {
|
15 |
+
return;
|
16 |
+
}
|
17 |
+
|
18 |
+
if (!defined('PHP_INT_MIN')) {
|
19 |
+
define('PHP_INT_MIN', ~PHP_INT_MAX);
|
20 |
+
}
|
21 |
+
|
22 |
+
if (!function_exists('intdiv')) {
|
23 |
+
function intdiv($dividend, $divisor) { return p\Php70::intdiv($dividend, $divisor); }
|
24 |
+
}
|
25 |
+
if (!function_exists('preg_replace_callback_array')) {
|
26 |
+
function preg_replace_callback_array(array $patterns, $subject, $limit = -1, &$count = 0) { return p\Php70::preg_replace_callback_array($patterns, $subject, $limit, $count); }
|
27 |
+
}
|
28 |
+
if (!function_exists('error_clear_last')) {
|
29 |
+
function error_clear_last() { return p\Php70::error_clear_last(); }
|
30 |
+
}
|
vendor/symfony/polyfill-php70/composer.json
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "symfony/polyfill-php70",
|
3 |
+
"type": "library",
|
4 |
+
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
|
5 |
+
"keywords": ["polyfill", "shim", "compatibility", "portable"],
|
6 |
+
"homepage": "https://symfony.com",
|
7 |
+
"license": "MIT",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Nicolas Grekas",
|
11 |
+
"email": "p@tchwork.com"
|
12 |
+
},
|
13 |
+
{
|
14 |
+
"name": "Symfony Community",
|
15 |
+
"homepage": "https://symfony.com/contributors"
|
16 |
+
}
|
17 |
+
],
|
18 |
+
"require": {
|
19 |
+
"php": ">=5.3.3",
|
20 |
+
"paragonie/random_compat": "~1.0|~2.0|~9.99"
|
21 |
+
},
|
22 |
+
"autoload": {
|
23 |
+
"psr-4": { "Symfony\\Polyfill\\Php70\\": "" },
|
24 |
+
"files": [ "bootstrap.php" ],
|
25 |
+
"classmap": [ "Resources/stubs" ]
|
26 |
+
},
|
27 |
+
"minimum-stability": "dev",
|
28 |
+
"extra": {
|
29 |
+
"branch-alias": {
|
30 |
+
"dev-master": "1.17-dev"
|
31 |
+
},
|
32 |
+
"thanks": {
|
33 |
+
"name": "symfony/polyfill",
|
34 |
+
"url": "https://github.com/symfony/polyfill"
|
35 |
+
}
|
36 |
+
}
|
37 |
+
}
|
vendor/symfony/property-access/.gitignore
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
vendor/
|
2 |
+
composer.lock
|
3 |
+
phpunit.xml
|
vendor/symfony/property-access/CHANGELOG.md
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
CHANGELOG
|
2 |
+
=========
|
3 |
+
|
4 |
+
3.1.0
|
5 |
+
-----
|
6 |
+
|
7 |
+
* deprecated the `StringUtil` class, use `Symfony\Component\Inflector\Inflector`
|
8 |
+
instead
|
9 |
+
|
10 |
+
2.7.0
|
11 |
+
------
|
12 |
+
|
13 |
+
* `UnexpectedTypeException` now expects three constructor arguments: The invalid property value,
|
14 |
+
the `PropertyPathInterface` object and the current index of the property path.
|
15 |
+
|
16 |
+
2.5.0
|
17 |
+
------
|
18 |
+
|
19 |
+
* allowed non alpha numeric characters in second level and deeper object properties names
|
20 |
+
* [BC BREAK] when accessing an index on an object that does not implement
|
21 |
+
ArrayAccess, a NoSuchIndexException is now thrown instead of the
|
22 |
+
semantically wrong NoSuchPropertyException
|
23 |
+
* [BC BREAK] added isReadable() and isWritable() to PropertyAccessorInterface
|
24 |
+
|
25 |
+
2.3.0
|
26 |
+
------
|
27 |
+
|
28 |
+
* added PropertyAccessorBuilder, to enable or disable the support of "__call"
|
29 |
+
* added support for "__call" in the PropertyAccessor (disabled by default)
|
30 |
+
* [BC BREAK] changed PropertyAccessor to continue its search for a property or
|
31 |
+
method even if a non-public match was found. Before, a PropertyAccessDeniedException
|
32 |
+
was thrown in this case. Class PropertyAccessDeniedException was removed
|
33 |
+
now.
|
34 |
+
* deprecated PropertyAccess::getPropertyAccessor
|
35 |
+
* added PropertyAccess::createPropertyAccessor and PropertyAccess::createPropertyAccessorBuilder
|
vendor/symfony/property-access/Exception/AccessException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Thrown when a property path is not available.
|
16 |
+
*
|
17 |
+
* @author Stéphane Escandell <stephane.escandell@gmail.com>
|
18 |
+
*/
|
19 |
+
class AccessException extends RuntimeException
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/property-access/Exception/ExceptionInterface.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Marker interface for the PropertyAccess component.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
interface ExceptionInterface
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/property-access/Exception/InvalidArgumentException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Base InvalidArgumentException for the PropertyAccess component.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/property-access/Exception/InvalidPropertyPathException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Thrown when a property path is malformed.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
class InvalidPropertyPathException extends RuntimeException
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/property-access/Exception/NoSuchIndexException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Thrown when an index cannot be found.
|
16 |
+
*
|
17 |
+
* @author Stéphane Escandell <stephane.escandell@gmail.com>
|
18 |
+
*/
|
19 |
+
class NoSuchIndexException extends AccessException
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/property-access/Exception/NoSuchPropertyException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Thrown when a property cannot be found.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
class NoSuchPropertyException extends AccessException
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/property-access/Exception/OutOfBoundsException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Base OutOfBoundsException for the PropertyAccess component.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
class OutOfBoundsException extends \OutOfBoundsException implements ExceptionInterface
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/property-access/Exception/RuntimeException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Base RuntimeException for the PropertyAccess component.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
class RuntimeException extends \RuntimeException implements ExceptionInterface
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/property-access/Exception/UnexpectedTypeException.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess\Exception;
|
13 |
+
|
14 |
+
use Symfony\Component\PropertyAccess\PropertyPathInterface;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Thrown when a value does not match an expected type.
|
18 |
+
*
|
19 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
20 |
+
*/
|
21 |
+
class UnexpectedTypeException extends RuntimeException
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* @param mixed $value The unexpected value found while traversing property path
|
25 |
+
* @param PropertyPathInterface $path The property path
|
26 |
+
* @param int $pathIndex The property path index when the unexpected value was found
|
27 |
+
*/
|
28 |
+
public function __construct($value, PropertyPathInterface $path, $pathIndex)
|
29 |
+
{
|
30 |
+
$message = sprintf(
|
31 |
+
'PropertyAccessor requires a graph of objects or arrays to operate on, '.
|
32 |
+
'but it found type "%s" while trying to traverse path "%s" at property "%s".',
|
33 |
+
\gettype($value),
|
34 |
+
(string) $path,
|
35 |
+
$path->getElement($pathIndex)
|
36 |
+
);
|
37 |
+
|
38 |
+
parent::__construct($message);
|
39 |
+
}
|
40 |
+
}
|
vendor/symfony/property-access/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2004-2020 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
vendor/symfony/property-access/PropertyAccess.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Entry point of the PropertyAccess component.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
final class PropertyAccess
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* Creates a property accessor with the default configuration.
|
23 |
+
*
|
24 |
+
* @return PropertyAccessor
|
25 |
+
*/
|
26 |
+
public static function createPropertyAccessor()
|
27 |
+
{
|
28 |
+
return self::createPropertyAccessorBuilder()->getPropertyAccessor();
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Creates a property accessor builder.
|
33 |
+
*
|
34 |
+
* @return PropertyAccessorBuilder
|
35 |
+
*/
|
36 |
+
public static function createPropertyAccessorBuilder()
|
37 |
+
{
|
38 |
+
return new PropertyAccessorBuilder();
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* This class cannot be instantiated.
|
43 |
+
*/
|
44 |
+
private function __construct()
|
45 |
+
{
|
46 |
+
}
|
47 |
+
}
|
vendor/symfony/property-access/PropertyAccessor.php
ADDED
@@ -0,0 +1,971 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
use Psr\Cache\CacheItemPoolInterface;
|
15 |
+
use Psr\Log\LoggerInterface;
|
16 |
+
use Psr\Log\NullLogger;
|
17 |
+
use Symfony\Component\Cache\Adapter\AdapterInterface;
|
18 |
+
use Symfony\Component\Cache\Adapter\ApcuAdapter;
|
19 |
+
use Symfony\Component\Cache\Adapter\NullAdapter;
|
20 |
+
use Symfony\Component\Inflector\Inflector;
|
21 |
+
use Symfony\Component\PropertyAccess\Exception\AccessException;
|
22 |
+
use Symfony\Component\PropertyAccess\Exception\InvalidArgumentException;
|
23 |
+
use Symfony\Component\PropertyAccess\Exception\NoSuchIndexException;
|
24 |
+
use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
|
25 |
+
use Symfony\Component\PropertyAccess\Exception\UnexpectedTypeException;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Default implementation of {@link PropertyAccessorInterface}.
|
29 |
+
*
|
30 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
31 |
+
* @author Kévin Dunglas <dunglas@gmail.com>
|
32 |
+
* @author Nicolas Grekas <p@tchwork.com>
|
33 |
+
*/
|
34 |
+
class PropertyAccessor implements PropertyAccessorInterface
|
35 |
+
{
|
36 |
+
/**
|
37 |
+
* @internal
|
38 |
+
*/
|
39 |
+
const VALUE = 0;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @internal
|
43 |
+
*/
|
44 |
+
const REF = 1;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @internal
|
48 |
+
*/
|
49 |
+
const IS_REF_CHAINED = 2;
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @internal
|
53 |
+
*/
|
54 |
+
const ACCESS_HAS_PROPERTY = 0;
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @internal
|
58 |
+
*/
|
59 |
+
const ACCESS_TYPE = 1;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @internal
|
63 |
+
*/
|
64 |
+
const ACCESS_NAME = 2;
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @internal
|
68 |
+
*/
|
69 |
+
const ACCESS_REF = 3;
|
70 |
+
|
71 |
+
/**
|
72 |
+
* @internal
|
73 |
+
*/
|
74 |
+
const ACCESS_ADDER = 4;
|
75 |
+
|
76 |
+
/**
|
77 |
+
* @internal
|
78 |
+
*/
|
79 |
+
const ACCESS_REMOVER = 5;
|
80 |
+
|
81 |
+
/**
|
82 |
+
* @internal
|
83 |
+
*/
|
84 |
+
const ACCESS_TYPE_METHOD = 0;
|
85 |
+
|
86 |
+
/**
|
87 |
+
* @internal
|
88 |
+
*/
|
89 |
+
const ACCESS_TYPE_PROPERTY = 1;
|
90 |
+
|
91 |
+
/**
|
92 |
+
* @internal
|
93 |
+
*/
|
94 |
+
const ACCESS_TYPE_MAGIC = 2;
|
95 |
+
|
96 |
+
/**
|
97 |
+
* @internal
|
98 |
+
*/
|
99 |
+
const ACCESS_TYPE_ADDER_AND_REMOVER = 3;
|
100 |
+
|
101 |
+
/**
|
102 |
+
* @internal
|
103 |
+
*/
|
104 |
+
const ACCESS_TYPE_NOT_FOUND = 4;
|
105 |
+
|
106 |
+
/**
|
107 |
+
* @internal
|
108 |
+
*/
|
109 |
+
const CACHE_PREFIX_READ = 'r';
|
110 |
+
|
111 |
+
/**
|
112 |
+
* @internal
|
113 |
+
*/
|
114 |
+
const CACHE_PREFIX_WRITE = 'w';
|
115 |
+
|
116 |
+
/**
|
117 |
+
* @internal
|
118 |
+
*/
|
119 |
+
const CACHE_PREFIX_PROPERTY_PATH = 'p';
|
120 |
+
|
121 |
+
/**
|
122 |
+
* @var bool
|
123 |
+
*/
|
124 |
+
private $magicCall;
|
125 |
+
private $ignoreInvalidIndices;
|
126 |
+
|
127 |
+
/**
|
128 |
+
* @var CacheItemPoolInterface
|
129 |
+
*/
|
130 |
+
private $cacheItemPool;
|
131 |
+
|
132 |
+
private $readPropertyCache = [];
|
133 |
+
private $writePropertyCache = [];
|
134 |
+
private $propertyPathCache = [];
|
135 |
+
|
136 |
+
private static $previousErrorHandler = false;
|
137 |
+
private static $errorHandler = [__CLASS__, 'handleError'];
|
138 |
+
private static $resultProto = [self::VALUE => null];
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Should not be used by application code. Use
|
142 |
+
* {@link PropertyAccess::createPropertyAccessor()} instead.
|
143 |
+
*
|
144 |
+
* @param bool $magicCall
|
145 |
+
* @param bool $throwExceptionOnInvalidIndex
|
146 |
+
* @param CacheItemPoolInterface $cacheItemPool
|
147 |
+
*/
|
148 |
+
public function __construct($magicCall = false, $throwExceptionOnInvalidIndex = false, CacheItemPoolInterface $cacheItemPool = null)
|
149 |
+
{
|
150 |
+
$this->magicCall = $magicCall;
|
151 |
+
$this->ignoreInvalidIndices = !$throwExceptionOnInvalidIndex;
|
152 |
+
$this->cacheItemPool = $cacheItemPool instanceof NullAdapter ? null : $cacheItemPool; // Replace the NullAdapter by the null value
|
153 |
+
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* {@inheritdoc}
|
157 |
+
*/
|
158 |
+
public function getValue($objectOrArray, $propertyPath)
|
159 |
+
{
|
160 |
+
$propertyPath = $this->getPropertyPath($propertyPath);
|
161 |
+
|
162 |
+
$zval = [
|
163 |
+
self::VALUE => $objectOrArray,
|
164 |
+
];
|
165 |
+
$propertyValues = $this->readPropertiesUntil($zval, $propertyPath, $propertyPath->getLength(), $this->ignoreInvalidIndices);
|
166 |
+
|
167 |
+
return $propertyValues[\count($propertyValues) - 1][self::VALUE];
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* {@inheritdoc}
|
172 |
+
*/
|
173 |
+
public function setValue(&$objectOrArray, $propertyPath, $value)
|
174 |
+
{
|
175 |
+
$propertyPath = $this->getPropertyPath($propertyPath);
|
176 |
+
|
177 |
+
$zval = [
|
178 |
+
self::VALUE => $objectOrArray,
|
179 |
+
self::REF => &$objectOrArray,
|
180 |
+
];
|
181 |
+
$propertyValues = $this->readPropertiesUntil($zval, $propertyPath, $propertyPath->getLength() - 1);
|
182 |
+
$overwrite = true;
|
183 |
+
|
184 |
+
try {
|
185 |
+
if (\PHP_VERSION_ID < 70000 && false === self::$previousErrorHandler) {
|
186 |
+
self::$previousErrorHandler = set_error_handler(self::$errorHandler);
|
187 |
+
}
|
188 |
+
|
189 |
+
for ($i = \count($propertyValues) - 1; 0 <= $i; --$i) {
|
190 |
+
$zval = $propertyValues[$i];
|
191 |
+
unset($propertyValues[$i]);
|
192 |
+
|
193 |
+
// You only need set value for current element if:
|
194 |
+
// 1. it's the parent of the last index element
|
195 |
+
// OR
|
196 |
+
// 2. its child is not passed by reference
|
197 |
+
//
|
198 |
+
// This may avoid uncessary value setting process for array elements.
|
199 |
+
// For example:
|
200 |
+
// '[a][b][c]' => 'old-value'
|
201 |
+
// If you want to change its value to 'new-value',
|
202 |
+
// you only need set value for '[a][b][c]' and it's safe to ignore '[a][b]' and '[a]'
|
203 |
+
if ($overwrite) {
|
204 |
+
$property = $propertyPath->getElement($i);
|
205 |
+
|
206 |
+
if ($propertyPath->isIndex($i)) {
|
207 |
+
if ($overwrite = !isset($zval[self::REF])) {
|
208 |
+
$ref = &$zval[self::REF];
|
209 |
+
$ref = $zval[self::VALUE];
|
210 |
+
}
|
211 |
+
$this->writeIndex($zval, $property, $value);
|
212 |
+
if ($overwrite) {
|
213 |
+
$zval[self::VALUE] = $zval[self::REF];
|
214 |
+
}
|
215 |
+
} else {
|
216 |
+
$this->writeProperty($zval, $property, $value);
|
217 |
+
}
|
218 |
+
|
219 |
+
// if current element is an object
|
220 |
+
// OR
|
221 |
+
// if current element's reference chain is not broken - current element
|
222 |
+
// as well as all its ancients in the property path are all passed by reference,
|
223 |
+
// then there is no need to continue the value setting process
|
224 |
+
if (\is_object($zval[self::VALUE]) || isset($zval[self::IS_REF_CHAINED])) {
|
225 |
+
break;
|
226 |
+
}
|
227 |
+
}
|
228 |
+
|
229 |
+
$value = $zval[self::VALUE];
|
230 |
+
}
|
231 |
+
} catch (\TypeError $e) {
|
232 |
+
self::throwInvalidArgumentException($e->getMessage(), $e->getTrace(), 0, $e);
|
233 |
+
|
234 |
+
// It wasn't thrown in this class so rethrow it
|
235 |
+
throw $e;
|
236 |
+
} finally {
|
237 |
+
if (\PHP_VERSION_ID < 70000 && false !== self::$previousErrorHandler) {
|
238 |
+
restore_error_handler();
|
239 |
+
self::$previousErrorHandler = false;
|
240 |
+
}
|
241 |
+
}
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* @internal
|
246 |
+
*/
|
247 |
+
public static function handleError($type, $message, $file, $line, $context = [])
|
248 |
+
{
|
249 |
+
if (E_RECOVERABLE_ERROR === $type) {
|
250 |
+
self::throwInvalidArgumentException($message, debug_backtrace(false), 1);
|
251 |
+
}
|
252 |
+
|
253 |
+
return null !== self::$previousErrorHandler && false !== \call_user_func(self::$previousErrorHandler, $type, $message, $file, $line, $context);
|
254 |
+
}
|
255 |
+
|
256 |
+
private static function throwInvalidArgumentException($message, $trace, $i, $previous = null)
|
257 |
+
{
|
258 |
+
if (!isset($trace[$i]['file']) || __FILE__ !== $trace[$i]['file']) {
|
259 |
+
return;
|
260 |
+
}
|
261 |
+
|
262 |
+
if (\PHP_VERSION_ID < 80000) {
|
263 |
+
if (0 !== strpos($message, 'Argument ')) {
|
264 |
+
return;
|
265 |
+
}
|
266 |
+
|
267 |
+
$pos = strpos($message, $delim = 'must be of the type ') ?: (strpos($message, $delim = 'must be an instance of ') ?: strpos($message, $delim = 'must implement interface '));
|
268 |
+
$pos += \strlen($delim);
|
269 |
+
$j = strpos($message, ',', $pos);
|
270 |
+
$type = substr($message, 2 + $j, strpos($message, ' given', $j) - $j - 2);
|
271 |
+
$message = substr($message, $pos, $j - $pos);
|
272 |
+
|
273 |
+
throw new InvalidArgumentException(sprintf('Expected argument of type "%s", "%s" given.', $message, 'NULL' === $type ? 'null' : $type), 0, $previous);
|
274 |
+
}
|
275 |
+
|
276 |
+
if (preg_match('/^\S+::\S+\(\): Argument #\d+ \(\$\S+\) must be of type (\S+), (\S+) given/', $message, $matches)) {
|
277 |
+
list(, $expectedType, $actualType) = $matches;
|
278 |
+
|
279 |
+
throw new InvalidArgumentException(sprintf('Expected argument of type "%s", "%s" given.', $expectedType, 'NULL' === $actualType ? 'null' : $actualType), 0, $previous);
|
280 |
+
}
|
281 |
+
}
|
282 |
+
|
283 |
+
/**
|
284 |
+
* {@inheritdoc}
|
285 |
+
*/
|
286 |
+
public function isReadable($objectOrArray, $propertyPath)
|
287 |
+
{
|
288 |
+
if (!$propertyPath instanceof PropertyPathInterface) {
|
289 |
+
$propertyPath = new PropertyPath($propertyPath);
|
290 |
+
}
|
291 |
+
|
292 |
+
try {
|
293 |
+
$zval = [
|
294 |
+
self::VALUE => $objectOrArray,
|
295 |
+
];
|
296 |
+
$this->readPropertiesUntil($zval, $propertyPath, $propertyPath->getLength(), $this->ignoreInvalidIndices);
|
297 |
+
|
298 |
+
return true;
|
299 |
+
} catch (AccessException $e) {
|
300 |
+
return false;
|
301 |
+
} catch (UnexpectedTypeException $e) {
|
302 |
+
return false;
|
303 |
+
}
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* {@inheritdoc}
|
308 |
+
*/
|
309 |
+
public function isWritable($objectOrArray, $propertyPath)
|
310 |
+
{
|
311 |
+
$propertyPath = $this->getPropertyPath($propertyPath);
|
312 |
+
|
313 |
+
try {
|
314 |
+
$zval = [
|
315 |
+
self::VALUE => $objectOrArray,
|
316 |
+
];
|
317 |
+
$propertyValues = $this->readPropertiesUntil($zval, $propertyPath, $propertyPath->getLength() - 1);
|
318 |
+
|
319 |
+
for ($i = \count($propertyValues) - 1; 0 <= $i; --$i) {
|
320 |
+
$zval = $propertyValues[$i];
|
321 |
+
unset($propertyValues[$i]);
|
322 |
+
|
323 |
+
if ($propertyPath->isIndex($i)) {
|
324 |
+
if (!$zval[self::VALUE] instanceof \ArrayAccess && !\is_array($zval[self::VALUE])) {
|
325 |
+
return false;
|
326 |
+
}
|
327 |
+
} else {
|
328 |
+
if (!$this->isPropertyWritable($zval[self::VALUE], $propertyPath->getElement($i))) {
|
329 |
+
return false;
|
330 |
+
}
|
331 |
+
}
|
332 |
+
|
333 |
+
if (\is_object($zval[self::VALUE])) {
|
334 |
+
return true;
|
335 |
+
}
|
336 |
+
}
|
337 |
+
|
338 |
+
return true;
|
339 |
+
} catch (AccessException $e) {
|
340 |
+
return false;
|
341 |
+
} catch (UnexpectedTypeException $e) {
|
342 |
+
return false;
|
343 |
+
}
|
344 |
+
}
|
345 |
+
|
346 |
+
/**
|
347 |
+
* Reads the path from an object up to a given path index.
|
348 |
+
*
|
349 |
+
* @param array $zval The array containing the object or array to read from
|
350 |
+
* @param PropertyPathInterface $propertyPath The property path to read
|
351 |
+
* @param int $lastIndex The index up to which should be read
|
352 |
+
* @param bool $ignoreInvalidIndices Whether to ignore invalid indices or throw an exception
|
353 |
+
*
|
354 |
+
* @return array The values read in the path
|
355 |
+
*
|
356 |
+
* @throws UnexpectedTypeException if a value within the path is neither object nor array
|
357 |
+
* @throws NoSuchIndexException If a non-existing index is accessed
|
358 |
+
*/
|
359 |
+
private function readPropertiesUntil($zval, PropertyPathInterface $propertyPath, $lastIndex, $ignoreInvalidIndices = true)
|
360 |
+
{
|
361 |
+
if (!\is_object($zval[self::VALUE]) && !\is_array($zval[self::VALUE])) {
|
362 |
+
throw new UnexpectedTypeException($zval[self::VALUE], $propertyPath, 0);
|
363 |
+
}
|
364 |
+
|
365 |
+
// Add the root object to the list
|
366 |
+
$propertyValues = [$zval];
|
367 |
+
|
368 |
+
for ($i = 0; $i < $lastIndex; ++$i) {
|
369 |
+
$property = $propertyPath->getElement($i);
|
370 |
+
$isIndex = $propertyPath->isIndex($i);
|
371 |
+
|
372 |
+
if ($isIndex) {
|
373 |
+
// Create missing nested arrays on demand
|
374 |
+
if (($zval[self::VALUE] instanceof \ArrayAccess && !$zval[self::VALUE]->offsetExists($property)) ||
|
375 |
+
(\is_array($zval[self::VALUE]) && !isset($zval[self::VALUE][$property]) && !\array_key_exists($property, $zval[self::VALUE]))
|
376 |
+
) {
|
377 |
+
if (!$ignoreInvalidIndices) {
|
378 |
+
if (!\is_array($zval[self::VALUE])) {
|
379 |
+
if (!$zval[self::VALUE] instanceof \Traversable) {
|
380 |
+
throw new NoSuchIndexException(sprintf('Cannot read index "%s" while trying to traverse path "%s".', $property, (string) $propertyPath));
|
381 |
+
}
|
382 |
+
|
383 |
+
$zval[self::VALUE] = iterator_to_array($zval[self::VALUE]);
|
384 |
+
}
|
385 |
+
|
386 |
+
throw new NoSuchIndexException(sprintf('Cannot read index "%s" while trying to traverse path "%s". Available indices are "%s".', $property, (string) $propertyPath, print_r(array_keys($zval[self::VALUE]), true)));
|
387 |
+
}
|
388 |
+
|
389 |
+
if ($i + 1 < $propertyPath->getLength()) {
|
390 |
+
if (isset($zval[self::REF])) {
|
391 |
+
$zval[self::VALUE][$property] = [];
|
392 |
+
$zval[self::REF] = $zval[self::VALUE];
|
393 |
+
} else {
|
394 |
+
$zval[self::VALUE] = [$property => []];
|
395 |
+
}
|
396 |
+
}
|
397 |
+
}
|
398 |
+
|
399 |
+
$zval = $this->readIndex($zval, $property);
|
400 |
+
} else {
|
401 |
+
$zval = $this->readProperty($zval, $property);
|
402 |
+
}
|
403 |
+
|
404 |
+
// the final value of the path must not be validated
|
405 |
+
if ($i + 1 < $propertyPath->getLength() && !\is_object($zval[self::VALUE]) && !\is_array($zval[self::VALUE])) {
|
406 |
+
throw new UnexpectedTypeException($zval[self::VALUE], $propertyPath, $i + 1);
|
407 |
+
}
|
408 |
+
|
409 |
+
if (isset($zval[self::REF]) && (0 === $i || isset($propertyValues[$i - 1][self::IS_REF_CHAINED]))) {
|
410 |
+
// Set the IS_REF_CHAINED flag to true if:
|
411 |
+
// current property is passed by reference and
|
412 |
+
// it is the first element in the property path or
|
413 |
+
// the IS_REF_CHAINED flag of its parent element is true
|
414 |
+
// Basically, this flag is true only when the reference chain from the top element to current element is not broken
|
415 |
+
$zval[self::IS_REF_CHAINED] = true;
|
416 |
+
}
|
417 |
+
|
418 |
+
$propertyValues[] = $zval;
|
419 |
+
}
|
420 |
+
|
421 |
+
return $propertyValues;
|
422 |
+
}
|
423 |
+
|
424 |
+
/**
|
425 |
+
* Reads a key from an array-like structure.
|
426 |
+
*
|
427 |
+
* @param array $zval The array containing the array or \ArrayAccess object to read from
|
428 |
+
* @param string|int $index The key to read
|
429 |
+
*
|
430 |
+
* @return array The array containing the value of the key
|
431 |
+
*
|
432 |
+
* @throws NoSuchIndexException If the array does not implement \ArrayAccess or it is not an array
|
433 |
+
*/
|
434 |
+
private function readIndex($zval, $index)
|
435 |
+
{
|
436 |
+
if (!$zval[self::VALUE] instanceof \ArrayAccess && !\is_array($zval[self::VALUE])) {
|
437 |
+
throw new NoSuchIndexException(sprintf('Cannot read index "%s" from object of type "%s" because it doesn\'t implement \ArrayAccess.', $index, \get_class($zval[self::VALUE])));
|
438 |
+
}
|
439 |
+
|
440 |
+
$result = self::$resultProto;
|
441 |
+
|
442 |
+
if (isset($zval[self::VALUE][$index])) {
|
443 |
+
$result[self::VALUE] = $zval[self::VALUE][$index];
|
444 |
+
|
445 |
+
if (!isset($zval[self::REF])) {
|
446 |
+
// Save creating references when doing read-only lookups
|
447 |
+
} elseif (\is_array($zval[self::VALUE])) {
|
448 |
+
$result[self::REF] = &$zval[self::REF][$index];
|
449 |
+
} elseif (\is_object($result[self::VALUE])) {
|
450 |
+
$result[self::REF] = $result[self::VALUE];
|
451 |
+
}
|
452 |
+
}
|
453 |
+
|
454 |
+
return $result;
|
455 |
+
}
|
456 |
+
|
457 |
+
/**
|
458 |
+
* Reads the a property from an object.
|
459 |
+
*
|
460 |
+
* @param array $zval The array containing the object to read from
|
461 |
+
* @param string $property The property to read
|
462 |
+
*
|
463 |
+
* @return array The array containing the value of the property
|
464 |
+
*
|
465 |
+
* @throws NoSuchPropertyException if the property does not exist or is not public
|
466 |
+
*/
|
467 |
+
private function readProperty($zval, $property)
|
468 |
+
{
|
469 |
+
if (!\is_object($zval[self::VALUE])) {
|
470 |
+
throw new NoSuchPropertyException(sprintf('Cannot read property "%s" from an array. Maybe you intended to write the property path as "[%1$s]" instead.', $property));
|
471 |
+
}
|
472 |
+
|
473 |
+
$result = self::$resultProto;
|
474 |
+
$object = $zval[self::VALUE];
|
475 |
+
$access = $this->getReadAccessInfo(\get_class($object), $property);
|
476 |
+
|
477 |
+
try {
|
478 |
+
if (self::ACCESS_TYPE_METHOD === $access[self::ACCESS_TYPE]) {
|
479 |
+
try {
|
480 |
+
$result[self::VALUE] = $object->{$access[self::ACCESS_NAME]}();
|
481 |
+
} catch (\TypeError $e) {
|
482 |
+
list($trace) = $e->getTrace();
|
483 |
+
|
484 |
+
// handle uninitialized properties in PHP >= 7
|
485 |
+
if (__FILE__ === $trace['file']
|
486 |
+
&& $access[self::ACCESS_NAME] === $trace['function']
|
487 |
+
&& $object instanceof $trace['class']
|
488 |
+
&& preg_match((sprintf('/Return value (?:of .*::\w+\(\) )?must be of (?:the )?type (\w+), null returned$/')), $e->getMessage(), $matches)
|
489 |
+
) {
|
490 |
+
throw new AccessException(sprintf('The method "%s::%s()" returned "null", but expected type "%3$s". Did you forget to initialize a property or to make the return type nullable using "?%3$s"?', false === strpos(\get_class($object), "@anonymous\0") ? \get_class($object) : (get_parent_class($object) ?: 'class').'@anonymous', $access[self::ACCESS_NAME], $matches[1]), 0, $e);
|
491 |
+
}
|
492 |
+
|
493 |
+
throw $e;
|
494 |
+
}
|
495 |
+
} elseif (self::ACCESS_TYPE_PROPERTY === $access[self::ACCESS_TYPE]) {
|
496 |
+
$result[self::VALUE] = $object->{$access[self::ACCESS_NAME]};
|
497 |
+
|
498 |
+
if ($access[self::ACCESS_REF] && isset($zval[self::REF])) {
|
499 |
+
$result[self::REF] = &$object->{$access[self::ACCESS_NAME]};
|
500 |
+
}
|
501 |
+
} elseif (!$access[self::ACCESS_HAS_PROPERTY] && property_exists($object, $property)) {
|
502 |
+
// Needed to support \stdClass instances. We need to explicitly
|
503 |
+
// exclude $access[self::ACCESS_HAS_PROPERTY], otherwise if
|
504 |
+
// a *protected* property was found on the class, property_exists()
|
505 |
+
// returns true, consequently the following line will result in a
|
506 |
+
// fatal error.
|
507 |
+
|
508 |
+
$result[self::VALUE] = $object->$property;
|
509 |
+
if (isset($zval[self::REF])) {
|
510 |
+
$result[self::REF] = &$object->$property;
|
511 |
+
}
|
512 |
+
} elseif (self::ACCESS_TYPE_MAGIC === $access[self::ACCESS_TYPE]) {
|
513 |
+
// we call the getter and hope the __call do the job
|
514 |
+
$result[self::VALUE] = $object->{$access[self::ACCESS_NAME]}();
|
515 |
+
} else {
|
516 |
+
throw new NoSuchPropertyException($access[self::ACCESS_NAME]);
|
517 |
+
}
|
518 |
+
} catch (\Error $e) {
|
519 |
+
// handle uninitialized properties in PHP >= 7.4
|
520 |
+
if (\PHP_VERSION_ID >= 70400 && preg_match('/^Typed property ([\w\\\]+)::\$(\w+) must not be accessed before initialization$/', $e->getMessage(), $matches)) {
|
521 |
+
$r = new \ReflectionProperty($matches[1], $matches[2]);
|
522 |
+
|
523 |
+
throw new AccessException(sprintf('The property "%s::$%s" is not readable because it is typed "%s". You should initialize it or declare a default value instead.', $r->getDeclaringClass()->getName(), $r->getName(), $r->getType()->getName()), 0, $e);
|
524 |
+
}
|
525 |
+
|
526 |
+
throw $e;
|
527 |
+
}
|
528 |
+
|
529 |
+
// Objects are always passed around by reference
|
530 |
+
if (isset($zval[self::REF]) && \is_object($result[self::VALUE])) {
|
531 |
+
$result[self::REF] = $result[self::VALUE];
|
532 |
+
}
|
533 |
+
|
534 |
+
return $result;
|
535 |
+
}
|
536 |
+
|
537 |
+
/**
|
538 |
+
* Guesses how to read the property value.
|
539 |
+
*
|
540 |
+
* @param string $class
|
541 |
+
* @param string $property
|
542 |
+
*
|
543 |
+
* @return array
|
544 |
+
*/
|
545 |
+
private function getReadAccessInfo($class, $property)
|
546 |
+
{
|
547 |
+
$key = str_replace('\\', '.', $class).'..'.$property;
|
548 |
+
|
549 |
+
if (isset($this->readPropertyCache[$key])) {
|
550 |
+
return $this->readPropertyCache[$key];
|
551 |
+
}
|
552 |
+
|
553 |
+
if ($this->cacheItemPool) {
|
554 |
+
$item = $this->cacheItemPool->getItem(self::CACHE_PREFIX_READ.rawurlencode($key));
|
555 |
+
if ($item->isHit()) {
|
556 |
+
return $this->readPropertyCache[$key] = $item->get();
|
557 |
+
}
|
558 |
+
}
|
559 |
+
|
560 |
+
$access = [];
|
561 |
+
|
562 |
+
$reflClass = new \ReflectionClass($class);
|
563 |
+
$access[self::ACCESS_HAS_PROPERTY] = $reflClass->hasProperty($property);
|
564 |
+
$camelProp = $this->camelize($property);
|
565 |
+
$getter = 'get'.$camelProp;
|
566 |
+
$getsetter = lcfirst($camelProp); // jQuery style, e.g. read: last(), write: last($item)
|
567 |
+
$isser = 'is'.$camelProp;
|
568 |
+
$hasser = 'has'.$camelProp;
|
569 |
+
|
570 |
+
if ($reflClass->hasMethod($getter) && $reflClass->getMethod($getter)->isPublic()) {
|
571 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_METHOD;
|
572 |
+
$access[self::ACCESS_NAME] = $getter;
|
573 |
+
} elseif ($reflClass->hasMethod($getsetter) && $reflClass->getMethod($getsetter)->isPublic()) {
|
574 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_METHOD;
|
575 |
+
$access[self::ACCESS_NAME] = $getsetter;
|
576 |
+
} elseif ($reflClass->hasMethod($isser) && $reflClass->getMethod($isser)->isPublic()) {
|
577 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_METHOD;
|
578 |
+
$access[self::ACCESS_NAME] = $isser;
|
579 |
+
} elseif ($reflClass->hasMethod($hasser) && $reflClass->getMethod($hasser)->isPublic()) {
|
580 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_METHOD;
|
581 |
+
$access[self::ACCESS_NAME] = $hasser;
|
582 |
+
} elseif ($reflClass->hasMethod('__get') && $reflClass->getMethod('__get')->isPublic()) {
|
583 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_PROPERTY;
|
584 |
+
$access[self::ACCESS_NAME] = $property;
|
585 |
+
$access[self::ACCESS_REF] = false;
|
586 |
+
} elseif ($access[self::ACCESS_HAS_PROPERTY] && $reflClass->getProperty($property)->isPublic()) {
|
587 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_PROPERTY;
|
588 |
+
$access[self::ACCESS_NAME] = $property;
|
589 |
+
$access[self::ACCESS_REF] = true;
|
590 |
+
} elseif ($this->magicCall && $reflClass->hasMethod('__call') && $reflClass->getMethod('__call')->isPublic()) {
|
591 |
+
// we call the getter and hope the __call do the job
|
592 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_MAGIC;
|
593 |
+
$access[self::ACCESS_NAME] = $getter;
|
594 |
+
} else {
|
595 |
+
$methods = [$getter, $getsetter, $isser, $hasser, '__get'];
|
596 |
+
if ($this->magicCall) {
|
597 |
+
$methods[] = '__call';
|
598 |
+
}
|
599 |
+
|
600 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_NOT_FOUND;
|
601 |
+
$access[self::ACCESS_NAME] = sprintf(
|
602 |
+
'Neither the property "%s" nor one of the methods "%s()" '.
|
603 |
+
'exist and have public access in class "%s".',
|
604 |
+
$property,
|
605 |
+
implode('()", "', $methods),
|
606 |
+
$reflClass->name
|
607 |
+
);
|
608 |
+
}
|
609 |
+
|
610 |
+
if (isset($item)) {
|
611 |
+
$this->cacheItemPool->save($item->set($access));
|
612 |
+
}
|
613 |
+
|
614 |
+
return $this->readPropertyCache[$key] = $access;
|
615 |
+
}
|
616 |
+
|
617 |
+
/**
|
618 |
+
* Sets the value of an index in a given array-accessible value.
|
619 |
+
*
|
620 |
+
* @param array $zval The array containing the array or \ArrayAccess object to write to
|
621 |
+
* @param string|int $index The index to write at
|
622 |
+
* @param mixed $value The value to write
|
623 |
+
*
|
624 |
+
* @throws NoSuchIndexException If the array does not implement \ArrayAccess or it is not an array
|
625 |
+
*/
|
626 |
+
private function writeIndex($zval, $index, $value)
|
627 |
+
{
|
628 |
+
if (!$zval[self::VALUE] instanceof \ArrayAccess && !\is_array($zval[self::VALUE])) {
|
629 |
+
throw new NoSuchIndexException(sprintf('Cannot modify index "%s" in object of type "%s" because it doesn\'t implement \ArrayAccess.', $index, \get_class($zval[self::VALUE])));
|
630 |
+
}
|
631 |
+
|
632 |
+
$zval[self::REF][$index] = $value;
|
633 |
+
}
|
634 |
+
|
635 |
+
/**
|
636 |
+
* Sets the value of a property in the given object.
|
637 |
+
*
|
638 |
+
* @param array $zval The array containing the object to write to
|
639 |
+
* @param string $property The property to write
|
640 |
+
* @param mixed $value The value to write
|
641 |
+
*
|
642 |
+
* @throws NoSuchPropertyException if the property does not exist or is not public
|
643 |
+
*/
|
644 |
+
private function writeProperty($zval, $property, $value)
|
645 |
+
{
|
646 |
+
if (!\is_object($zval[self::VALUE])) {
|
647 |
+
throw new NoSuchPropertyException(sprintf('Cannot write property "%s" to an array. Maybe you should write the property path as "[%1$s]" instead?', $property));
|
648 |
+
}
|
649 |
+
|
650 |
+
$object = $zval[self::VALUE];
|
651 |
+
$access = $this->getWriteAccessInfo(\get_class($object), $property, $value);
|
652 |
+
|
653 |
+
if (self::ACCESS_TYPE_METHOD === $access[self::ACCESS_TYPE]) {
|
654 |
+
$object->{$access[self::ACCESS_NAME]}($value);
|
655 |
+
} elseif (self::ACCESS_TYPE_PROPERTY === $access[self::ACCESS_TYPE]) {
|
656 |
+
$object->{$access[self::ACCESS_NAME]} = $value;
|
657 |
+
} elseif (self::ACCESS_TYPE_ADDER_AND_REMOVER === $access[self::ACCESS_TYPE]) {
|
658 |
+
$this->writeCollection($zval, $property, $value, $access[self::ACCESS_ADDER], $access[self::ACCESS_REMOVER]);
|
659 |
+
} elseif (!$access[self::ACCESS_HAS_PROPERTY] && property_exists($object, $property)) {
|
660 |
+
// Needed to support \stdClass instances. We need to explicitly
|
661 |
+
// exclude $access[self::ACCESS_HAS_PROPERTY], otherwise if
|
662 |
+
// a *protected* property was found on the class, property_exists()
|
663 |
+
// returns true, consequently the following line will result in a
|
664 |
+
// fatal error.
|
665 |
+
|
666 |
+
$object->$property = $value;
|
667 |
+
} elseif (self::ACCESS_TYPE_MAGIC === $access[self::ACCESS_TYPE]) {
|
668 |
+
$object->{$access[self::ACCESS_NAME]}($value);
|
669 |
+
} elseif (self::ACCESS_TYPE_NOT_FOUND === $access[self::ACCESS_TYPE]) {
|
670 |
+
throw new NoSuchPropertyException(sprintf('Could not determine access type for property "%s" in class "%s".', $property, \get_class($object)));
|
671 |
+
} else {
|
672 |
+
throw new NoSuchPropertyException($access[self::ACCESS_NAME]);
|
673 |
+
}
|
674 |
+
}
|
675 |
+
|
676 |
+
/**
|
677 |
+
* Adjusts a collection-valued property by calling add*() and remove*() methods.
|
678 |
+
*
|
679 |
+
* @param array $zval The array containing the object to write to
|
680 |
+
* @param string $property The property to write
|
681 |
+
* @param iterable $collection The collection to write
|
682 |
+
* @param string $addMethod The add*() method
|
683 |
+
* @param string $removeMethod The remove*() method
|
684 |
+
*/
|
685 |
+
private function writeCollection($zval, $property, $collection, $addMethod, $removeMethod)
|
686 |
+
{
|
687 |
+
// At this point the add and remove methods have been found
|
688 |
+
$previousValue = $this->readProperty($zval, $property);
|
689 |
+
$previousValue = $previousValue[self::VALUE];
|
690 |
+
|
691 |
+
if ($previousValue instanceof \Traversable) {
|
692 |
+
$previousValue = iterator_to_array($previousValue);
|
693 |
+
}
|
694 |
+
if ($previousValue && \is_array($previousValue)) {
|
695 |
+
if (\is_object($collection)) {
|
696 |
+
$collection = iterator_to_array($collection);
|
697 |
+
}
|
698 |
+
foreach ($previousValue as $key => $item) {
|
699 |
+
if (!\in_array($item, $collection, true)) {
|
700 |
+
unset($previousValue[$key]);
|
701 |
+
$zval[self::VALUE]->{$removeMethod}($item);
|
702 |
+
}
|
703 |
+
}
|
704 |
+
} else {
|
705 |
+
$previousValue = false;
|
706 |
+
}
|
707 |
+
|
708 |
+
foreach ($collection as $item) {
|
709 |
+
if (!$previousValue || !\in_array($item, $previousValue, true)) {
|
710 |
+
$zval[self::VALUE]->{$addMethod}($item);
|
711 |
+
}
|
712 |
+
}
|
713 |
+
}
|
714 |
+
|
715 |
+
/**
|
716 |
+
* Guesses how to write the property value.
|
717 |
+
*
|
718 |
+
* @param string $class
|
719 |
+
* @param string $property
|
720 |
+
* @param mixed $value
|
721 |
+
*
|
722 |
+
* @return array
|
723 |
+
*/
|
724 |
+
private function getWriteAccessInfo($class, $property, $value)
|
725 |
+
{
|
726 |
+
$useAdderAndRemover = \is_array($value) || $value instanceof \Traversable;
|
727 |
+
$key = str_replace('\\', '.', $class).'..'.$property.'..'.(int) $useAdderAndRemover;
|
728 |
+
|
729 |
+
if (isset($this->writePropertyCache[$key])) {
|
730 |
+
return $this->writePropertyCache[$key];
|
731 |
+
}
|
732 |
+
|
733 |
+
if ($this->cacheItemPool) {
|
734 |
+
$item = $this->cacheItemPool->getItem(self::CACHE_PREFIX_WRITE.rawurlencode($key));
|
735 |
+
if ($item->isHit()) {
|
736 |
+
return $this->writePropertyCache[$key] = $item->get();
|
737 |
+
}
|
738 |
+
}
|
739 |
+
|
740 |
+
$access = [];
|
741 |
+
|
742 |
+
$reflClass = new \ReflectionClass($class);
|
743 |
+
$access[self::ACCESS_HAS_PROPERTY] = $reflClass->hasProperty($property);
|
744 |
+
$camelized = $this->camelize($property);
|
745 |
+
$singulars = (array) Inflector::singularize($camelized);
|
746 |
+
|
747 |
+
if ($useAdderAndRemover) {
|
748 |
+
$methods = $this->findAdderAndRemover($reflClass, $singulars);
|
749 |
+
|
750 |
+
if (null !== $methods) {
|
751 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_ADDER_AND_REMOVER;
|
752 |
+
$access[self::ACCESS_ADDER] = $methods[0];
|
753 |
+
$access[self::ACCESS_REMOVER] = $methods[1];
|
754 |
+
}
|
755 |
+
}
|
756 |
+
|
757 |
+
if (!isset($access[self::ACCESS_TYPE])) {
|
758 |
+
$setter = 'set'.$camelized;
|
759 |
+
$getsetter = lcfirst($camelized); // jQuery style, e.g. read: last(), write: last($item)
|
760 |
+
|
761 |
+
if ($this->isMethodAccessible($reflClass, $setter, 1)) {
|
762 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_METHOD;
|
763 |
+
$access[self::ACCESS_NAME] = $setter;
|
764 |
+
} elseif ($this->isMethodAccessible($reflClass, $getsetter, 1)) {
|
765 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_METHOD;
|
766 |
+
$access[self::ACCESS_NAME] = $getsetter;
|
767 |
+
} elseif ($this->isMethodAccessible($reflClass, '__set', 2)) {
|
768 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_PROPERTY;
|
769 |
+
$access[self::ACCESS_NAME] = $property;
|
770 |
+
} elseif ($access[self::ACCESS_HAS_PROPERTY] && $reflClass->getProperty($property)->isPublic()) {
|
771 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_PROPERTY;
|
772 |
+
$access[self::ACCESS_NAME] = $property;
|
773 |
+
} elseif ($this->magicCall && $this->isMethodAccessible($reflClass, '__call', 2)) {
|
774 |
+
// we call the getter and hope the __call do the job
|
775 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_MAGIC;
|
776 |
+
$access[self::ACCESS_NAME] = $setter;
|
777 |
+
} elseif (null !== $methods = $this->findAdderAndRemover($reflClass, $singulars)) {
|
778 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_NOT_FOUND;
|
779 |
+
$access[self::ACCESS_NAME] = sprintf(
|
780 |
+
'The property "%s" in class "%s" can be defined with the methods "%s()" but '.
|
781 |
+
'the new value must be an array or an instance of \Traversable, '.
|
782 |
+
'"%s" given.',
|
783 |
+
$property,
|
784 |
+
$reflClass->name,
|
785 |
+
implode('()", "', $methods),
|
786 |
+
\is_object($value) ? \get_class($value) : \gettype($value)
|
787 |
+
);
|
788 |
+
} else {
|
789 |
+
$access[self::ACCESS_TYPE] = self::ACCESS_TYPE_NOT_FOUND;
|
790 |
+
$access[self::ACCESS_NAME] = sprintf(
|
791 |
+
'Neither the property "%s" nor one of the methods %s"%s()", "%s()", '.
|
792 |
+
'"__set()" or "__call()" exist and have public access in class "%s".',
|
793 |
+
$property,
|
794 |
+
implode('', array_map(function ($singular) {
|
795 |
+
return '"add'.$singular.'()"/"remove'.$singular.'()", ';
|
796 |
+
}, $singulars)),
|
797 |
+
$setter,
|
798 |
+
$getsetter,
|
799 |
+
$reflClass->name
|
800 |
+
);
|
801 |
+
}
|
802 |
+
}
|
803 |
+
|
804 |
+
if (isset($item)) {
|
805 |
+
$this->cacheItemPool->save($item->set($access));
|
806 |
+
}
|
807 |
+
|
808 |
+
return $this->writePropertyCache[$key] = $access;
|
809 |
+
}
|
810 |
+
|
811 |
+
/**
|
812 |
+
* Returns whether a property is writable in the given object.
|
813 |
+
*
|
814 |
+
* @param object $object The object to write to
|
815 |
+
* @param string $property The property to write
|
816 |
+
*
|
817 |
+
* @return bool Whether the property is writable
|
818 |
+
*/
|
819 |
+
private function isPropertyWritable($object, $property)
|
820 |
+
{
|
821 |
+
if (!\is_object($object)) {
|
822 |
+
return false;
|
823 |
+
}
|
824 |
+
|
825 |
+
$access = $this->getWriteAccessInfo(\get_class($object), $property, []);
|
826 |
+
|
827 |
+
$isWritable = self::ACCESS_TYPE_METHOD === $access[self::ACCESS_TYPE]
|
828 |
+
|| self::ACCESS_TYPE_PROPERTY === $access[self::ACCESS_TYPE]
|
829 |
+
|| self::ACCESS_TYPE_ADDER_AND_REMOVER === $access[self::ACCESS_TYPE]
|
830 |
+
|| (!$access[self::ACCESS_HAS_PROPERTY] && property_exists($object, $property))
|
831 |
+
|| self::ACCESS_TYPE_MAGIC === $access[self::ACCESS_TYPE];
|
832 |
+
|
833 |
+
if ($isWritable) {
|
834 |
+
return true;
|
835 |
+
}
|
836 |
+
|
837 |
+
$access = $this->getWriteAccessInfo(\get_class($object), $property, '');
|
838 |
+
|
839 |
+
return self::ACCESS_TYPE_METHOD === $access[self::ACCESS_TYPE]
|
840 |
+
|| self::ACCESS_TYPE_PROPERTY === $access[self::ACCESS_TYPE]
|
841 |
+
|| self::ACCESS_TYPE_ADDER_AND_REMOVER === $access[self::ACCESS_TYPE]
|
842 |
+
|| (!$access[self::ACCESS_HAS_PROPERTY] && property_exists($object, $property))
|
843 |
+
|| self::ACCESS_TYPE_MAGIC === $access[self::ACCESS_TYPE];
|
844 |
+
}
|
845 |
+
|
846 |
+
/**
|
847 |
+
* Camelizes a given string.
|
848 |
+
*
|
849 |
+
* @param string $string Some string
|
850 |
+
*
|
851 |
+
* @return string The camelized version of the string
|
852 |
+
*/
|
853 |
+
private function camelize($string)
|
854 |
+
{
|
855 |
+
return str_replace(' ', '', ucwords(str_replace('_', ' ', $string)));
|
856 |
+
}
|
857 |
+
|
858 |
+
/**
|
859 |
+
* Searches for add and remove methods.
|
860 |
+
*
|
861 |
+
* @param \ReflectionClass $reflClass The reflection class for the given object
|
862 |
+
* @param array $singulars The singular form of the property name or null
|
863 |
+
*
|
864 |
+
* @return array|null An array containing the adder and remover when found, null otherwise
|
865 |
+
*/
|
866 |
+
private function findAdderAndRemover(\ReflectionClass $reflClass, array $singulars)
|
867 |
+
{
|
868 |
+
foreach ($singulars as $singular) {
|
869 |
+
$addMethod = 'add'.$singular;
|
870 |
+
$removeMethod = 'remove'.$singular;
|
871 |
+
|
872 |
+
$addMethodFound = $this->isMethodAccessible($reflClass, $addMethod, 1);
|
873 |
+
$removeMethodFound = $this->isMethodAccessible($reflClass, $removeMethod, 1);
|
874 |
+
|
875 |
+
if ($addMethodFound && $removeMethodFound) {
|
876 |
+
return [$addMethod, $removeMethod];
|
877 |
+
}
|
878 |
+
}
|
879 |
+
|
880 |
+
return null;
|
881 |
+
}
|
882 |
+
|
883 |
+
/**
|
884 |
+
* Returns whether a method is public and has the number of required parameters.
|
885 |
+
*
|
886 |
+
* @param \ReflectionClass $class The class of the method
|
887 |
+
* @param string $methodName The method name
|
888 |
+
* @param int $parameters The number of parameters
|
889 |
+
*
|
890 |
+
* @return bool Whether the method is public and has $parameters required parameters
|
891 |
+
*/
|
892 |
+
private function isMethodAccessible(\ReflectionClass $class, $methodName, $parameters)
|
893 |
+
{
|
894 |
+
if ($class->hasMethod($methodName)) {
|
895 |
+
$method = $class->getMethod($methodName);
|
896 |
+
|
897 |
+
if ($method->isPublic()
|
898 |
+
&& $method->getNumberOfRequiredParameters() <= $parameters
|
899 |
+
&& $method->getNumberOfParameters() >= $parameters) {
|
900 |
+
return true;
|
901 |
+
}
|
902 |
+
}
|
903 |
+
|
904 |
+
return false;
|
905 |
+
}
|
906 |
+
|
907 |
+
/**
|
908 |
+
* Gets a PropertyPath instance and caches it.
|
909 |
+
*
|
910 |
+
* @param string|PropertyPath $propertyPath
|
911 |
+
*
|
912 |
+
* @return PropertyPath
|
913 |
+
*/
|
914 |
+
private function getPropertyPath($propertyPath)
|
915 |
+
{
|
916 |
+
if ($propertyPath instanceof PropertyPathInterface) {
|
917 |
+
// Don't call the copy constructor has it is not needed here
|
918 |
+
return $propertyPath;
|
919 |
+
}
|
920 |
+
|
921 |
+
if (isset($this->propertyPathCache[$propertyPath])) {
|
922 |
+
return $this->propertyPathCache[$propertyPath];
|
923 |
+
}
|
924 |
+
|
925 |
+
if ($this->cacheItemPool) {
|
926 |
+
$item = $this->cacheItemPool->getItem(self::CACHE_PREFIX_PROPERTY_PATH.rawurlencode($propertyPath));
|
927 |
+
if ($item->isHit()) {
|
928 |
+
return $this->propertyPathCache[$propertyPath] = $item->get();
|
929 |
+
}
|
930 |
+
}
|
931 |
+
|
932 |
+
$propertyPathInstance = new PropertyPath($propertyPath);
|
933 |
+
if (isset($item)) {
|
934 |
+
$item->set($propertyPathInstance);
|
935 |
+
$this->cacheItemPool->save($item);
|
936 |
+
}
|
937 |
+
|
938 |
+
return $this->propertyPathCache[$propertyPath] = $propertyPathInstance;
|
939 |
+
}
|
940 |
+
|
941 |
+
/**
|
942 |
+
* Creates the APCu adapter if applicable.
|
943 |
+
*
|
944 |
+
* @param string $namespace
|
945 |
+
* @param int $defaultLifetime
|
946 |
+
* @param string $version
|
947 |
+
*
|
948 |
+
* @return AdapterInterface
|
949 |
+
*
|
950 |
+
* @throws RuntimeException When the Cache Component isn't available
|
951 |
+
*/
|
952 |
+
public static function createCache($namespace, $defaultLifetime, $version, LoggerInterface $logger = null)
|
953 |
+
{
|
954 |
+
if (!class_exists('Symfony\Component\Cache\Adapter\ApcuAdapter')) {
|
955 |
+
throw new \RuntimeException(sprintf('The Symfony Cache component must be installed to use "%s()".', __METHOD__));
|
956 |
+
}
|
957 |
+
|
958 |
+
if (!ApcuAdapter::isSupported()) {
|
959 |
+
return new NullAdapter();
|
960 |
+
}
|
961 |
+
|
962 |
+
$apcu = new ApcuAdapter($namespace, $defaultLifetime / 5, $version);
|
963 |
+
if ('cli' === \PHP_SAPI && !filter_var(ini_get('apc.enable_cli'), FILTER_VALIDATE_BOOLEAN)) {
|
964 |
+
$apcu->setLogger(new NullLogger());
|
965 |
+
} elseif (null !== $logger) {
|
966 |
+
$apcu->setLogger($logger);
|
967 |
+
}
|
968 |
+
|
969 |
+
return $apcu;
|
970 |
+
}
|
971 |
+
}
|
vendor/symfony/property-access/PropertyAccessorBuilder.php
ADDED
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
use Psr\Cache\CacheItemPoolInterface;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* A configurable builder to create a PropertyAccessor.
|
18 |
+
*
|
19 |
+
* @author Jérémie Augustin <jeremie.augustin@pixel-cookers.com>
|
20 |
+
*/
|
21 |
+
class PropertyAccessorBuilder
|
22 |
+
{
|
23 |
+
private $magicCall = false;
|
24 |
+
private $throwExceptionOnInvalidIndex = false;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @var CacheItemPoolInterface|null
|
28 |
+
*/
|
29 |
+
private $cacheItemPool;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Enables the use of "__call" by the PropertyAccessor.
|
33 |
+
*
|
34 |
+
* @return $this
|
35 |
+
*/
|
36 |
+
public function enableMagicCall()
|
37 |
+
{
|
38 |
+
$this->magicCall = true;
|
39 |
+
|
40 |
+
return $this;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Disables the use of "__call" by the PropertyAccessor.
|
45 |
+
*
|
46 |
+
* @return $this
|
47 |
+
*/
|
48 |
+
public function disableMagicCall()
|
49 |
+
{
|
50 |
+
$this->magicCall = false;
|
51 |
+
|
52 |
+
return $this;
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @return bool whether the use of "__call" by the PropertyAccessor is enabled
|
57 |
+
*/
|
58 |
+
public function isMagicCallEnabled()
|
59 |
+
{
|
60 |
+
return $this->magicCall;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Enables exceptions when reading a non-existing index.
|
65 |
+
*
|
66 |
+
* This has no influence on writing non-existing indices with PropertyAccessorInterface::setValue()
|
67 |
+
* which are always created on-the-fly.
|
68 |
+
*
|
69 |
+
* @return $this
|
70 |
+
*/
|
71 |
+
public function enableExceptionOnInvalidIndex()
|
72 |
+
{
|
73 |
+
$this->throwExceptionOnInvalidIndex = true;
|
74 |
+
|
75 |
+
return $this;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Disables exceptions when reading a non-existing index.
|
80 |
+
*
|
81 |
+
* Instead, null is returned when calling PropertyAccessorInterface::getValue() on a non-existing index.
|
82 |
+
*
|
83 |
+
* @return $this
|
84 |
+
*/
|
85 |
+
public function disableExceptionOnInvalidIndex()
|
86 |
+
{
|
87 |
+
$this->throwExceptionOnInvalidIndex = false;
|
88 |
+
|
89 |
+
return $this;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @return bool whether an exception is thrown or null is returned when reading a non-existing index
|
94 |
+
*/
|
95 |
+
public function isExceptionOnInvalidIndexEnabled()
|
96 |
+
{
|
97 |
+
return $this->throwExceptionOnInvalidIndex;
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Sets a cache system.
|
102 |
+
*
|
103 |
+
* @return PropertyAccessorBuilder The builder object
|
104 |
+
*/
|
105 |
+
public function setCacheItemPool(CacheItemPoolInterface $cacheItemPool = null)
|
106 |
+
{
|
107 |
+
$this->cacheItemPool = $cacheItemPool;
|
108 |
+
|
109 |
+
return $this;
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Gets the used cache system.
|
114 |
+
*
|
115 |
+
* @return CacheItemPoolInterface|null
|
116 |
+
*/
|
117 |
+
public function getCacheItemPool()
|
118 |
+
{
|
119 |
+
return $this->cacheItemPool;
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Builds and returns a new PropertyAccessor object.
|
124 |
+
*
|
125 |
+
* @return PropertyAccessorInterface The built PropertyAccessor
|
126 |
+
*/
|
127 |
+
public function getPropertyAccessor()
|
128 |
+
{
|
129 |
+
return new PropertyAccessor($this->magicCall, $this->throwExceptionOnInvalidIndex, $this->cacheItemPool);
|
130 |
+
}
|
131 |
+
}
|
vendor/symfony/property-access/PropertyAccessorInterface.php
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Writes and reads values to/from an object/array graph.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
interface PropertyAccessorInterface
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* Sets the value at the end of the property path of the object graph.
|
23 |
+
*
|
24 |
+
* Example:
|
25 |
+
*
|
26 |
+
* use Symfony\Component\PropertyAccess\PropertyAccess;
|
27 |
+
*
|
28 |
+
* $propertyAccessor = PropertyAccess::createPropertyAccessor();
|
29 |
+
*
|
30 |
+
* echo $propertyAccessor->setValue($object, 'child.name', 'Fabien');
|
31 |
+
* // equals echo $object->getChild()->setName('Fabien');
|
32 |
+
*
|
33 |
+
* This method first tries to find a public setter for each property in the
|
34 |
+
* path. The name of the setter must be the camel-cased property name
|
35 |
+
* prefixed with "set".
|
36 |
+
*
|
37 |
+
* If the setter does not exist, this method tries to find a public
|
38 |
+
* property. The value of the property is then changed.
|
39 |
+
*
|
40 |
+
* If neither is found, an exception is thrown.
|
41 |
+
*
|
42 |
+
* @param object|array $objectOrArray The object or array to modify
|
43 |
+
* @param string|PropertyPathInterface $propertyPath The property path to modify
|
44 |
+
* @param mixed $value The value to set at the end of the property path
|
45 |
+
*
|
46 |
+
* @throws Exception\InvalidArgumentException If the property path is invalid
|
47 |
+
* @throws Exception\AccessException If a property/index does not exist or is not public
|
48 |
+
* @throws Exception\UnexpectedTypeException If a value within the path is neither object nor array
|
49 |
+
*/
|
50 |
+
public function setValue(&$objectOrArray, $propertyPath, $value);
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Returns the value at the end of the property path of the object graph.
|
54 |
+
*
|
55 |
+
* Example:
|
56 |
+
*
|
57 |
+
* use Symfony\Component\PropertyAccess\PropertyAccess;
|
58 |
+
*
|
59 |
+
* $propertyAccessor = PropertyAccess::createPropertyAccessor();
|
60 |
+
*
|
61 |
+
* echo $propertyAccessor->getValue($object, 'child.name');
|
62 |
+
* // equals echo $object->getChild()->getName();
|
63 |
+
*
|
64 |
+
* This method first tries to find a public getter for each property in the
|
65 |
+
* path. The name of the getter must be the camel-cased property name
|
66 |
+
* prefixed with "get", "is", or "has".
|
67 |
+
*
|
68 |
+
* If the getter does not exist, this method tries to find a public
|
69 |
+
* property. The value of the property is then returned.
|
70 |
+
*
|
71 |
+
* If none of them are found, an exception is thrown.
|
72 |
+
*
|
73 |
+
* @param object|array $objectOrArray The object or array to traverse
|
74 |
+
* @param string|PropertyPathInterface $propertyPath The property path to read
|
75 |
+
*
|
76 |
+
* @return mixed The value at the end of the property path
|
77 |
+
*
|
78 |
+
* @throws Exception\InvalidArgumentException If the property path is invalid
|
79 |
+
* @throws Exception\AccessException If a property/index does not exist or is not public
|
80 |
+
* @throws Exception\UnexpectedTypeException If a value within the path is neither object
|
81 |
+
* nor array
|
82 |
+
*/
|
83 |
+
public function getValue($objectOrArray, $propertyPath);
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Returns whether a value can be written at a given property path.
|
87 |
+
*
|
88 |
+
* Whenever this method returns true, {@link setValue()} is guaranteed not
|
89 |
+
* to throw an exception when called with the same arguments.
|
90 |
+
*
|
91 |
+
* @param object|array $objectOrArray The object or array to check
|
92 |
+
* @param string|PropertyPathInterface $propertyPath The property path to check
|
93 |
+
*
|
94 |
+
* @return bool Whether the value can be set
|
95 |
+
*
|
96 |
+
* @throws Exception\InvalidArgumentException If the property path is invalid
|
97 |
+
*/
|
98 |
+
public function isWritable($objectOrArray, $propertyPath);
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Returns whether a property path can be read from an object graph.
|
102 |
+
*
|
103 |
+
* Whenever this method returns true, {@link getValue()} is guaranteed not
|
104 |
+
* to throw an exception when called with the same arguments.
|
105 |
+
*
|
106 |
+
* @param object|array $objectOrArray The object or array to check
|
107 |
+
* @param string|PropertyPathInterface $propertyPath The property path to check
|
108 |
+
*
|
109 |
+
* @return bool Whether the property path can be read
|
110 |
+
*
|
111 |
+
* @throws Exception\InvalidArgumentException If the property path is invalid
|
112 |
+
*/
|
113 |
+
public function isReadable($objectOrArray, $propertyPath);
|
114 |
+
}
|
vendor/symfony/property-access/PropertyPath.php
ADDED
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
use Symfony\Component\PropertyAccess\Exception\InvalidArgumentException;
|
15 |
+
use Symfony\Component\PropertyAccess\Exception\InvalidPropertyPathException;
|
16 |
+
use Symfony\Component\PropertyAccess\Exception\OutOfBoundsException;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Default implementation of {@link PropertyPathInterface}.
|
20 |
+
*
|
21 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
22 |
+
*/
|
23 |
+
class PropertyPath implements \IteratorAggregate, PropertyPathInterface
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* Character used for separating between plural and singular of an element.
|
27 |
+
*/
|
28 |
+
const SINGULAR_SEPARATOR = '|';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* The elements of the property path.
|
32 |
+
*
|
33 |
+
* @var array
|
34 |
+
*/
|
35 |
+
private $elements = [];
|
36 |
+
|
37 |
+
/**
|
38 |
+
* The number of elements in the property path.
|
39 |
+
*
|
40 |
+
* @var int
|
41 |
+
*/
|
42 |
+
private $length;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Contains a Boolean for each property in $elements denoting whether this
|
46 |
+
* element is an index. It is a property otherwise.
|
47 |
+
*
|
48 |
+
* @var array
|
49 |
+
*/
|
50 |
+
private $isIndex = [];
|
51 |
+
|
52 |
+
/**
|
53 |
+
* String representation of the path.
|
54 |
+
*
|
55 |
+
* @var string
|
56 |
+
*/
|
57 |
+
private $pathAsString;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Constructs a property path from a string.
|
61 |
+
*
|
62 |
+
* @param PropertyPath|string $propertyPath The property path as string or instance
|
63 |
+
*
|
64 |
+
* @throws InvalidArgumentException If the given path is not a string
|
65 |
+
* @throws InvalidPropertyPathException If the syntax of the property path is not valid
|
66 |
+
*/
|
67 |
+
public function __construct($propertyPath)
|
68 |
+
{
|
69 |
+
// Can be used as copy constructor
|
70 |
+
if ($propertyPath instanceof self) {
|
71 |
+
/* @var PropertyPath $propertyPath */
|
72 |
+
$this->elements = $propertyPath->elements;
|
73 |
+
$this->length = $propertyPath->length;
|
74 |
+
$this->isIndex = $propertyPath->isIndex;
|
75 |
+
$this->pathAsString = $propertyPath->pathAsString;
|
76 |
+
|
77 |
+
return;
|
78 |
+
}
|
79 |
+
if (!\is_string($propertyPath)) {
|
80 |
+
throw new InvalidArgumentException(sprintf('The property path constructor needs a string or an instance of "Symfony\Component\PropertyAccess\PropertyPath". Got: "%s".', \is_object($propertyPath) ? \get_class($propertyPath) : \gettype($propertyPath)));
|
81 |
+
}
|
82 |
+
|
83 |
+
if ('' === $propertyPath) {
|
84 |
+
throw new InvalidPropertyPathException('The property path should not be empty.');
|
85 |
+
}
|
86 |
+
|
87 |
+
$this->pathAsString = $propertyPath;
|
88 |
+
$position = 0;
|
89 |
+
$remaining = $propertyPath;
|
90 |
+
|
91 |
+
// first element is evaluated differently - no leading dot for properties
|
92 |
+
$pattern = '/^(([^\.\[]++)|\[([^\]]++)\])(.*)/';
|
93 |
+
|
94 |
+
while (preg_match($pattern, $remaining, $matches)) {
|
95 |
+
if ('' !== $matches[2]) {
|
96 |
+
$element = $matches[2];
|
97 |
+
$this->isIndex[] = false;
|
98 |
+
} else {
|
99 |
+
$element = $matches[3];
|
100 |
+
$this->isIndex[] = true;
|
101 |
+
}
|
102 |
+
|
103 |
+
$this->elements[] = $element;
|
104 |
+
|
105 |
+
$position += \strlen($matches[1]);
|
106 |
+
$remaining = $matches[4];
|
107 |
+
$pattern = '/^(\.([^\.|\[]++)|\[([^\]]++)\])(.*)/';
|
108 |
+
}
|
109 |
+
|
110 |
+
if ('' !== $remaining) {
|
111 |
+
throw new InvalidPropertyPathException(sprintf('Could not parse property path "%s". Unexpected token "%s" at position %d.', $propertyPath, $remaining[0], $position));
|
112 |
+
}
|
113 |
+
|
114 |
+
$this->length = \count($this->elements);
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* {@inheritdoc}
|
119 |
+
*/
|
120 |
+
public function __toString()
|
121 |
+
{
|
122 |
+
return $this->pathAsString;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* {@inheritdoc}
|
127 |
+
*/
|
128 |
+
public function getLength()
|
129 |
+
{
|
130 |
+
return $this->length;
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* {@inheritdoc}
|
135 |
+
*/
|
136 |
+
public function getParent()
|
137 |
+
{
|
138 |
+
if ($this->length <= 1) {
|
139 |
+
return null;
|
140 |
+
}
|
141 |
+
|
142 |
+
$parent = clone $this;
|
143 |
+
|
144 |
+
--$parent->length;
|
145 |
+
$parent->pathAsString = substr($parent->pathAsString, 0, max(strrpos($parent->pathAsString, '.'), strrpos($parent->pathAsString, '[')));
|
146 |
+
array_pop($parent->elements);
|
147 |
+
array_pop($parent->isIndex);
|
148 |
+
|
149 |
+
return $parent;
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* Returns a new iterator for this path.
|
154 |
+
*
|
155 |
+
* @return PropertyPathIteratorInterface
|
156 |
+
*/
|
157 |
+
public function getIterator()
|
158 |
+
{
|
159 |
+
return new PropertyPathIterator($this);
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* {@inheritdoc}
|
164 |
+
*/
|
165 |
+
public function getElements()
|
166 |
+
{
|
167 |
+
return $this->elements;
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* {@inheritdoc}
|
172 |
+
*/
|
173 |
+
public function getElement($index)
|
174 |
+
{
|
175 |
+
if (!isset($this->elements[$index])) {
|
176 |
+
throw new OutOfBoundsException(sprintf('The index "%s" is not within the property path.', $index));
|
177 |
+
}
|
178 |
+
|
179 |
+
return $this->elements[$index];
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* {@inheritdoc}
|
184 |
+
*/
|
185 |
+
public function isProperty($index)
|
186 |
+
{
|
187 |
+
if (!isset($this->isIndex[$index])) {
|
188 |
+
throw new OutOfBoundsException(sprintf('The index "%s" is not within the property path.', $index));
|
189 |
+
}
|
190 |
+
|
191 |
+
return !$this->isIndex[$index];
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* {@inheritdoc}
|
196 |
+
*/
|
197 |
+
public function isIndex($index)
|
198 |
+
{
|
199 |
+
if (!isset($this->isIndex[$index])) {
|
200 |
+
throw new OutOfBoundsException(sprintf('The index "%s" is not within the property path.', $index));
|
201 |
+
}
|
202 |
+
|
203 |
+
return $this->isIndex[$index];
|
204 |
+
}
|
205 |
+
}
|
vendor/symfony/property-access/PropertyPathBuilder.php
ADDED
@@ -0,0 +1,298 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
use Symfony\Component\PropertyAccess\Exception\OutOfBoundsException;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
class PropertyPathBuilder
|
20 |
+
{
|
21 |
+
private $elements = [];
|
22 |
+
private $isIndex = [];
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Creates a new property path builder.
|
26 |
+
*
|
27 |
+
* @param PropertyPathInterface|string|null $path The path to initially store
|
28 |
+
* in the builder. Optional.
|
29 |
+
*/
|
30 |
+
public function __construct($path = null)
|
31 |
+
{
|
32 |
+
if (null !== $path) {
|
33 |
+
$this->append($path);
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Appends a (sub-) path to the current path.
|
39 |
+
*
|
40 |
+
* @param PropertyPathInterface|string $path The path to append
|
41 |
+
* @param int $offset The offset where the appended
|
42 |
+
* piece starts in $path
|
43 |
+
* @param int $length The length of the appended piece
|
44 |
+
* If 0, the full path is appended
|
45 |
+
*/
|
46 |
+
public function append($path, $offset = 0, $length = 0)
|
47 |
+
{
|
48 |
+
if (\is_string($path)) {
|
49 |
+
$path = new PropertyPath($path);
|
50 |
+
}
|
51 |
+
|
52 |
+
if (0 === $length) {
|
53 |
+
$end = $path->getLength();
|
54 |
+
} else {
|
55 |
+
$end = $offset + $length;
|
56 |
+
}
|
57 |
+
|
58 |
+
for (; $offset < $end; ++$offset) {
|
59 |
+
$this->elements[] = $path->getElement($offset);
|
60 |
+
$this->isIndex[] = $path->isIndex($offset);
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Appends an index element to the current path.
|
66 |
+
*
|
67 |
+
* @param string $name The name of the appended index
|
68 |
+
*/
|
69 |
+
public function appendIndex($name)
|
70 |
+
{
|
71 |
+
$this->elements[] = $name;
|
72 |
+
$this->isIndex[] = true;
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Appends a property element to the current path.
|
77 |
+
*
|
78 |
+
* @param string $name The name of the appended property
|
79 |
+
*/
|
80 |
+
public function appendProperty($name)
|
81 |
+
{
|
82 |
+
$this->elements[] = $name;
|
83 |
+
$this->isIndex[] = false;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Removes elements from the current path.
|
88 |
+
*
|
89 |
+
* @param int $offset The offset at which to remove
|
90 |
+
* @param int $length The length of the removed piece
|
91 |
+
*
|
92 |
+
* @throws OutOfBoundsException if offset is invalid
|
93 |
+
*/
|
94 |
+
public function remove($offset, $length = 1)
|
95 |
+
{
|
96 |
+
if (!isset($this->elements[$offset])) {
|
97 |
+
throw new OutOfBoundsException(sprintf('The offset "%s" is not within the property path.', $offset));
|
98 |
+
}
|
99 |
+
|
100 |
+
$this->resize($offset, $length, 0);
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Replaces a sub-path by a different (sub-) path.
|
105 |
+
*
|
106 |
+
* @param int $offset The offset at which to replace
|
107 |
+
* @param int $length The length of the piece to replace
|
108 |
+
* @param PropertyPathInterface|string $path The path to insert
|
109 |
+
* @param int $pathOffset The offset where the inserted piece
|
110 |
+
* starts in $path
|
111 |
+
* @param int $pathLength The length of the inserted piece
|
112 |
+
* If 0, the full path is inserted
|
113 |
+
*
|
114 |
+
* @throws OutOfBoundsException If the offset is invalid
|
115 |
+
*/
|
116 |
+
public function replace($offset, $length, $path, $pathOffset = 0, $pathLength = 0)
|
117 |
+
{
|
118 |
+
if (\is_string($path)) {
|
119 |
+
$path = new PropertyPath($path);
|
120 |
+
}
|
121 |
+
|
122 |
+
if ($offset < 0 && abs($offset) <= $this->getLength()) {
|
123 |
+
$offset = $this->getLength() + $offset;
|
124 |
+
} elseif (!isset($this->elements[$offset])) {
|
125 |
+
throw new OutOfBoundsException('The offset '.$offset.' is not within the property path');
|
126 |
+
}
|
127 |
+
|
128 |
+
if (0 === $pathLength) {
|
129 |
+
$pathLength = $path->getLength() - $pathOffset;
|
130 |
+
}
|
131 |
+
|
132 |
+
$this->resize($offset, $length, $pathLength);
|
133 |
+
|
134 |
+
for ($i = 0; $i < $pathLength; ++$i) {
|
135 |
+
$this->elements[$offset + $i] = $path->getElement($pathOffset + $i);
|
136 |
+
$this->isIndex[$offset + $i] = $path->isIndex($pathOffset + $i);
|
137 |
+
}
|
138 |
+
ksort($this->elements);
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Replaces a property element by an index element.
|
143 |
+
*
|
144 |
+
* @param int $offset The offset at which to replace
|
145 |
+
* @param string $name The new name of the element. Optional
|
146 |
+
*
|
147 |
+
* @throws OutOfBoundsException If the offset is invalid
|
148 |
+
*/
|
149 |
+
public function replaceByIndex($offset, $name = null)
|
150 |
+
{
|
151 |
+
if (!isset($this->elements[$offset])) {
|
152 |
+
throw new OutOfBoundsException(sprintf('The offset "%s" is not within the property path.', $offset));
|
153 |
+
}
|
154 |
+
|
155 |
+
if (null !== $name) {
|
156 |
+
$this->elements[$offset] = $name;
|
157 |
+
}
|
158 |
+
|
159 |
+
$this->isIndex[$offset] = true;
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Replaces an index element by a property element.
|
164 |
+
*
|
165 |
+
* @param int $offset The offset at which to replace
|
166 |
+
* @param string $name The new name of the element. Optional
|
167 |
+
*
|
168 |
+
* @throws OutOfBoundsException If the offset is invalid
|
169 |
+
*/
|
170 |
+
public function replaceByProperty($offset, $name = null)
|
171 |
+
{
|
172 |
+
if (!isset($this->elements[$offset])) {
|
173 |
+
throw new OutOfBoundsException(sprintf('The offset "%s" is not within the property path.', $offset));
|
174 |
+
}
|
175 |
+
|
176 |
+
if (null !== $name) {
|
177 |
+
$this->elements[$offset] = $name;
|
178 |
+
}
|
179 |
+
|
180 |
+
$this->isIndex[$offset] = false;
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Returns the length of the current path.
|
185 |
+
*
|
186 |
+
* @return int The path length
|
187 |
+
*/
|
188 |
+
public function getLength()
|
189 |
+
{
|
190 |
+
return \count($this->elements);
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Returns the current property path.
|
195 |
+
*
|
196 |
+
* @return PropertyPathInterface|null The constructed property path
|
197 |
+
*/
|
198 |
+
public function getPropertyPath()
|
199 |
+
{
|
200 |
+
$pathAsString = $this->__toString();
|
201 |
+
|
202 |
+
return '' !== $pathAsString ? new PropertyPath($pathAsString) : null;
|
203 |
+
}
|
204 |
+
|
205 |
+
/**
|
206 |
+
* Returns the current property path as string.
|
207 |
+
*
|
208 |
+
* @return string The property path as string
|
209 |
+
*/
|
210 |
+
public function __toString()
|
211 |
+
{
|
212 |
+
$string = '';
|
213 |
+
|
214 |
+
foreach ($this->elements as $offset => $element) {
|
215 |
+
if ($this->isIndex[$offset]) {
|
216 |
+
$element = '['.$element.']';
|
217 |
+
} elseif ('' !== $string) {
|
218 |
+
$string .= '.';
|
219 |
+
}
|
220 |
+
|
221 |
+
$string .= $element;
|
222 |
+
}
|
223 |
+
|
224 |
+
return $string;
|
225 |
+
}
|
226 |
+
|
227 |
+
/**
|
228 |
+
* Resizes the path so that a chunk of length $cutLength is
|
229 |
+
* removed at $offset and another chunk of length $insertionLength
|
230 |
+
* can be inserted.
|
231 |
+
*
|
232 |
+
* @param int $offset The offset where the removed chunk starts
|
233 |
+
* @param int $cutLength The length of the removed chunk
|
234 |
+
* @param int $insertionLength The length of the inserted chunk
|
235 |
+
*/
|
236 |
+
private function resize($offset, $cutLength, $insertionLength)
|
237 |
+
{
|
238 |
+
// Nothing else to do in this case
|
239 |
+
if ($insertionLength === $cutLength) {
|
240 |
+
return;
|
241 |
+
}
|
242 |
+
|
243 |
+
$length = \count($this->elements);
|
244 |
+
|
245 |
+
if ($cutLength > $insertionLength) {
|
246 |
+
// More elements should be removed than inserted
|
247 |
+
$diff = $cutLength - $insertionLength;
|
248 |
+
$newLength = $length - $diff;
|
249 |
+
|
250 |
+
// Shift elements to the left (left-to-right until the new end)
|
251 |
+
// Max allowed offset to be shifted is such that
|
252 |
+
// $offset + $diff < $length (otherwise invalid index access)
|
253 |
+
// i.e. $offset < $length - $diff = $newLength
|
254 |
+
for ($i = $offset; $i < $newLength; ++$i) {
|
255 |
+
$this->elements[$i] = $this->elements[$i + $diff];
|
256 |
+
$this->isIndex[$i] = $this->isIndex[$i + $diff];
|
257 |
+
}
|
258 |
+
|
259 |
+
// All remaining elements should be removed
|
260 |
+
$this->elements = \array_slice($this->elements, 0, $i);
|
261 |
+
$this->isIndex = \array_slice($this->isIndex, 0, $i);
|
262 |
+
} else {
|
263 |
+
$diff = $insertionLength - $cutLength;
|
264 |
+
|
265 |
+
$newLength = $length + $diff;
|
266 |
+
$indexAfterInsertion = $offset + $insertionLength;
|
267 |
+
|
268 |
+
// $diff <= $insertionLength
|
269 |
+
// $indexAfterInsertion >= $insertionLength
|
270 |
+
// => $diff <= $indexAfterInsertion
|
271 |
+
|
272 |
+
// In each of the following loops, $i >= $diff must hold,
|
273 |
+
// otherwise ($i - $diff) becomes negative.
|
274 |
+
|
275 |
+
// Shift old elements to the right to make up space for the
|
276 |
+
// inserted elements. This needs to be done left-to-right in
|
277 |
+
// order to preserve an ascending array index order
|
278 |
+
// Since $i = max($length, $indexAfterInsertion) and $indexAfterInsertion >= $diff,
|
279 |
+
// $i >= $diff is guaranteed.
|
280 |
+
for ($i = max($length, $indexAfterInsertion); $i < $newLength; ++$i) {
|
281 |
+
$this->elements[$i] = $this->elements[$i - $diff];
|
282 |
+
$this->isIndex[$i] = $this->isIndex[$i - $diff];
|
283 |
+
}
|
284 |
+
|
285 |
+
// Shift remaining elements to the right. Do this right-to-left
|
286 |
+
// so we don't overwrite elements before copying them
|
287 |
+
// The last written index is the immediate index after the inserted
|
288 |
+
// string, because the indices before that will be overwritten
|
289 |
+
// anyway.
|
290 |
+
// Since $i >= $indexAfterInsertion and $indexAfterInsertion >= $diff,
|
291 |
+
// $i >= $diff is guaranteed.
|
292 |
+
for ($i = $length - 1; $i >= $indexAfterInsertion; --$i) {
|
293 |
+
$this->elements[$i] = $this->elements[$i - $diff];
|
294 |
+
$this->isIndex[$i] = $this->isIndex[$i - $diff];
|
295 |
+
}
|
296 |
+
}
|
297 |
+
}
|
298 |
+
}
|
vendor/symfony/property-access/PropertyPathInterface.php
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* A sequence of property names or array indices.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*/
|
19 |
+
interface PropertyPathInterface extends \Traversable
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* Returns the string representation of the property path.
|
23 |
+
*
|
24 |
+
* @return string The path as string
|
25 |
+
*/
|
26 |
+
public function __toString();
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Returns the length of the property path, i.e. the number of elements.
|
30 |
+
*
|
31 |
+
* @return int The path length
|
32 |
+
*/
|
33 |
+
public function getLength();
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Returns the parent property path.
|
37 |
+
*
|
38 |
+
* The parent property path is the one that contains the same items as
|
39 |
+
* this one except for the last one.
|
40 |
+
*
|
41 |
+
* If this property path only contains one item, null is returned.
|
42 |
+
*
|
43 |
+
* @return self|null The parent path or null
|
44 |
+
*/
|
45 |
+
public function getParent();
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Returns the elements of the property path as array.
|
49 |
+
*
|
50 |
+
* @return array An array of property/index names
|
51 |
+
*/
|
52 |
+
public function getElements();
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Returns the element at the given index in the property path.
|
56 |
+
*
|
57 |
+
* @param int $index The index key
|
58 |
+
*
|
59 |
+
* @return string A property or index name
|
60 |
+
*
|
61 |
+
* @throws Exception\OutOfBoundsException If the offset is invalid
|
62 |
+
*/
|
63 |
+
public function getElement($index);
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Returns whether the element at the given index is a property.
|
67 |
+
*
|
68 |
+
* @param int $index The index in the property path
|
69 |
+
*
|
70 |
+
* @return bool Whether the element at this index is a property
|
71 |
+
*
|
72 |
+
* @throws Exception\OutOfBoundsException If the offset is invalid
|
73 |
+
*/
|
74 |
+
public function isProperty($index);
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Returns whether the element at the given index is an array index.
|
78 |
+
*
|
79 |
+
* @param int $index The index in the property path
|
80 |
+
*
|
81 |
+
* @return bool Whether the element at this index is an array index
|
82 |
+
*
|
83 |
+
* @throws Exception\OutOfBoundsException If the offset is invalid
|
84 |
+
*/
|
85 |
+
public function isIndex($index);
|
86 |
+
}
|
vendor/symfony/property-access/PropertyPathIterator.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Traverses a property path and provides additional methods to find out
|
16 |
+
* information about the current element.
|
17 |
+
*
|
18 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
19 |
+
*/
|
20 |
+
class PropertyPathIterator extends \ArrayIterator implements PropertyPathIteratorInterface
|
21 |
+
{
|
22 |
+
protected $path;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @param PropertyPathInterface $path The property path to traverse
|
26 |
+
*/
|
27 |
+
public function __construct(PropertyPathInterface $path)
|
28 |
+
{
|
29 |
+
parent::__construct($path->getElements());
|
30 |
+
|
31 |
+
$this->path = $path;
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* {@inheritdoc}
|
36 |
+
*/
|
37 |
+
public function isIndex()
|
38 |
+
{
|
39 |
+
return $this->path->isIndex($this->key());
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* {@inheritdoc}
|
44 |
+
*/
|
45 |
+
public function isProperty()
|
46 |
+
{
|
47 |
+
return $this->path->isProperty($this->key());
|
48 |
+
}
|
49 |
+
}
|
vendor/symfony/property-access/PropertyPathIteratorInterface.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
16 |
+
*/
|
17 |
+
interface PropertyPathIteratorInterface extends \Iterator, \SeekableIterator
|
18 |
+
{
|
19 |
+
/**
|
20 |
+
* Returns whether the current element in the property path is an array
|
21 |
+
* index.
|
22 |
+
*
|
23 |
+
* @return bool
|
24 |
+
*/
|
25 |
+
public function isIndex();
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Returns whether the current element in the property path is a property
|
29 |
+
* name.
|
30 |
+
*
|
31 |
+
* @return bool
|
32 |
+
*/
|
33 |
+
public function isProperty();
|
34 |
+
}
|
vendor/symfony/property-access/README.md
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
PropertyAccess Component
|
2 |
+
========================
|
3 |
+
|
4 |
+
The PropertyAccess component provides function to read and write from/to an
|
5 |
+
object or array using a simple string notation.
|
6 |
+
|
7 |
+
Resources
|
8 |
+
---------
|
9 |
+
|
10 |
+
* [Documentation](https://symfony.com/doc/current/components/property_access.html)
|
11 |
+
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
12 |
+
* [Report issues](https://github.com/symfony/symfony/issues) and
|
13 |
+
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
14 |
+
in the [main Symfony repository](https://github.com/symfony/symfony)
|
vendor/symfony/property-access/StringUtil.php
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\PropertyAccess;
|
13 |
+
|
14 |
+
use Symfony\Component\Inflector\Inflector;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Creates singulars from plurals.
|
18 |
+
*
|
19 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
20 |
+
*
|
21 |
+
* @deprecated since version 3.1, to be removed in 4.0. Use {@see Symfony\Component\Inflector\Inflector} instead.
|
22 |
+
*/
|
23 |
+
class StringUtil
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* This class should not be instantiated.
|
27 |
+
*/
|
28 |
+
private function __construct()
|
29 |
+
{
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Returns the singular form of a word.
|
34 |
+
*
|
35 |
+
* If the method can't determine the form with certainty, an array of the
|
36 |
+
* possible singulars is returned.
|
37 |
+
*
|
38 |
+
* @param string $plural A word in plural form
|
39 |
+
*
|
40 |
+
* @return string|array The singular form or an array of possible singular
|
41 |
+
* forms
|
42 |
+
*
|
43 |
+
* @deprecated since version 3.1, to be removed in 4.0. Use {@see Symfony\Component\Inflector\Inflector::singularize} instead.
|
44 |
+
*/
|
45 |
+
public static function singularify($plural)
|
46 |
+
{
|
47 |
+
@trigger_error('StringUtil::singularify() is deprecated since Symfony 3.1 and will be removed in 4.0. Use Symfony\Component\Inflector\Inflector::singularize instead.', E_USER_DEPRECATED);
|
48 |
+
|
49 |
+
return Inflector::singularize($plural);
|
50 |
+
}
|
51 |
+
}
|
vendor/symfony/property-access/composer.json
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "symfony/property-access",
|
3 |
+
"type": "library",
|
4 |
+
"description": "Symfony PropertyAccess Component",
|
5 |
+
"keywords": ["property", "index", "access", "object", "array", "extraction", "injection", "reflection", "property path"],
|
6 |
+
"homepage": "https://symfony.com",
|
7 |
+
"license": "MIT",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Fabien Potencier",
|
11 |
+
"email": "fabien@symfony.com"
|
12 |
+
},
|
13 |
+
{
|
14 |
+
"name": "Symfony Community",
|
15 |
+
"homepage": "https://symfony.com/contributors"
|
16 |
+
}
|
17 |
+
],
|
18 |
+
"require": {
|
19 |
+
"php": "^5.5.9|>=7.0.8",
|
20 |
+
"symfony/polyfill-php70": "~1.0",
|
21 |
+
"symfony/inflector": "~3.1|~4.0"
|
22 |
+
},
|
23 |
+
"require-dev": {
|
24 |
+
"symfony/cache": "~3.1|~4.0"
|
25 |
+
},
|
26 |
+
"suggest": {
|
27 |
+
"psr/cache-implementation": "To cache access methods."
|
28 |
+
},
|
29 |
+
"autoload": {
|
30 |
+
"psr-4": { "Symfony\\Component\\PropertyAccess\\": "" },
|
31 |
+
"exclude-from-classmap": [
|
32 |
+
"/Tests/"
|
33 |
+
]
|
34 |
+
},
|
35 |
+
"minimum-stability": "dev",
|
36 |
+
"extra": {
|
37 |
+
"branch-alias": {
|
38 |
+
"dev-master": "3.4-dev"
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
vendor/symfony/property-access/phpunit.xml.dist
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
|
3 |
+
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4 |
+
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
|
5 |
+
backupGlobals="false"
|
6 |
+
colors="true"
|
7 |
+
bootstrap="vendor/autoload.php"
|
8 |
+
failOnRisky="true"
|
9 |
+
failOnWarning="true"
|
10 |
+
>
|
11 |
+
<php>
|
12 |
+
<ini name="error_reporting" value="-1" />
|
13 |
+
</php>
|
14 |
+
|
15 |
+
<testsuites>
|
16 |
+
<testsuite name="Symfony PropertyAccess Component Test Suite">
|
17 |
+
<directory>./Tests/</directory>
|
18 |
+
</testsuite>
|
19 |
+
</testsuites>
|
20 |
+
|
21 |
+
<filter>
|
22 |
+
<whitelist>
|
23 |
+
<directory>./</directory>
|
24 |
+
<exclude>
|
25 |
+
<directory>./Resources</directory>
|
26 |
+
<directory>./Tests</directory>
|
27 |
+
<directory>./vendor</directory>
|
28 |
+
</exclude>
|
29 |
+
</whitelist>
|
30 |
+
</filter>
|
31 |
+
</phpunit>
|
views/lookup.php
CHANGED
@@ -117,26 +117,59 @@ function var_export_short($data, $return=true)
|
|
117 |
|
118 |
<?php
|
119 |
function show_row($record, $key_1, $key_2, $value = null, $class = '') {
|
|
|
|
|
|
|
120 |
if (is_array($value)) {
|
121 |
if ($key_2 === 'names') {
|
122 |
show_row($record, $key_1, 'name', null, $class);
|
123 |
return;
|
124 |
}
|
125 |
if ($key_1 === 'subdivisions') {
|
126 |
-
|
127 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
}
|
129 |
return;
|
130 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
}
|
132 |
$camel_key_1 = _geoip_dashes_to_camel_case($key_1);
|
133 |
$camel_key_2 = _geoip_dashes_to_camel_case($key_2);
|
134 |
|
135 |
try {
|
136 |
if (is_object($record) ) {
|
137 |
-
|
138 |
-
|
139 |
-
$value
|
|
|
|
|
|
|
|
|
140 |
}
|
141 |
}
|
142 |
} catch(\RuntimeException $e) {
|
@@ -146,9 +179,7 @@ function var_export_short($data, $return=true)
|
|
146 |
$value = var_export_short($value, true);
|
147 |
}
|
148 |
|
149 |
-
$
|
150 |
-
|
151 |
-
switch(sanitize_key($_POST['syntax'])) {
|
152 |
case 'shortcode':
|
153 |
$extra = '';
|
154 |
if ($locales && $key_2 === 'name') {
|
117 |
|
118 |
<?php
|
119 |
function show_row($record, $key_1, $key_2, $value = null, $class = '') {
|
120 |
+
$syntax = sanitize_key($_POST['syntax']);
|
121 |
+
$locales = sanitize_text_field(@$_POST['locales']);
|
122 |
+
|
123 |
if (is_array($value)) {
|
124 |
if ($key_2 === 'names') {
|
125 |
show_row($record, $key_1, 'name', null, $class);
|
126 |
return;
|
127 |
}
|
128 |
if ($key_1 === 'subdivisions') {
|
129 |
+
$index = (int) $key_2;
|
130 |
+
if ($index === 0) { /* Do it only once! Most specific subdivision is actually not index 0, but the highest index, but it works - as I don't use the index in the following `show_row` */
|
131 |
+
foreach ($value as $key_3 => $v) {
|
132 |
+
show_row($record, 'most_specific_subdivision', $key_3, $v, $class);
|
133 |
+
}
|
134 |
+
}
|
135 |
+
if ($class == 'all') {
|
136 |
+
foreach ($value as $key_3 => $v) {
|
137 |
+
$new_key_1 = 'subdivisions' . ( ($syntax === 'php') ? '[' . $index . ']' : '.' . $index);
|
138 |
+
show_row($record->subdivisions[$index], $new_key_1, $key_3, $v, $class);
|
139 |
+
}
|
140 |
}
|
141 |
return;
|
142 |
}
|
143 |
+
/* This is quite complex to do right. Postponed
|
144 |
+
if ($key_2 == 'original') {
|
145 |
+
// It must be recursive, as we don't know how deep the array is nested. Level 1
|
146 |
+
$new_key_1 = $key_1 . ( ($syntax === 'php') ? '->' : '.') . 'original';
|
147 |
+
foreach($value as $key_3 => $v) {
|
148 |
+
show_row(null, $new_key_1, $key_3, $v, $class);
|
149 |
+
}
|
150 |
+
}
|
151 |
+
if (_geoip_str_ends_with($key_1, 'original')) {
|
152 |
+
// Level 2 and counting
|
153 |
+
$new_key_1 = $key_1 . ( ($syntax === 'php') ? '["' . $key_2 . '"]' : '.' . $key_2);
|
154 |
+
foreach($value as $key_3 => $v) {
|
155 |
+
show_row(null, $new_key_1, $key_3, $v, $class);
|
156 |
+
}
|
157 |
+
|
158 |
+
}
|
159 |
+
*/
|
160 |
}
|
161 |
$camel_key_1 = _geoip_dashes_to_camel_case($key_1);
|
162 |
$camel_key_2 = _geoip_dashes_to_camel_case($key_2);
|
163 |
|
164 |
try {
|
165 |
if (is_object($record) ) {
|
166 |
+
if (isset($record->$camel_key_1)) {
|
167 |
+
$value = $record->$camel_key_1;
|
168 |
+
if (is_object($value)) {
|
169 |
+
$value = $value->$camel_key_2;
|
170 |
+
}
|
171 |
+
} else {
|
172 |
+
$value = $record->$camel_key_2;
|
173 |
}
|
174 |
}
|
175 |
} catch(\RuntimeException $e) {
|
179 |
$value = var_export_short($value, true);
|
180 |
}
|
181 |
|
182 |
+
switch($syntax) {
|
|
|
|
|
183 |
case 'shortcode':
|
184 |
$extra = '';
|
185 |
if ($locales && $key_2 === 'name') {
|
views/options.php
CHANGED
@@ -108,7 +108,7 @@ $currentSourceId = $currentSource->getId();
|
|
108 |
<span class="detail-box">
|
109 |
<?php if (empty($wp_options['has_reverse_proxy']) && !empty($wp_options['trusted_proxy_ips'])) : ?>
|
110 |
<span style="color:red">
|
111 |
-
<?php printf(__('Warning: As you didn\'t tick the option "%s" above,
|
112 |
</span><br>
|
113 |
<?php endif; ?>
|
114 |
<?php _e('If specified, only IPs in this list will be treated as proxy.', 'geoip-detect'); ?><br>
|
108 |
<span class="detail-box">
|
109 |
<?php if (empty($wp_options['has_reverse_proxy']) && !empty($wp_options['trusted_proxy_ips'])) : ?>
|
110 |
<span style="color:red">
|
111 |
+
<?php printf(__('Warning: As you didn\'t tick the option "%s" above, setting trusted IPs has no effect. This is only used for reverse proxies.', 'geoip-detect'), __('The server is behind a reverse proxy', 'geoip-detect') ); ?>
|
112 |
</span><br>
|
113 |
<?php endif; ?>
|
114 |
<?php _e('If specified, only IPs in this list will be treated as proxy.', 'geoip-detect'); ?><br>
|
yarn.lock
CHANGED
@@ -9,28 +9,28 @@
|
|
9 |
dependencies:
|
10 |
"@babel/highlight" "^7.8.3"
|
11 |
|
12 |
-
"@babel/compat-data@^7.
|
13 |
-
version "7.9.
|
14 |
-
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.
|
15 |
-
integrity sha512-
|
16 |
dependencies:
|
17 |
-
browserslist "^4.
|
18 |
invariant "^2.2.4"
|
19 |
semver "^5.5.0"
|
20 |
|
21 |
"@babel/core@>=7.7.2", "@babel/core@^7.4.4":
|
22 |
-
version "7.9.
|
23 |
-
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.
|
24 |
-
integrity sha512-
|
25 |
dependencies:
|
26 |
"@babel/code-frame" "^7.8.3"
|
27 |
-
"@babel/generator" "^7.9.
|
28 |
"@babel/helper-module-transforms" "^7.9.0"
|
29 |
-
"@babel/helpers" "^7.9.
|
30 |
-
"@babel/parser" "^7.9.
|
31 |
"@babel/template" "^7.8.6"
|
32 |
-
"@babel/traverse" "^7.9.
|
33 |
-
"@babel/types" "^7.9.
|
34 |
convert-source-map "^1.7.0"
|
35 |
debug "^4.1.0"
|
36 |
gensync "^1.0.0-beta.1"
|
@@ -40,12 +40,12 @@
|
|
40 |
semver "^5.4.1"
|
41 |
source-map "^0.5.0"
|
42 |
|
43 |
-
"@babel/generator@^7.4.4", "@babel/generator@^7.9.
|
44 |
-
version "7.9.
|
45 |
-
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.
|
46 |
-
integrity sha512
|
47 |
dependencies:
|
48 |
-
"@babel/types" "^7.9.
|
49 |
jsesc "^2.5.1"
|
50 |
lodash "^4.17.13"
|
51 |
source-map "^0.5.0"
|
@@ -66,13 +66,13 @@
|
|
66 |
"@babel/types" "^7.8.3"
|
67 |
|
68 |
"@babel/helper-builder-react-jsx-experimental@^7.9.0":
|
69 |
-
version "7.9.
|
70 |
-
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.
|
71 |
-
integrity sha512-
|
72 |
dependencies:
|
73 |
"@babel/helper-annotate-as-pure" "^7.8.3"
|
74 |
"@babel/helper-module-imports" "^7.8.3"
|
75 |
-
"@babel/types" "^7.9.
|
76 |
|
77 |
"@babel/helper-builder-react-jsx@^7.9.0":
|
78 |
version "7.9.0"
|
@@ -82,13 +82,13 @@
|
|
82 |
"@babel/helper-annotate-as-pure" "^7.8.3"
|
83 |
"@babel/types" "^7.9.0"
|
84 |
|
85 |
-
"@babel/helper-compilation-targets@^7.
|
86 |
-
version "7.
|
87 |
-
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.
|
88 |
-
integrity sha512-
|
89 |
dependencies:
|
90 |
-
"@babel/compat-data" "^7.
|
91 |
-
browserslist "^4.
|
92 |
invariant "^2.2.4"
|
93 |
levenary "^1.1.1"
|
94 |
semver "^5.5.0"
|
@@ -119,14 +119,14 @@
|
|
119 |
"@babel/traverse" "^7.8.3"
|
120 |
"@babel/types" "^7.8.3"
|
121 |
|
122 |
-
"@babel/helper-function-name@^7.8.3":
|
123 |
-
version "7.
|
124 |
-
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.
|
125 |
-
integrity sha512-
|
126 |
dependencies:
|
127 |
"@babel/helper-get-function-arity" "^7.8.3"
|
128 |
"@babel/template" "^7.8.3"
|
129 |
-
"@babel/types" "^7.
|
130 |
|
131 |
"@babel/helper-get-function-arity@^7.8.3":
|
132 |
version "7.8.3"
|
@@ -200,14 +200,14 @@
|
|
200 |
"@babel/types" "^7.8.3"
|
201 |
|
202 |
"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6":
|
203 |
-
version "7.
|
204 |
-
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.
|
205 |
-
integrity sha512-
|
206 |
dependencies:
|
207 |
"@babel/helper-member-expression-to-functions" "^7.8.3"
|
208 |
"@babel/helper-optimise-call-expression" "^7.8.3"
|
209 |
-
"@babel/traverse" "^7.
|
210 |
-
"@babel/types" "^7.
|
211 |
|
212 |
"@babel/helper-simple-access@^7.8.3":
|
213 |
version "7.8.3"
|
@@ -224,10 +224,10 @@
|
|
224 |
dependencies:
|
225 |
"@babel/types" "^7.8.3"
|
226 |
|
227 |
-
"@babel/helper-validator-identifier@^7.9.0":
|
228 |
-
version "7.9.
|
229 |
-
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.
|
230 |
-
integrity sha512
|
231 |
|
232 |
"@babel/helper-wrap-function@^7.8.3":
|
233 |
version "7.8.3"
|
@@ -239,14 +239,14 @@
|
|
239 |
"@babel/traverse" "^7.8.3"
|
240 |
"@babel/types" "^7.8.3"
|
241 |
|
242 |
-
"@babel/helpers@^7.9.
|
243 |
-
version "7.9.
|
244 |
-
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.
|
245 |
-
integrity sha512-
|
246 |
dependencies:
|
247 |
"@babel/template" "^7.8.3"
|
248 |
-
"@babel/traverse" "^7.9.
|
249 |
-
"@babel/types" "^7.9.
|
250 |
|
251 |
"@babel/highlight@^7.8.3":
|
252 |
version "7.9.0"
|
@@ -257,10 +257,10 @@
|
|
257 |
chalk "^2.0.0"
|
258 |
js-tokens "^4.0.0"
|
259 |
|
260 |
-
"@babel/parser@^7.4.4", "@babel/parser@^7.8.6", "@babel/parser@^7.9.
|
261 |
-
version "7.9.
|
262 |
-
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.
|
263 |
-
integrity sha512-
|
264 |
|
265 |
"@babel/plugin-proposal-async-generator-functions@^7.8.3":
|
266 |
version "7.8.3"
|
@@ -303,13 +303,14 @@
|
|
303 |
"@babel/helper-plugin-utils" "^7.8.3"
|
304 |
"@babel/plugin-syntax-numeric-separator" "^7.8.3"
|
305 |
|
306 |
-
"@babel/plugin-proposal-object-rest-spread@^7.9.
|
307 |
-
version "7.9.
|
308 |
-
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.
|
309 |
-
integrity sha512-
|
310 |
dependencies:
|
311 |
"@babel/helper-plugin-utils" "^7.8.3"
|
312 |
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
|
|
|
313 |
|
314 |
"@babel/plugin-proposal-optional-catch-binding@^7.8.3":
|
315 |
version "7.8.3"
|
@@ -443,14 +444,14 @@
|
|
443 |
"@babel/helper-plugin-utils" "^7.8.3"
|
444 |
lodash "^4.17.13"
|
445 |
|
446 |
-
"@babel/plugin-transform-classes@^7.9.
|
447 |
-
version "7.9.
|
448 |
-
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.
|
449 |
-
integrity sha512-
|
450 |
dependencies:
|
451 |
"@babel/helper-annotate-as-pure" "^7.8.3"
|
452 |
"@babel/helper-define-map" "^7.8.3"
|
453 |
-
"@babel/helper-function-name" "^7.
|
454 |
"@babel/helper-optimise-call-expression" "^7.8.3"
|
455 |
"@babel/helper-plugin-utils" "^7.8.3"
|
456 |
"@babel/helper-replace-supers" "^7.8.6"
|
@@ -464,10 +465,10 @@
|
|
464 |
dependencies:
|
465 |
"@babel/helper-plugin-utils" "^7.8.3"
|
466 |
|
467 |
-
"@babel/plugin-transform-destructuring@^7.
|
468 |
-
version "7.
|
469 |
-
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.
|
470 |
-
integrity sha512-
|
471 |
dependencies:
|
472 |
"@babel/helper-plugin-utils" "^7.8.3"
|
473 |
|
@@ -531,34 +532,34 @@
|
|
531 |
dependencies:
|
532 |
"@babel/helper-plugin-utils" "^7.8.3"
|
533 |
|
534 |
-
"@babel/plugin-transform-modules-amd@^7.9.
|
535 |
-
version "7.9.
|
536 |
-
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.
|
537 |
-
integrity sha512-
|
538 |
dependencies:
|
539 |
"@babel/helper-module-transforms" "^7.9.0"
|
540 |
"@babel/helper-plugin-utils" "^7.8.3"
|
541 |
-
babel-plugin-dynamic-import-node "^2.3.
|
542 |
|
543 |
-
"@babel/plugin-transform-modules-commonjs@^7.4.4", "@babel/plugin-transform-modules-commonjs@^7.9.
|
544 |
-
version "7.9.
|
545 |
-
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.
|
546 |
-
integrity sha512-
|
547 |
dependencies:
|
548 |
"@babel/helper-module-transforms" "^7.9.0"
|
549 |
"@babel/helper-plugin-utils" "^7.8.3"
|
550 |
"@babel/helper-simple-access" "^7.8.3"
|
551 |
-
babel-plugin-dynamic-import-node "^2.3.
|
552 |
|
553 |
-
"@babel/plugin-transform-modules-systemjs@^7.9.
|
554 |
-
version "7.9.
|
555 |
-
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.
|
556 |
-
integrity sha512-
|
557 |
dependencies:
|
558 |
"@babel/helper-hoist-variables" "^7.8.3"
|
559 |
"@babel/helper-module-transforms" "^7.9.0"
|
560 |
"@babel/helper-plugin-utils" "^7.8.3"
|
561 |
-
babel-plugin-dynamic-import-node "^2.3.
|
562 |
|
563 |
"@babel/plugin-transform-modules-umd@^7.9.0":
|
564 |
version "7.9.0"
|
@@ -590,10 +591,10 @@
|
|
590 |
"@babel/helper-plugin-utils" "^7.8.3"
|
591 |
"@babel/helper-replace-supers" "^7.8.3"
|
592 |
|
593 |
-
"@babel/plugin-transform-parameters@^7.
|
594 |
-
version "7.9.
|
595 |
-
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.
|
596 |
-
integrity sha512-
|
597 |
dependencies:
|
598 |
"@babel/helper-get-function-arity" "^7.8.3"
|
599 |
"@babel/helper-plugin-utils" "^7.8.3"
|
@@ -630,9 +631,9 @@
|
|
630 |
"@babel/helper-plugin-utils" "^7.8.3"
|
631 |
|
632 |
"@babel/plugin-transform-runtime@>=7.6.2":
|
633 |
-
version "7.9.
|
634 |
-
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.
|
635 |
-
integrity sha512-
|
636 |
dependencies:
|
637 |
"@babel/helper-module-imports" "^7.8.3"
|
638 |
"@babel/helper-plugin-utils" "^7.8.3"
|
@@ -685,12 +686,12 @@
|
|
685 |
"@babel/helper-plugin-utils" "^7.8.3"
|
686 |
|
687 |
"@babel/preset-env@^7.4.4":
|
688 |
-
version "7.9.
|
689 |
-
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.
|
690 |
-
integrity sha512-
|
691 |
dependencies:
|
692 |
-
"@babel/compat-data" "^7.9.
|
693 |
-
"@babel/helper-compilation-targets" "^7.
|
694 |
"@babel/helper-module-imports" "^7.8.3"
|
695 |
"@babel/helper-plugin-utils" "^7.8.3"
|
696 |
"@babel/plugin-proposal-async-generator-functions" "^7.8.3"
|
@@ -698,7 +699,7 @@
|
|
698 |
"@babel/plugin-proposal-json-strings" "^7.8.3"
|
699 |
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3"
|
700 |
"@babel/plugin-proposal-numeric-separator" "^7.8.3"
|
701 |
-
"@babel/plugin-proposal-object-rest-spread" "^7.9.
|
702 |
"@babel/plugin-proposal-optional-catch-binding" "^7.8.3"
|
703 |
"@babel/plugin-proposal-optional-chaining" "^7.9.0"
|
704 |
"@babel/plugin-proposal-unicode-property-regex" "^7.8.3"
|
@@ -715,9 +716,9 @@
|
|
715 |
"@babel/plugin-transform-async-to-generator" "^7.8.3"
|
716 |
"@babel/plugin-transform-block-scoped-functions" "^7.8.3"
|
717 |
"@babel/plugin-transform-block-scoping" "^7.8.3"
|
718 |
-
"@babel/plugin-transform-classes" "^7.9.
|
719 |
"@babel/plugin-transform-computed-properties" "^7.8.3"
|
720 |
-
"@babel/plugin-transform-destructuring" "^7.
|
721 |
"@babel/plugin-transform-dotall-regex" "^7.8.3"
|
722 |
"@babel/plugin-transform-duplicate-keys" "^7.8.3"
|
723 |
"@babel/plugin-transform-exponentiation-operator" "^7.8.3"
|
@@ -725,14 +726,14 @@
|
|
725 |
"@babel/plugin-transform-function-name" "^7.8.3"
|
726 |
"@babel/plugin-transform-literals" "^7.8.3"
|
727 |
"@babel/plugin-transform-member-expression-literals" "^7.8.3"
|
728 |
-
"@babel/plugin-transform-modules-amd" "^7.9.
|
729 |
-
"@babel/plugin-transform-modules-commonjs" "^7.9.
|
730 |
-
"@babel/plugin-transform-modules-systemjs" "^7.9.
|
731 |
"@babel/plugin-transform-modules-umd" "^7.9.0"
|
732 |
"@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
|
733 |
"@babel/plugin-transform-new-target" "^7.8.3"
|
734 |
"@babel/plugin-transform-object-super" "^7.8.3"
|
735 |
-
"@babel/plugin-transform-parameters" "^7.
|
736 |
"@babel/plugin-transform-property-literals" "^7.8.3"
|
737 |
"@babel/plugin-transform-regenerator" "^7.8.7"
|
738 |
"@babel/plugin-transform-reserved-words" "^7.8.3"
|
@@ -743,8 +744,8 @@
|
|
743 |
"@babel/plugin-transform-typeof-symbol" "^7.8.4"
|
744 |
"@babel/plugin-transform-unicode-regex" "^7.8.3"
|
745 |
"@babel/preset-modules" "^0.1.3"
|
746 |
-
"@babel/types" "^7.9.
|
747 |
-
browserslist "^4.
|
748 |
core-js-compat "^3.6.2"
|
749 |
invariant "^2.2.2"
|
750 |
levenary "^1.1.1"
|
@@ -762,9 +763,9 @@
|
|
762 |
esutils "^2.0.2"
|
763 |
|
764 |
"@babel/runtime@>=7.7.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.8.4":
|
765 |
-
version "7.9.
|
766 |
-
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.
|
767 |
-
integrity sha512-
|
768 |
dependencies:
|
769 |
regenerator-runtime "^0.13.4"
|
770 |
|
@@ -777,34 +778,34 @@
|
|
777 |
"@babel/parser" "^7.8.6"
|
778 |
"@babel/types" "^7.8.6"
|
779 |
|
780 |
-
"@babel/traverse@^7.4.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.
|
781 |
-
version "7.9.
|
782 |
-
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.
|
783 |
-
integrity sha512-
|
784 |
dependencies:
|
785 |
"@babel/code-frame" "^7.8.3"
|
786 |
-
"@babel/generator" "^7.9.
|
787 |
-
"@babel/helper-function-name" "^7.
|
788 |
"@babel/helper-split-export-declaration" "^7.8.3"
|
789 |
-
"@babel/parser" "^7.9.
|
790 |
-
"@babel/types" "^7.9.
|
791 |
debug "^4.1.0"
|
792 |
globals "^11.1.0"
|
793 |
lodash "^4.17.13"
|
794 |
|
795 |
-
"@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0":
|
796 |
-
version "7.9.
|
797 |
-
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.
|
798 |
-
integrity sha512-
|
799 |
dependencies:
|
800 |
-
"@babel/helper-validator-identifier" "^7.9.
|
801 |
lodash "^4.17.13"
|
802 |
to-fast-properties "^2.0.0"
|
803 |
|
804 |
"@iarna/toml@^2.2.0":
|
805 |
-
version "2.2.
|
806 |
-
resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.
|
807 |
-
integrity sha512-
|
808 |
|
809 |
"@mrmlnc/readdir-enhanced@^2.2.1":
|
810 |
version "2.2.1"
|
@@ -866,9 +867,9 @@
|
|
866 |
integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
|
867 |
|
868 |
"@types/q@^1.5.1":
|
869 |
-
version "1.5.
|
870 |
-
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.
|
871 |
-
integrity sha512-
|
872 |
|
873 |
abab@^2.0.0:
|
874 |
version "2.0.3"
|
@@ -899,14 +900,14 @@ acorn@^6.0.1, acorn@^6.0.4:
|
|
899 |
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
|
900 |
|
901 |
acorn@^7.1.1:
|
902 |
-
version "7.
|
903 |
-
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.
|
904 |
-
integrity sha512-
|
905 |
|
906 |
ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
|
907 |
-
version "6.12.
|
908 |
-
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.
|
909 |
-
integrity sha512-
|
910 |
dependencies:
|
911 |
fast-deep-equal "^3.1.1"
|
912 |
fast-json-stable-stringify "^2.0.0"
|
@@ -1135,10 +1136,10 @@ babel-messages@^6.23.0:
|
|
1135 |
dependencies:
|
1136 |
babel-runtime "^6.22.0"
|
1137 |
|
1138 |
-
babel-plugin-dynamic-import-node@^2.3.
|
1139 |
-
version "2.3.
|
1140 |
-
resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.
|
1141 |
-
integrity sha512-
|
1142 |
dependencies:
|
1143 |
object.assign "^4.1.0"
|
1144 |
|
@@ -1264,11 +1265,16 @@ bindings@^1.5.0:
|
|
1264 |
dependencies:
|
1265 |
file-uri-to-path "1.0.0"
|
1266 |
|
1267 |
-
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.
|
1268 |
version "4.11.8"
|
1269 |
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
|
1270 |
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
|
1271 |
|
|
|
|
|
|
|
|
|
|
|
1272 |
boolbase@^1.0.0, boolbase@~1.0.0:
|
1273 |
version "1.0.0"
|
1274 |
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
|
@@ -1349,7 +1355,7 @@ browserify-des@^1.0.0:
|
|
1349 |
inherits "^2.0.1"
|
1350 |
safe-buffer "^5.1.2"
|
1351 |
|
1352 |
-
browserify-rsa@^4.0.0:
|
1353 |
version "4.0.1"
|
1354 |
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
|
1355 |
integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
|
@@ -1358,17 +1364,19 @@ browserify-rsa@^4.0.0:
|
|
1358 |
randombytes "^2.0.1"
|
1359 |
|
1360 |
browserify-sign@^4.0.0:
|
1361 |
-
version "4.0
|
1362 |
-
resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.
|
1363 |
-
integrity
|
1364 |
-
dependencies:
|
1365 |
-
bn.js "^
|
1366 |
-
browserify-rsa "^4.0.
|
1367 |
-
create-hash "^1.
|
1368 |
-
create-hmac "^1.1.
|
1369 |
-
elliptic "^6.
|
1370 |
-
inherits "^2.0.
|
1371 |
-
parse-asn1 "^5.
|
|
|
|
|
1372 |
|
1373 |
browserify-zlib@^0.2.0:
|
1374 |
version "0.2.0"
|
@@ -1377,15 +1385,15 @@ browserify-zlib@^0.2.0:
|
|
1377 |
dependencies:
|
1378 |
pako "~1.0.5"
|
1379 |
|
1380 |
-
browserslist@^4.0.0, browserslist@^4.1.0, browserslist@^4.
|
1381 |
-
version "4.
|
1382 |
-
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.
|
1383 |
-
integrity sha512-
|
1384 |
dependencies:
|
1385 |
-
caniuse-lite "^1.0.
|
1386 |
-
electron-to-chromium "^1.3.
|
1387 |
-
node-releases "^1.1.
|
1388 |
-
pkg-up "^
|
1389 |
|
1390 |
buffer-equal@0.0.1:
|
1391 |
version "0.0.1"
|
@@ -1480,10 +1488,10 @@ caniuse-api@^3.0.0:
|
|
1480 |
lodash.memoize "^4.1.2"
|
1481 |
lodash.uniq "^4.5.0"
|
1482 |
|
1483 |
-
caniuse-lite@^1.0.0, caniuse-lite@^1.0.
|
1484 |
-
version "1.0.
|
1485 |
-
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.
|
1486 |
-
integrity sha512-
|
1487 |
|
1488 |
caseless@~0.12.0:
|
1489 |
version "0.12.0"
|
@@ -1588,9 +1596,9 @@ cli-spinners@^1.1.0:
|
|
1588 |
integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==
|
1589 |
|
1590 |
cli-width@^2.0.0:
|
1591 |
-
version "2.2.
|
1592 |
-
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.
|
1593 |
-
integrity
|
1594 |
|
1595 |
cliui@^2.1.0:
|
1596 |
version "2.1.0"
|
@@ -1700,9 +1708,9 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
|
|
1700 |
delayed-stream "~1.0.0"
|
1701 |
|
1702 |
command-exists@^1.2.6:
|
1703 |
-
version "1.2.
|
1704 |
-
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.
|
1705 |
-
integrity sha512-
|
1706 |
|
1707 |
commander@^2.11.0, commander@^2.19.0, commander@^2.20.0:
|
1708 |
version "2.20.3"
|
@@ -1752,11 +1760,11 @@ copy-descriptor@^0.1.0:
|
|
1752 |
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
|
1753 |
|
1754 |
core-js-compat@^3.6.2:
|
1755 |
-
version "3.6.
|
1756 |
-
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.
|
1757 |
-
integrity sha512-
|
1758 |
dependencies:
|
1759 |
-
browserslist "^4.8.
|
1760 |
semver "7.0.0"
|
1761 |
|
1762 |
core-js@^2.4.0, core-js@^2.6.5:
|
@@ -1787,7 +1795,7 @@ create-ecdh@^4.0.0:
|
|
1787 |
bn.js "^4.1.0"
|
1788 |
elliptic "^6.0.0"
|
1789 |
|
1790 |
-
create-hash@^1.1.0, create-hash@^1.1.2:
|
1791 |
version "1.2.0"
|
1792 |
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
|
1793 |
integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
|
@@ -1798,7 +1806,7 @@ create-hash@^1.1.0, create-hash@^1.1.2:
|
|
1798 |
ripemd160 "^2.0.1"
|
1799 |
sha.js "^2.4.0"
|
1800 |
|
1801 |
-
create-hmac@^1.1.0, create-hmac@^1.1.
|
1802 |
version "1.1.7"
|
1803 |
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
|
1804 |
integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
|
@@ -2017,9 +2025,9 @@ data-urls@^1.1.0:
|
|
2017 |
whatwg-url "^7.0.0"
|
2018 |
|
2019 |
deasync@^0.1.14:
|
2020 |
-
version "0.1.
|
2021 |
-
resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.
|
2022 |
-
integrity sha512-
|
2023 |
dependencies:
|
2024 |
bindings "^1.5.0"
|
2025 |
node-addon-api "^1.7.1"
|
@@ -2210,12 +2218,12 @@ ee-first@1.1.1:
|
|
2210 |
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
2211 |
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
2212 |
|
2213 |
-
electron-to-chromium@^1.3.
|
2214 |
-
version "1.3.
|
2215 |
-
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.
|
2216 |
-
integrity sha512-
|
2217 |
|
2218 |
-
elliptic@^6.0.0:
|
2219 |
version "6.5.2"
|
2220 |
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
|
2221 |
integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
|
@@ -2229,8 +2237,8 @@ elliptic@^6.0.0:
|
|
2229 |
minimalistic-crypto-utils "^1.0.0"
|
2230 |
|
2231 |
emoji-flags@matiassingers/emoji-flags#master:
|
2232 |
-
version "1.
|
2233 |
-
resolved "https://codeload.github.com/matiassingers/emoji-flags/tar.gz/
|
2234 |
dependencies:
|
2235 |
columnify "1.5.1"
|
2236 |
lodash.find "3.2.1"
|
@@ -2256,14 +2264,14 @@ entities@^1.1.1, entities@^1.1.2:
|
|
2256 |
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
|
2257 |
|
2258 |
entities@^2.0.0:
|
2259 |
-
version "2.0.
|
2260 |
-
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.
|
2261 |
-
integrity sha512-
|
2262 |
|
2263 |
envinfo@^7.3.1:
|
2264 |
-
version "7.5.
|
2265 |
-
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.
|
2266 |
-
integrity sha512-
|
2267 |
|
2268 |
error-ex@^1.3.1:
|
2269 |
version "1.3.2"
|
@@ -2272,7 +2280,7 @@ error-ex@^1.3.1:
|
|
2272 |
dependencies:
|
2273 |
is-arrayish "^0.2.1"
|
2274 |
|
2275 |
-
es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
|
2276 |
version "1.17.5"
|
2277 |
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
|
2278 |
integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
|
@@ -2415,11 +2423,11 @@ esprima@^4.0.0, esprima@^4.0.1:
|
|
2415 |
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
2416 |
|
2417 |
esquery@^1.0.1:
|
2418 |
-
version "1.
|
2419 |
-
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.
|
2420 |
-
integrity sha512-
|
2421 |
dependencies:
|
2422 |
-
estraverse "^5.
|
2423 |
|
2424 |
esrecurse@^4.1.0:
|
2425 |
version "4.2.1"
|
@@ -2433,10 +2441,10 @@ estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
|
|
2433 |
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
|
2434 |
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
2435 |
|
2436 |
-
estraverse@^5.
|
2437 |
-
version "5.
|
2438 |
-
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.
|
2439 |
-
integrity sha512-
|
2440 |
|
2441 |
esutils@^2.0.2:
|
2442 |
version "2.0.3"
|
@@ -2603,6 +2611,13 @@ fill-range@^4.0.0:
|
|
2603 |
repeat-string "^1.6.1"
|
2604 |
to-regex-range "^2.1.0"
|
2605 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2606 |
find-up@^3.0.0:
|
2607 |
version "3.0.0"
|
2608 |
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
@@ -2620,9 +2635,9 @@ flat-cache@^2.0.1:
|
|
2620 |
write "1.0.3"
|
2621 |
|
2622 |
flatted@^2.0.0:
|
2623 |
-
version "2.0.
|
2624 |
-
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.
|
2625 |
-
integrity sha512-
|
2626 |
|
2627 |
for-in@^1.0.2:
|
2628 |
version "1.0.2"
|
@@ -2666,9 +2681,9 @@ fs.realpath@^1.0.0:
|
|
2666 |
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
2667 |
|
2668 |
fsevents@^1.2.7:
|
2669 |
-
version "1.2.
|
2670 |
-
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.
|
2671 |
-
integrity sha512-
|
2672 |
dependencies:
|
2673 |
bindings "^1.5.0"
|
2674 |
nan "^2.12.1"
|
@@ -2777,9 +2792,9 @@ google-closure-compiler@20150901.x:
|
|
2777 |
integrity sha1-PQHGyt5leQqb+04wshWLdjWsut4=
|
2778 |
|
2779 |
graceful-fs@^4.1.11:
|
2780 |
-
version "4.2.
|
2781 |
-
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.
|
2782 |
-
integrity sha512-
|
2783 |
|
2784 |
grapheme-breaker@^0.3.2:
|
2785 |
version "0.3.2"
|
@@ -2868,12 +2883,13 @@ has@^1.0.0, has@^1.0.1, has@^1.0.3:
|
|
2868 |
function-bind "^1.1.1"
|
2869 |
|
2870 |
hash-base@^3.0.0:
|
2871 |
-
version "3.0
|
2872 |
-
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.
|
2873 |
-
integrity
|
2874 |
dependencies:
|
2875 |
-
inherits "^2.0.
|
2876 |
-
|
|
|
2877 |
|
2878 |
hash.js@^1.0.0, hash.js@^1.0.3:
|
2879 |
version "1.1.7"
|
@@ -3031,7 +3047,7 @@ inflight@^1.0.4:
|
|
3031 |
once "^1.3.0"
|
3032 |
wrappy "1"
|
3033 |
|
3034 |
-
inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
|
3035 |
version "2.0.4"
|
3036 |
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
3037 |
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
@@ -3244,11 +3260,6 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
|
|
3244 |
dependencies:
|
3245 |
isobject "^3.0.1"
|
3246 |
|
3247 |
-
is-promise@^2.1.0:
|
3248 |
-
version "2.1.0"
|
3249 |
-
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
|
3250 |
-
integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
|
3251 |
-
|
3252 |
is-regex@^1.0.5:
|
3253 |
version "1.0.5"
|
3254 |
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
|
@@ -3327,11 +3338,6 @@ isstream@~0.1.2:
|
|
3327 |
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
3328 |
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
3329 |
|
3330 |
-
js-cookie@^2.2.1:
|
3331 |
-
version "2.2.1"
|
3332 |
-
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
|
3333 |
-
integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==
|
3334 |
-
|
3335 |
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
3336 |
version "4.0.0"
|
3337 |
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
@@ -3430,9 +3436,9 @@ json5@^1.0.1:
|
|
3430 |
minimist "^1.2.0"
|
3431 |
|
3432 |
json5@^2.1.2:
|
3433 |
-
version "2.1.
|
3434 |
-
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.
|
3435 |
-
integrity sha512-
|
3436 |
dependencies:
|
3437 |
minimist "^1.2.5"
|
3438 |
|
@@ -3495,6 +3501,14 @@ levn@^0.3.0, levn@~0.3.0:
|
|
3495 |
prelude-ls "~1.1.2"
|
3496 |
type-check "~0.3.2"
|
3497 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3498 |
locate-path@^3.0.0:
|
3499 |
version "3.0.0"
|
3500 |
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
@@ -3503,7 +3517,7 @@ locate-path@^3.0.0:
|
|
3503 |
p-locate "^3.0.0"
|
3504 |
path-exists "^3.0.0"
|
3505 |
|
3506 |
-
lodash-cli
|
3507 |
version "4.17.5"
|
3508 |
resolved "https://registry.yarnpkg.com/lodash-cli/-/lodash-cli-4.17.5.tgz#1bab72c8c9980febf4fe7a1900b0971ce040dd0b"
|
3509 |
integrity sha512-eeQi+oVS76ofP791g4wEGs4B4nyc4fiHboUCc0BzM8qCkLAzqbroewOt98A8ISoY1HH2di00pENNErXf0MWxiw==
|
@@ -3729,17 +3743,17 @@ miller-rabin@^4.0.0:
|
|
3729 |
bn.js "^4.0.0"
|
3730 |
brorand "^1.0.1"
|
3731 |
|
3732 |
-
mime-db@1.
|
3733 |
-
version "1.
|
3734 |
-
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.
|
3735 |
-
integrity sha512
|
3736 |
|
3737 |
mime-types@^2.1.12, mime-types@~2.1.19:
|
3738 |
-
version "2.1.
|
3739 |
-
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.
|
3740 |
-
integrity sha512-
|
3741 |
dependencies:
|
3742 |
-
mime-db "1.
|
3743 |
|
3744 |
mime@1.6.0:
|
3745 |
version "1.6.0"
|
@@ -3787,9 +3801,9 @@ mixin-deep@^1.2.0:
|
|
3787 |
is-extendable "^1.0.1"
|
3788 |
|
3789 |
mkdirp@^0.5.1, mkdirp@~0.5.1:
|
3790 |
-
version "0.5.
|
3791 |
-
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.
|
3792 |
-
integrity sha512-
|
3793 |
dependencies:
|
3794 |
minimist "^1.2.5"
|
3795 |
|
@@ -3814,9 +3828,9 @@ mute-stream@0.0.8:
|
|
3814 |
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
3815 |
|
3816 |
nan@^2.12.1:
|
3817 |
-
version "2.14.
|
3818 |
-
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.
|
3819 |
-
integrity sha512-
|
3820 |
|
3821 |
nanomatch@^1.2.9:
|
3822 |
version "1.2.13"
|
@@ -3884,12 +3898,10 @@ node-libs-browser@^2.0.0:
|
|
3884 |
util "^0.11.0"
|
3885 |
vm-browserify "^1.0.1"
|
3886 |
|
3887 |
-
node-releases@^1.1.
|
3888 |
-
version "1.1.
|
3889 |
-
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.
|
3890 |
-
integrity sha512-
|
3891 |
-
dependencies:
|
3892 |
-
semver "^6.3.0"
|
3893 |
|
3894 |
normalize-html-whitespace@^1.0.0:
|
3895 |
version "1.0.0"
|
@@ -4070,13 +4082,27 @@ os-tmpdir@~1.0.2:
|
|
4070 |
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
4071 |
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
4072 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4073 |
p-limit@^2.0.0:
|
4074 |
-
version "2.
|
4075 |
-
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.
|
4076 |
-
integrity sha512
|
4077 |
dependencies:
|
4078 |
p-try "^2.0.0"
|
4079 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4080 |
p-locate@^3.0.0:
|
4081 |
version "3.0.0"
|
4082 |
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
|
@@ -4084,6 +4110,11 @@ p-locate@^3.0.0:
|
|
4084 |
dependencies:
|
4085 |
p-limit "^2.0.0"
|
4086 |
|
|
|
|
|
|
|
|
|
|
|
4087 |
p-try@^2.0.0:
|
4088 |
version "2.2.0"
|
4089 |
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
@@ -4176,7 +4207,7 @@ parent-module@^1.0.0:
|
|
4176 |
dependencies:
|
4177 |
callsites "^3.0.0"
|
4178 |
|
4179 |
-
parse-asn1@^5.0.0:
|
4180 |
version "5.1.5"
|
4181 |
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
|
4182 |
integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
|
@@ -4262,12 +4293,12 @@ physical-cpu-count@^2.0.0:
|
|
4262 |
resolved "https://registry.yarnpkg.com/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660"
|
4263 |
integrity sha1-GN4vl+S/epVRrXURlCtUlverpmA=
|
4264 |
|
4265 |
-
pkg-up@^
|
4266 |
-
version "
|
4267 |
-
resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-
|
4268 |
-
integrity
|
4269 |
dependencies:
|
4270 |
-
find-up "^
|
4271 |
|
4272 |
pn@^1.1.0:
|
4273 |
version "1.1.0"
|
@@ -4581,9 +4612,9 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.1:
|
|
4581 |
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
|
4582 |
|
4583 |
postcss-value-parser@^4.0.2:
|
4584 |
-
version "4.0
|
4585 |
-
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.
|
4586 |
-
integrity sha512-
|
4587 |
|
4588 |
postcss@6.0.1:
|
4589 |
version "6.0.1"
|
@@ -4604,25 +4635,25 @@ postcss@^6.0.1:
|
|
4604 |
supports-color "^5.4.0"
|
4605 |
|
4606 |
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.11, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.27:
|
4607 |
-
version "7.0.
|
4608 |
-
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.
|
4609 |
-
integrity sha512-
|
4610 |
dependencies:
|
4611 |
chalk "^2.4.2"
|
4612 |
source-map "^0.6.1"
|
4613 |
supports-color "^6.1.0"
|
4614 |
|
4615 |
-
posthtml-parser@^0.4.0, posthtml-parser@^0.4.1:
|
4616 |
version "0.4.2"
|
4617 |
resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.4.2.tgz#a132bbdf0cd4bc199d34f322f5c1599385d7c6c1"
|
4618 |
integrity sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==
|
4619 |
dependencies:
|
4620 |
htmlparser2 "^3.9.2"
|
4621 |
|
4622 |
-
posthtml-render@^1.1.3, posthtml-render@^1.1.5:
|
4623 |
-
version "1.2.
|
4624 |
-
resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-1.2.
|
4625 |
-
integrity sha512-
|
4626 |
|
4627 |
posthtml@^0.11.2:
|
4628 |
version "0.11.6"
|
@@ -4633,12 +4664,12 @@ posthtml@^0.11.2:
|
|
4633 |
posthtml-render "^1.1.5"
|
4634 |
|
4635 |
posthtml@^0.12.0:
|
4636 |
-
version "0.12.
|
4637 |
-
resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.12.
|
4638 |
-
integrity sha512-
|
4639 |
dependencies:
|
4640 |
-
posthtml-parser "^0.4.
|
4641 |
-
posthtml-render "^1.
|
4642 |
|
4643 |
prelude-ls@~1.1.2:
|
4644 |
version "1.1.2"
|
@@ -4769,7 +4800,7 @@ readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.3, readable
|
|
4769 |
string_decoder "~1.1.1"
|
4770 |
util-deprecate "~1.0.1"
|
4771 |
|
4772 |
-
readable-stream@^3.1.1:
|
4773 |
version "3.6.0"
|
4774 |
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
4775 |
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
@@ -4937,9 +4968,9 @@ resolve-url@^0.2.1:
|
|
4937 |
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
|
4938 |
|
4939 |
resolve@^1.1.5, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1:
|
4940 |
-
version "1.
|
4941 |
-
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.
|
4942 |
-
integrity sha512-
|
4943 |
dependencies:
|
4944 |
path-parse "^1.0.6"
|
4945 |
|
@@ -5004,23 +5035,21 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
|
|
5004 |
inherits "^2.0.1"
|
5005 |
|
5006 |
run-async@^2.4.0:
|
5007 |
-
version "2.4.
|
5008 |
-
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.
|
5009 |
-
integrity sha512-
|
5010 |
-
dependencies:
|
5011 |
-
is-promise "^2.1.0"
|
5012 |
|
5013 |
rxjs@^6.5.3:
|
5014 |
-
version "6.5.
|
5015 |
-
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.
|
5016 |
-
integrity sha512-
|
5017 |
dependencies:
|
5018 |
tslib "^1.9.0"
|
5019 |
|
5020 |
-
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
|
5021 |
-
version "5.2.
|
5022 |
-
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.
|
5023 |
-
integrity sha512-
|
5024 |
|
5025 |
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
5026 |
version "5.1.2"
|
@@ -5066,7 +5095,7 @@ semver@^5.4.1, semver@^5.5.0, semver@^5.5.1:
|
|
5066 |
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
5067 |
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
5068 |
|
5069 |
-
semver@^6.1.2
|
5070 |
version "6.3.0"
|
5071 |
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
5072 |
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
@@ -5218,9 +5247,9 @@ source-map-resolve@^0.5.0:
|
|
5218 |
urix "^0.1.0"
|
5219 |
|
5220 |
source-map-support@~0.5.10, source-map-support@~0.5.12:
|
5221 |
-
version "0.5.
|
5222 |
-
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.
|
5223 |
-
integrity sha512-
|
5224 |
dependencies:
|
5225 |
buffer-from "^1.0.0"
|
5226 |
source-map "^0.6.0"
|
@@ -5354,21 +5383,39 @@ string-width@^4.1.0:
|
|
5354 |
is-fullwidth-code-point "^3.0.0"
|
5355 |
strip-ansi "^6.0.0"
|
5356 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5357 |
string.prototype.trimleft@^2.1.1:
|
5358 |
-
version "2.1.
|
5359 |
-
resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.
|
5360 |
-
integrity sha512-
|
5361 |
dependencies:
|
5362 |
define-properties "^1.1.3"
|
5363 |
-
|
|
|
5364 |
|
5365 |
string.prototype.trimright@^2.1.1:
|
5366 |
-
version "2.1.
|
5367 |
-
resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.
|
5368 |
-
integrity sha512-
|
5369 |
dependencies:
|
5370 |
define-properties "^1.1.3"
|
5371 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5372 |
|
5373 |
string_decoder@^1.0.0, string_decoder@^1.1.1:
|
5374 |
version "1.3.0"
|
@@ -5420,9 +5467,9 @@ strip-ansi@^6.0.0:
|
|
5420 |
ansi-regex "^5.0.0"
|
5421 |
|
5422 |
strip-json-comments@^3.0.1:
|
5423 |
-
version "3.0
|
5424 |
-
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.
|
5425 |
-
integrity sha512-
|
5426 |
|
5427 |
stylehacks@^4.0.0:
|
5428 |
version "4.0.3"
|
@@ -5510,9 +5557,9 @@ terser@^3.7.3:
|
|
5510 |
source-map-support "~0.5.10"
|
5511 |
|
5512 |
terser@^4.3.9:
|
5513 |
-
version "4.
|
5514 |
-
resolved "https://registry.yarnpkg.com/terser/-/terser-4.
|
5515 |
-
integrity sha512-
|
5516 |
dependencies:
|
5517 |
commander "^2.20.0"
|
5518 |
source-map "~0.6.1"
|
@@ -5621,9 +5668,9 @@ tr46@^1.0.1:
|
|
5621 |
punycode "^2.1.0"
|
5622 |
|
5623 |
tslib@^1.9.0:
|
5624 |
-
version "1.
|
5625 |
-
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.
|
5626 |
-
integrity sha512-
|
5627 |
|
5628 |
tty-browserify@0.0.0:
|
5629 |
version "0.0.0"
|
9 |
dependencies:
|
10 |
"@babel/highlight" "^7.8.3"
|
11 |
|
12 |
+
"@babel/compat-data@^7.9.6":
|
13 |
+
version "7.9.6"
|
14 |
+
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.6.tgz#3f604c40e420131affe6f2c8052e9a275ae2049b"
|
15 |
+
integrity sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==
|
16 |
dependencies:
|
17 |
+
browserslist "^4.11.1"
|
18 |
invariant "^2.2.4"
|
19 |
semver "^5.5.0"
|
20 |
|
21 |
"@babel/core@>=7.7.2", "@babel/core@^7.4.4":
|
22 |
+
version "7.9.6"
|
23 |
+
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376"
|
24 |
+
integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==
|
25 |
dependencies:
|
26 |
"@babel/code-frame" "^7.8.3"
|
27 |
+
"@babel/generator" "^7.9.6"
|
28 |
"@babel/helper-module-transforms" "^7.9.0"
|
29 |
+
"@babel/helpers" "^7.9.6"
|
30 |
+
"@babel/parser" "^7.9.6"
|
31 |
"@babel/template" "^7.8.6"
|
32 |
+
"@babel/traverse" "^7.9.6"
|
33 |
+
"@babel/types" "^7.9.6"
|
34 |
convert-source-map "^1.7.0"
|
35 |
debug "^4.1.0"
|
36 |
gensync "^1.0.0-beta.1"
|
40 |
semver "^5.4.1"
|
41 |
source-map "^0.5.0"
|
42 |
|
43 |
+
"@babel/generator@^7.4.4", "@babel/generator@^7.9.6":
|
44 |
+
version "7.9.6"
|
45 |
+
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43"
|
46 |
+
integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==
|
47 |
dependencies:
|
48 |
+
"@babel/types" "^7.9.6"
|
49 |
jsesc "^2.5.1"
|
50 |
lodash "^4.17.13"
|
51 |
source-map "^0.5.0"
|
66 |
"@babel/types" "^7.8.3"
|
67 |
|
68 |
"@babel/helper-builder-react-jsx-experimental@^7.9.0":
|
69 |
+
version "7.9.5"
|
70 |
+
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3"
|
71 |
+
integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg==
|
72 |
dependencies:
|
73 |
"@babel/helper-annotate-as-pure" "^7.8.3"
|
74 |
"@babel/helper-module-imports" "^7.8.3"
|
75 |
+
"@babel/types" "^7.9.5"
|
76 |
|
77 |
"@babel/helper-builder-react-jsx@^7.9.0":
|
78 |
version "7.9.0"
|
82 |
"@babel/helper-annotate-as-pure" "^7.8.3"
|
83 |
"@babel/types" "^7.9.0"
|
84 |
|
85 |
+
"@babel/helper-compilation-targets@^7.9.6":
|
86 |
+
version "7.9.6"
|
87 |
+
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz#1e05b7ccc9d38d2f8b40b458b380a04dcfadd38a"
|
88 |
+
integrity sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==
|
89 |
dependencies:
|
90 |
+
"@babel/compat-data" "^7.9.6"
|
91 |
+
browserslist "^4.11.1"
|
92 |
invariant "^2.2.4"
|
93 |
levenary "^1.1.1"
|
94 |
semver "^5.5.0"
|
119 |
"@babel/traverse" "^7.8.3"
|
120 |
"@babel/types" "^7.8.3"
|
121 |
|
122 |
+
"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5":
|
123 |
+
version "7.9.5"
|
124 |
+
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
|
125 |
+
integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==
|
126 |
dependencies:
|
127 |
"@babel/helper-get-function-arity" "^7.8.3"
|
128 |
"@babel/template" "^7.8.3"
|
129 |
+
"@babel/types" "^7.9.5"
|
130 |
|
131 |
"@babel/helper-get-function-arity@^7.8.3":
|
132 |
version "7.8.3"
|
200 |
"@babel/types" "^7.8.3"
|
201 |
|
202 |
"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6":
|
203 |
+
version "7.9.6"
|
204 |
+
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444"
|
205 |
+
integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==
|
206 |
dependencies:
|
207 |
"@babel/helper-member-expression-to-functions" "^7.8.3"
|
208 |
"@babel/helper-optimise-call-expression" "^7.8.3"
|
209 |
+
"@babel/traverse" "^7.9.6"
|
210 |
+
"@babel/types" "^7.9.6"
|
211 |
|
212 |
"@babel/helper-simple-access@^7.8.3":
|
213 |
version "7.8.3"
|
224 |
dependencies:
|
225 |
"@babel/types" "^7.8.3"
|
226 |
|
227 |
+
"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
|
228 |
+
version "7.9.5"
|
229 |
+
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
|
230 |
+
integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==
|
231 |
|
232 |
"@babel/helper-wrap-function@^7.8.3":
|
233 |
version "7.8.3"
|
239 |
"@babel/traverse" "^7.8.3"
|
240 |
"@babel/types" "^7.8.3"
|
241 |
|
242 |
+
"@babel/helpers@^7.9.6":
|
243 |
+
version "7.9.6"
|
244 |
+
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580"
|
245 |
+
integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==
|
246 |
dependencies:
|
247 |
"@babel/template" "^7.8.3"
|
248 |
+
"@babel/traverse" "^7.9.6"
|
249 |
+
"@babel/types" "^7.9.6"
|
250 |
|
251 |
"@babel/highlight@^7.8.3":
|
252 |
version "7.9.0"
|
257 |
chalk "^2.0.0"
|
258 |
js-tokens "^4.0.0"
|
259 |
|
260 |
+
"@babel/parser@^7.4.4", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6":
|
261 |
+
version "7.9.6"
|
262 |
+
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7"
|
263 |
+
integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==
|
264 |
|
265 |
"@babel/plugin-proposal-async-generator-functions@^7.8.3":
|
266 |
version "7.8.3"
|
303 |
"@babel/helper-plugin-utils" "^7.8.3"
|
304 |
"@babel/plugin-syntax-numeric-separator" "^7.8.3"
|
305 |
|
306 |
+
"@babel/plugin-proposal-object-rest-spread@^7.9.6":
|
307 |
+
version "7.9.6"
|
308 |
+
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63"
|
309 |
+
integrity sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==
|
310 |
dependencies:
|
311 |
"@babel/helper-plugin-utils" "^7.8.3"
|
312 |
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
|
313 |
+
"@babel/plugin-transform-parameters" "^7.9.5"
|
314 |
|
315 |
"@babel/plugin-proposal-optional-catch-binding@^7.8.3":
|
316 |
version "7.8.3"
|
444 |
"@babel/helper-plugin-utils" "^7.8.3"
|
445 |
lodash "^4.17.13"
|
446 |
|
447 |
+
"@babel/plugin-transform-classes@^7.9.5":
|
448 |
+
version "7.9.5"
|
449 |
+
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c"
|
450 |
+
integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==
|
451 |
dependencies:
|
452 |
"@babel/helper-annotate-as-pure" "^7.8.3"
|
453 |
"@babel/helper-define-map" "^7.8.3"
|
454 |
+
"@babel/helper-function-name" "^7.9.5"
|
455 |
"@babel/helper-optimise-call-expression" "^7.8.3"
|
456 |
"@babel/helper-plugin-utils" "^7.8.3"
|
457 |
"@babel/helper-replace-supers" "^7.8.6"
|
465 |
dependencies:
|
466 |
"@babel/helper-plugin-utils" "^7.8.3"
|
467 |
|
468 |
+
"@babel/plugin-transform-destructuring@^7.9.5":
|
469 |
+
version "7.9.5"
|
470 |
+
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50"
|
471 |
+
integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==
|
472 |
dependencies:
|
473 |
"@babel/helper-plugin-utils" "^7.8.3"
|
474 |
|
532 |
dependencies:
|
533 |
"@babel/helper-plugin-utils" "^7.8.3"
|
534 |
|
535 |
+
"@babel/plugin-transform-modules-amd@^7.9.6":
|
536 |
+
version "7.9.6"
|
537 |
+
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz#8539ec42c153d12ea3836e0e3ac30d5aae7b258e"
|
538 |
+
integrity sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==
|
539 |
dependencies:
|
540 |
"@babel/helper-module-transforms" "^7.9.0"
|
541 |
"@babel/helper-plugin-utils" "^7.8.3"
|
542 |
+
babel-plugin-dynamic-import-node "^2.3.3"
|
543 |
|
544 |
+
"@babel/plugin-transform-modules-commonjs@^7.4.4", "@babel/plugin-transform-modules-commonjs@^7.9.6":
|
545 |
+
version "7.9.6"
|
546 |
+
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz#64b7474a4279ee588cacd1906695ca721687c277"
|
547 |
+
integrity sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==
|
548 |
dependencies:
|
549 |
"@babel/helper-module-transforms" "^7.9.0"
|
550 |
"@babel/helper-plugin-utils" "^7.8.3"
|
551 |
"@babel/helper-simple-access" "^7.8.3"
|
552 |
+
babel-plugin-dynamic-import-node "^2.3.3"
|
553 |
|
554 |
+
"@babel/plugin-transform-modules-systemjs@^7.9.6":
|
555 |
+
version "7.9.6"
|
556 |
+
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz#207f1461c78a231d5337a92140e52422510d81a4"
|
557 |
+
integrity sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==
|
558 |
dependencies:
|
559 |
"@babel/helper-hoist-variables" "^7.8.3"
|
560 |
"@babel/helper-module-transforms" "^7.9.0"
|
561 |
"@babel/helper-plugin-utils" "^7.8.3"
|
562 |
+
babel-plugin-dynamic-import-node "^2.3.3"
|
563 |
|
564 |
"@babel/plugin-transform-modules-umd@^7.9.0":
|
565 |
version "7.9.0"
|
591 |
"@babel/helper-plugin-utils" "^7.8.3"
|
592 |
"@babel/helper-replace-supers" "^7.8.3"
|
593 |
|
594 |
+
"@babel/plugin-transform-parameters@^7.9.5":
|
595 |
+
version "7.9.5"
|
596 |
+
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795"
|
597 |
+
integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==
|
598 |
dependencies:
|
599 |
"@babel/helper-get-function-arity" "^7.8.3"
|
600 |
"@babel/helper-plugin-utils" "^7.8.3"
|
631 |
"@babel/helper-plugin-utils" "^7.8.3"
|
632 |
|
633 |
"@babel/plugin-transform-runtime@>=7.6.2":
|
634 |
+
version "7.9.6"
|
635 |
+
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz#3ba804438ad0d880a17bca5eaa0cdf1edeedb2fd"
|
636 |
+
integrity sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w==
|
637 |
dependencies:
|
638 |
"@babel/helper-module-imports" "^7.8.3"
|
639 |
"@babel/helper-plugin-utils" "^7.8.3"
|
686 |
"@babel/helper-plugin-utils" "^7.8.3"
|
687 |
|
688 |
"@babel/preset-env@^7.4.4":
|
689 |
+
version "7.9.6"
|
690 |
+
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6"
|
691 |
+
integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==
|
692 |
dependencies:
|
693 |
+
"@babel/compat-data" "^7.9.6"
|
694 |
+
"@babel/helper-compilation-targets" "^7.9.6"
|
695 |
"@babel/helper-module-imports" "^7.8.3"
|
696 |
"@babel/helper-plugin-utils" "^7.8.3"
|
697 |
"@babel/plugin-proposal-async-generator-functions" "^7.8.3"
|
699 |
"@babel/plugin-proposal-json-strings" "^7.8.3"
|
700 |
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3"
|
701 |
"@babel/plugin-proposal-numeric-separator" "^7.8.3"
|
702 |
+
"@babel/plugin-proposal-object-rest-spread" "^7.9.6"
|
703 |
"@babel/plugin-proposal-optional-catch-binding" "^7.8.3"
|
704 |
"@babel/plugin-proposal-optional-chaining" "^7.9.0"
|
705 |
"@babel/plugin-proposal-unicode-property-regex" "^7.8.3"
|
716 |
"@babel/plugin-transform-async-to-generator" "^7.8.3"
|
717 |
"@babel/plugin-transform-block-scoped-functions" "^7.8.3"
|
718 |
"@babel/plugin-transform-block-scoping" "^7.8.3"
|
719 |
+
"@babel/plugin-transform-classes" "^7.9.5"
|
720 |
"@babel/plugin-transform-computed-properties" "^7.8.3"
|
721 |
+
"@babel/plugin-transform-destructuring" "^7.9.5"
|
722 |
"@babel/plugin-transform-dotall-regex" "^7.8.3"
|
723 |
"@babel/plugin-transform-duplicate-keys" "^7.8.3"
|
724 |
"@babel/plugin-transform-exponentiation-operator" "^7.8.3"
|
726 |
"@babel/plugin-transform-function-name" "^7.8.3"
|
727 |
"@babel/plugin-transform-literals" "^7.8.3"
|
728 |
"@babel/plugin-transform-member-expression-literals" "^7.8.3"
|
729 |
+
"@babel/plugin-transform-modules-amd" "^7.9.6"
|
730 |
+
"@babel/plugin-transform-modules-commonjs" "^7.9.6"
|
731 |
+
"@babel/plugin-transform-modules-systemjs" "^7.9.6"
|
732 |
"@babel/plugin-transform-modules-umd" "^7.9.0"
|
733 |
"@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
|
734 |
"@babel/plugin-transform-new-target" "^7.8.3"
|
735 |
"@babel/plugin-transform-object-super" "^7.8.3"
|
736 |
+
"@babel/plugin-transform-parameters" "^7.9.5"
|
737 |
"@babel/plugin-transform-property-literals" "^7.8.3"
|
738 |
"@babel/plugin-transform-regenerator" "^7.8.7"
|
739 |
"@babel/plugin-transform-reserved-words" "^7.8.3"
|
744 |
"@babel/plugin-transform-typeof-symbol" "^7.8.4"
|
745 |
"@babel/plugin-transform-unicode-regex" "^7.8.3"
|
746 |
"@babel/preset-modules" "^0.1.3"
|
747 |
+
"@babel/types" "^7.9.6"
|
748 |
+
browserslist "^4.11.1"
|
749 |
core-js-compat "^3.6.2"
|
750 |
invariant "^2.2.2"
|
751 |
levenary "^1.1.1"
|
763 |
esutils "^2.0.2"
|
764 |
|
765 |
"@babel/runtime@>=7.7.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.8.4":
|
766 |
+
version "7.9.6"
|
767 |
+
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f"
|
768 |
+
integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==
|
769 |
dependencies:
|
770 |
regenerator-runtime "^0.13.4"
|
771 |
|
778 |
"@babel/parser" "^7.8.6"
|
779 |
"@babel/types" "^7.8.6"
|
780 |
|
781 |
+
"@babel/traverse@^7.4.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6":
|
782 |
+
version "7.9.6"
|
783 |
+
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442"
|
784 |
+
integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==
|
785 |
dependencies:
|
786 |
"@babel/code-frame" "^7.8.3"
|
787 |
+
"@babel/generator" "^7.9.6"
|
788 |
+
"@babel/helper-function-name" "^7.9.5"
|
789 |
"@babel/helper-split-export-declaration" "^7.8.3"
|
790 |
+
"@babel/parser" "^7.9.6"
|
791 |
+
"@babel/types" "^7.9.6"
|
792 |
debug "^4.1.0"
|
793 |
globals "^11.1.0"
|
794 |
lodash "^4.17.13"
|
795 |
|
796 |
+
"@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6":
|
797 |
+
version "7.9.6"
|
798 |
+
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7"
|
799 |
+
integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==
|
800 |
dependencies:
|
801 |
+
"@babel/helper-validator-identifier" "^7.9.5"
|
802 |
lodash "^4.17.13"
|
803 |
to-fast-properties "^2.0.0"
|
804 |
|
805 |
"@iarna/toml@^2.2.0":
|
806 |
+
version "2.2.5"
|
807 |
+
resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c"
|
808 |
+
integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==
|
809 |
|
810 |
"@mrmlnc/readdir-enhanced@^2.2.1":
|
811 |
version "2.2.1"
|
867 |
integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
|
868 |
|
869 |
"@types/q@^1.5.1":
|
870 |
+
version "1.5.4"
|
871 |
+
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
|
872 |
+
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
|
873 |
|
874 |
abab@^2.0.0:
|
875 |
version "2.0.3"
|
900 |
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
|
901 |
|
902 |
acorn@^7.1.1:
|
903 |
+
version "7.2.0"
|
904 |
+
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe"
|
905 |
+
integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==
|
906 |
|
907 |
ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
|
908 |
+
version "6.12.2"
|
909 |
+
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
|
910 |
+
integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
|
911 |
dependencies:
|
912 |
fast-deep-equal "^3.1.1"
|
913 |
fast-json-stable-stringify "^2.0.0"
|
1136 |
dependencies:
|
1137 |
babel-runtime "^6.22.0"
|
1138 |
|
1139 |
+
babel-plugin-dynamic-import-node@^2.3.3:
|
1140 |
+
version "2.3.3"
|
1141 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
|
1142 |
+
integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
|
1143 |
dependencies:
|
1144 |
object.assign "^4.1.0"
|
1145 |
|
1265 |
dependencies:
|
1266 |
file-uri-to-path "1.0.0"
|
1267 |
|
1268 |
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
|
1269 |
version "4.11.8"
|
1270 |
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
|
1271 |
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
|
1272 |
|
1273 |
+
bn.js@^5.1.1:
|
1274 |
+
version "5.1.1"
|
1275 |
+
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.1.tgz#48efc4031a9c4041b9c99c6941d903463ab62eb5"
|
1276 |
+
integrity sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==
|
1277 |
+
|
1278 |
boolbase@^1.0.0, boolbase@~1.0.0:
|
1279 |
version "1.0.0"
|
1280 |
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
|
1355 |
inherits "^2.0.1"
|
1356 |
safe-buffer "^5.1.2"
|
1357 |
|
1358 |
+
browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
|
1359 |
version "4.0.1"
|
1360 |
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
|
1361 |
integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
|
1364 |
randombytes "^2.0.1"
|
1365 |
|
1366 |
browserify-sign@^4.0.0:
|
1367 |
+
version "4.2.0"
|
1368 |
+
resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11"
|
1369 |
+
integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==
|
1370 |
+
dependencies:
|
1371 |
+
bn.js "^5.1.1"
|
1372 |
+
browserify-rsa "^4.0.1"
|
1373 |
+
create-hash "^1.2.0"
|
1374 |
+
create-hmac "^1.1.7"
|
1375 |
+
elliptic "^6.5.2"
|
1376 |
+
inherits "^2.0.4"
|
1377 |
+
parse-asn1 "^5.1.5"
|
1378 |
+
readable-stream "^3.6.0"
|
1379 |
+
safe-buffer "^5.2.0"
|
1380 |
|
1381 |
browserify-zlib@^0.2.0:
|
1382 |
version "0.2.0"
|
1385 |
dependencies:
|
1386 |
pako "~1.0.5"
|
1387 |
|
1388 |
+
browserslist@^4.0.0, browserslist@^4.1.0, browserslist@^4.11.1, browserslist@^4.8.5:
|
1389 |
+
version "4.12.0"
|
1390 |
+
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d"
|
1391 |
+
integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==
|
1392 |
dependencies:
|
1393 |
+
caniuse-lite "^1.0.30001043"
|
1394 |
+
electron-to-chromium "^1.3.413"
|
1395 |
+
node-releases "^1.1.53"
|
1396 |
+
pkg-up "^2.0.0"
|
1397 |
|
1398 |
buffer-equal@0.0.1:
|
1399 |
version "0.0.1"
|
1488 |
lodash.memoize "^4.1.2"
|
1489 |
lodash.uniq "^4.5.0"
|
1490 |
|
1491 |
+
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043:
|
1492 |
+
version "1.0.30001062"
|
1493 |
+
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz#d814b648338504b315222ace6f1a533d9a55e390"
|
1494 |
+
integrity sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw==
|
1495 |
|
1496 |
caseless@~0.12.0:
|
1497 |
version "0.12.0"
|
1596 |
integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==
|
1597 |
|
1598 |
cli-width@^2.0.0:
|
1599 |
+
version "2.2.1"
|
1600 |
+
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
|
1601 |
+
integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
|
1602 |
|
1603 |
cliui@^2.1.0:
|
1604 |
version "2.1.0"
|
1708 |
delayed-stream "~1.0.0"
|
1709 |
|
1710 |
command-exists@^1.2.6:
|
1711 |
+
version "1.2.9"
|
1712 |
+
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
|
1713 |
+
integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
|
1714 |
|
1715 |
commander@^2.11.0, commander@^2.19.0, commander@^2.20.0:
|
1716 |
version "2.20.3"
|
1760 |
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
|
1761 |
|
1762 |
core-js-compat@^3.6.2:
|
1763 |
+
version "3.6.5"
|
1764 |
+
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"
|
1765 |
+
integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==
|
1766 |
dependencies:
|
1767 |
+
browserslist "^4.8.5"
|
1768 |
semver "7.0.0"
|
1769 |
|
1770 |
core-js@^2.4.0, core-js@^2.6.5:
|
1795 |
bn.js "^4.1.0"
|
1796 |
elliptic "^6.0.0"
|
1797 |
|
1798 |
+
create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
|
1799 |
version "1.2.0"
|
1800 |
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
|
1801 |
integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
|
1806 |
ripemd160 "^2.0.1"
|
1807 |
sha.js "^2.4.0"
|
1808 |
|
1809 |
+
create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
|
1810 |
version "1.1.7"
|
1811 |
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
|
1812 |
integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
|
2025 |
whatwg-url "^7.0.0"
|
2026 |
|
2027 |
deasync@^0.1.14:
|
2028 |
+
version "0.1.20"
|
2029 |
+
resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.20.tgz#546fd2660688a1eeed55edce2308c5cf7104f9da"
|
2030 |
+
integrity sha512-E1GI7jMI57hL30OX6Ht/hfQU8DO4AuB9m72WFm4c38GNbUD4Q03//XZaOIHZiY+H1xUaomcot5yk2q/qIZQkGQ==
|
2031 |
dependencies:
|
2032 |
bindings "^1.5.0"
|
2033 |
node-addon-api "^1.7.1"
|
2218 |
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
2219 |
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
2220 |
|
2221 |
+
electron-to-chromium@^1.3.413:
|
2222 |
+
version "1.3.443"
|
2223 |
+
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.443.tgz#b01c8933e820a728afc5dde7dd535c53ff55ab11"
|
2224 |
+
integrity sha512-ty0LEroTap/xfMy31oQ3XX+Q377QvWvJaha2cmuXcbmBiX2EIB5SNDQ0hp8lhvxj63WG0zOgm/4MQ/oUBdfQqg==
|
2225 |
|
2226 |
+
elliptic@^6.0.0, elliptic@^6.5.2:
|
2227 |
version "6.5.2"
|
2228 |
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
|
2229 |
integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
|
2237 |
minimalistic-crypto-utils "^1.0.0"
|
2238 |
|
2239 |
emoji-flags@matiassingers/emoji-flags#master:
|
2240 |
+
version "1.3.0"
|
2241 |
+
resolved "https://codeload.github.com/matiassingers/emoji-flags/tar.gz/93ae74505d09bb55a3eb3a511f1dfc0dd60a5347"
|
2242 |
dependencies:
|
2243 |
columnify "1.5.1"
|
2244 |
lodash.find "3.2.1"
|
2264 |
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
|
2265 |
|
2266 |
entities@^2.0.0:
|
2267 |
+
version "2.0.2"
|
2268 |
+
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436"
|
2269 |
+
integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==
|
2270 |
|
2271 |
envinfo@^7.3.1:
|
2272 |
+
version "7.5.1"
|
2273 |
+
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236"
|
2274 |
+
integrity sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ==
|
2275 |
|
2276 |
error-ex@^1.3.1:
|
2277 |
version "1.3.2"
|
2280 |
dependencies:
|
2281 |
is-arrayish "^0.2.1"
|
2282 |
|
2283 |
+
es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
|
2284 |
version "1.17.5"
|
2285 |
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
|
2286 |
integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
|
2423 |
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
2424 |
|
2425 |
esquery@^1.0.1:
|
2426 |
+
version "1.3.1"
|
2427 |
+
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
|
2428 |
+
integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
|
2429 |
dependencies:
|
2430 |
+
estraverse "^5.1.0"
|
2431 |
|
2432 |
esrecurse@^4.1.0:
|
2433 |
version "4.2.1"
|
2441 |
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
|
2442 |
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
2443 |
|
2444 |
+
estraverse@^5.1.0:
|
2445 |
+
version "5.1.0"
|
2446 |
+
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
|
2447 |
+
integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
|
2448 |
|
2449 |
esutils@^2.0.2:
|
2450 |
version "2.0.3"
|
2611 |
repeat-string "^1.6.1"
|
2612 |
to-regex-range "^2.1.0"
|
2613 |
|
2614 |
+
find-up@^2.1.0:
|
2615 |
+
version "2.1.0"
|
2616 |
+
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
2617 |
+
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
|
2618 |
+
dependencies:
|
2619 |
+
locate-path "^2.0.0"
|
2620 |
+
|
2621 |
find-up@^3.0.0:
|
2622 |
version "3.0.0"
|
2623 |
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
2635 |
write "1.0.3"
|
2636 |
|
2637 |
flatted@^2.0.0:
|
2638 |
+
version "2.0.2"
|
2639 |
+
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
|
2640 |
+
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
|
2641 |
|
2642 |
for-in@^1.0.2:
|
2643 |
version "1.0.2"
|
2681 |
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
2682 |
|
2683 |
fsevents@^1.2.7:
|
2684 |
+
version "1.2.13"
|
2685 |
+
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
|
2686 |
+
integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
|
2687 |
dependencies:
|
2688 |
bindings "^1.5.0"
|
2689 |
nan "^2.12.1"
|
2792 |
integrity sha1-PQHGyt5leQqb+04wshWLdjWsut4=
|
2793 |
|
2794 |
graceful-fs@^4.1.11:
|
2795 |
+
version "4.2.4"
|
2796 |
+
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
|
2797 |
+
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
|
2798 |
|
2799 |
grapheme-breaker@^0.3.2:
|
2800 |
version "0.3.2"
|
2883 |
function-bind "^1.1.1"
|
2884 |
|
2885 |
hash-base@^3.0.0:
|
2886 |
+
version "3.1.0"
|
2887 |
+
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
|
2888 |
+
integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
|
2889 |
dependencies:
|
2890 |
+
inherits "^2.0.4"
|
2891 |
+
readable-stream "^3.6.0"
|
2892 |
+
safe-buffer "^5.2.0"
|
2893 |
|
2894 |
hash.js@^1.0.0, hash.js@^1.0.3:
|
2895 |
version "1.1.7"
|
3047 |
once "^1.3.0"
|
3048 |
wrappy "1"
|
3049 |
|
3050 |
+
inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
|
3051 |
version "2.0.4"
|
3052 |
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
3053 |
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
3260 |
dependencies:
|
3261 |
isobject "^3.0.1"
|
3262 |
|
|
|
|
|
|
|
|
|
|
|
3263 |
is-regex@^1.0.5:
|
3264 |
version "1.0.5"
|
3265 |
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
|
3338 |
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
3339 |
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
3340 |
|
|
|
|
|
|
|
|
|
|
|
3341 |
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
3342 |
version "4.0.0"
|
3343 |
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
3436 |
minimist "^1.2.0"
|
3437 |
|
3438 |
json5@^2.1.2:
|
3439 |
+
version "2.1.3"
|
3440 |
+
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
|
3441 |
+
integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
|
3442 |
dependencies:
|
3443 |
minimist "^1.2.5"
|
3444 |
|
3501 |
prelude-ls "~1.1.2"
|
3502 |
type-check "~0.3.2"
|
3503 |
|
3504 |
+
locate-path@^2.0.0:
|
3505 |
+
version "2.0.0"
|
3506 |
+
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
|
3507 |
+
integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
|
3508 |
+
dependencies:
|
3509 |
+
p-locate "^2.0.0"
|
3510 |
+
path-exists "^3.0.0"
|
3511 |
+
|
3512 |
locate-path@^3.0.0:
|
3513 |
version "3.0.0"
|
3514 |
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
3517 |
p-locate "^3.0.0"
|
3518 |
path-exists "^3.0.0"
|
3519 |
|
3520 |
+
lodash-cli@>=4.17.5:
|
3521 |
version "4.17.5"
|
3522 |
resolved "https://registry.yarnpkg.com/lodash-cli/-/lodash-cli-4.17.5.tgz#1bab72c8c9980febf4fe7a1900b0971ce040dd0b"
|
3523 |
integrity sha512-eeQi+oVS76ofP791g4wEGs4B4nyc4fiHboUCc0BzM8qCkLAzqbroewOt98A8ISoY1HH2di00pENNErXf0MWxiw==
|
3743 |
bn.js "^4.0.0"
|
3744 |
brorand "^1.0.1"
|
3745 |
|
3746 |
+
mime-db@1.44.0:
|
3747 |
+
version "1.44.0"
|
3748 |
+
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
|
3749 |
+
integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
|
3750 |
|
3751 |
mime-types@^2.1.12, mime-types@~2.1.19:
|
3752 |
+
version "2.1.27"
|
3753 |
+
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
|
3754 |
+
integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
|
3755 |
dependencies:
|
3756 |
+
mime-db "1.44.0"
|
3757 |
|
3758 |
mime@1.6.0:
|
3759 |
version "1.6.0"
|
3801 |
is-extendable "^1.0.1"
|
3802 |
|
3803 |
mkdirp@^0.5.1, mkdirp@~0.5.1:
|
3804 |
+
version "0.5.5"
|
3805 |
+
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
3806 |
+
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
|
3807 |
dependencies:
|
3808 |
minimist "^1.2.5"
|
3809 |
|
3828 |
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
3829 |
|
3830 |
nan@^2.12.1:
|
3831 |
+
version "2.14.1"
|
3832 |
+
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
|
3833 |
+
integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
|
3834 |
|
3835 |
nanomatch@^1.2.9:
|
3836 |
version "1.2.13"
|
3898 |
util "^0.11.0"
|
3899 |
vm-browserify "^1.0.1"
|
3900 |
|
3901 |
+
node-releases@^1.1.53:
|
3902 |
+
version "1.1.55"
|
3903 |
+
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.55.tgz#8af23b7c561d8e2e6e36a46637bab84633b07cee"
|
3904 |
+
integrity sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==
|
|
|
|
|
3905 |
|
3906 |
normalize-html-whitespace@^1.0.0:
|
3907 |
version "1.0.0"
|
4082 |
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
4083 |
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
4084 |
|
4085 |
+
p-limit@^1.1.0:
|
4086 |
+
version "1.3.0"
|
4087 |
+
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
|
4088 |
+
integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
|
4089 |
+
dependencies:
|
4090 |
+
p-try "^1.0.0"
|
4091 |
+
|
4092 |
p-limit@^2.0.0:
|
4093 |
+
version "2.3.0"
|
4094 |
+
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
|
4095 |
+
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
|
4096 |
dependencies:
|
4097 |
p-try "^2.0.0"
|
4098 |
|
4099 |
+
p-locate@^2.0.0:
|
4100 |
+
version "2.0.0"
|
4101 |
+
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
|
4102 |
+
integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
|
4103 |
+
dependencies:
|
4104 |
+
p-limit "^1.1.0"
|
4105 |
+
|
4106 |
p-locate@^3.0.0:
|
4107 |
version "3.0.0"
|
4108 |
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
|
4110 |
dependencies:
|
4111 |
p-limit "^2.0.0"
|
4112 |
|
4113 |
+
p-try@^1.0.0:
|
4114 |
+
version "1.0.0"
|
4115 |
+
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
|
4116 |
+
integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
|
4117 |
+
|
4118 |
p-try@^2.0.0:
|
4119 |
version "2.2.0"
|
4120 |
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
4207 |
dependencies:
|
4208 |
callsites "^3.0.0"
|
4209 |
|
4210 |
+
parse-asn1@^5.0.0, parse-asn1@^5.1.5:
|
4211 |
version "5.1.5"
|
4212 |
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
|
4213 |
integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
|
4293 |
resolved "https://registry.yarnpkg.com/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660"
|
4294 |
integrity sha1-GN4vl+S/epVRrXURlCtUlverpmA=
|
4295 |
|
4296 |
+
pkg-up@^2.0.0:
|
4297 |
+
version "2.0.0"
|
4298 |
+
resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
|
4299 |
+
integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
|
4300 |
dependencies:
|
4301 |
+
find-up "^2.1.0"
|
4302 |
|
4303 |
pn@^1.1.0:
|
4304 |
version "1.1.0"
|
4612 |
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
|
4613 |
|
4614 |
postcss-value-parser@^4.0.2:
|
4615 |
+
version "4.1.0"
|
4616 |
+
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
|
4617 |
+
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
|
4618 |
|
4619 |
postcss@6.0.1:
|
4620 |
version "6.0.1"
|
4635 |
supports-color "^5.4.0"
|
4636 |
|
4637 |
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.11, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.27:
|
4638 |
+
version "7.0.30"
|
4639 |
+
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.30.tgz#cc9378beffe46a02cbc4506a0477d05fcea9a8e2"
|
4640 |
+
integrity sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==
|
4641 |
dependencies:
|
4642 |
chalk "^2.4.2"
|
4643 |
source-map "^0.6.1"
|
4644 |
supports-color "^6.1.0"
|
4645 |
|
4646 |
+
posthtml-parser@^0.4.0, posthtml-parser@^0.4.1, posthtml-parser@^0.4.2:
|
4647 |
version "0.4.2"
|
4648 |
resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.4.2.tgz#a132bbdf0cd4bc199d34f322f5c1599385d7c6c1"
|
4649 |
integrity sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==
|
4650 |
dependencies:
|
4651 |
htmlparser2 "^3.9.2"
|
4652 |
|
4653 |
+
posthtml-render@^1.1.3, posthtml-render@^1.1.5, posthtml-render@^1.2.2:
|
4654 |
+
version "1.2.2"
|
4655 |
+
resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-1.2.2.tgz#f554a19ed40d40e2bfc160826b0a91d4a23656cd"
|
4656 |
+
integrity sha512-MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ==
|
4657 |
|
4658 |
posthtml@^0.11.2:
|
4659 |
version "0.11.6"
|
4664 |
posthtml-render "^1.1.5"
|
4665 |
|
4666 |
posthtml@^0.12.0:
|
4667 |
+
version "0.12.3"
|
4668 |
+
resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.12.3.tgz#8fa5b903907e9c10ba5b883863cc550189a309d5"
|
4669 |
+
integrity sha512-Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA==
|
4670 |
dependencies:
|
4671 |
+
posthtml-parser "^0.4.2"
|
4672 |
+
posthtml-render "^1.2.2"
|
4673 |
|
4674 |
prelude-ls@~1.1.2:
|
4675 |
version "1.1.2"
|
4800 |
string_decoder "~1.1.1"
|
4801 |
util-deprecate "~1.0.1"
|
4802 |
|
4803 |
+
readable-stream@^3.1.1, readable-stream@^3.6.0:
|
4804 |
version "3.6.0"
|
4805 |
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
4806 |
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
4968 |
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
|
4969 |
|
4970 |
resolve@^1.1.5, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1:
|
4971 |
+
version "1.17.0"
|
4972 |
+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
4973 |
+
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
4974 |
dependencies:
|
4975 |
path-parse "^1.0.6"
|
4976 |
|
5035 |
inherits "^2.0.1"
|
5036 |
|
5037 |
run-async@^2.4.0:
|
5038 |
+
version "2.4.1"
|
5039 |
+
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
|
5040 |
+
integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
|
|
|
|
|
5041 |
|
5042 |
rxjs@^6.5.3:
|
5043 |
+
version "6.5.5"
|
5044 |
+
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
|
5045 |
+
integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
|
5046 |
dependencies:
|
5047 |
tslib "^1.9.0"
|
5048 |
|
5049 |
+
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
|
5050 |
+
version "5.2.1"
|
5051 |
+
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
5052 |
+
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
5053 |
|
5054 |
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
5055 |
version "5.1.2"
|
5095 |
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
5096 |
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
5097 |
|
5098 |
+
semver@^6.1.2:
|
5099 |
version "6.3.0"
|
5100 |
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
5101 |
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
5247 |
urix "^0.1.0"
|
5248 |
|
5249 |
source-map-support@~0.5.10, source-map-support@~0.5.12:
|
5250 |
+
version "0.5.19"
|
5251 |
+
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
|
5252 |
+
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
|
5253 |
dependencies:
|
5254 |
buffer-from "^1.0.0"
|
5255 |
source-map "^0.6.0"
|
5383 |
is-fullwidth-code-point "^3.0.0"
|
5384 |
strip-ansi "^6.0.0"
|
5385 |
|
5386 |
+
string.prototype.trimend@^1.0.0:
|
5387 |
+
version "1.0.1"
|
5388 |
+
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
|
5389 |
+
integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
|
5390 |
+
dependencies:
|
5391 |
+
define-properties "^1.1.3"
|
5392 |
+
es-abstract "^1.17.5"
|
5393 |
+
|
5394 |
string.prototype.trimleft@^2.1.1:
|
5395 |
+
version "2.1.2"
|
5396 |
+
resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"
|
5397 |
+
integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
|
5398 |
dependencies:
|
5399 |
define-properties "^1.1.3"
|
5400 |
+
es-abstract "^1.17.5"
|
5401 |
+
string.prototype.trimstart "^1.0.0"
|
5402 |
|
5403 |
string.prototype.trimright@^2.1.1:
|
5404 |
+
version "2.1.2"
|
5405 |
+
resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"
|
5406 |
+
integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
|
5407 |
dependencies:
|
5408 |
define-properties "^1.1.3"
|
5409 |
+
es-abstract "^1.17.5"
|
5410 |
+
string.prototype.trimend "^1.0.0"
|
5411 |
+
|
5412 |
+
string.prototype.trimstart@^1.0.0:
|
5413 |
+
version "1.0.1"
|
5414 |
+
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
|
5415 |
+
integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
|
5416 |
+
dependencies:
|
5417 |
+
define-properties "^1.1.3"
|
5418 |
+
es-abstract "^1.17.5"
|
5419 |
|
5420 |
string_decoder@^1.0.0, string_decoder@^1.1.1:
|
5421 |
version "1.3.0"
|
5467 |
ansi-regex "^5.0.0"
|
5468 |
|
5469 |
strip-json-comments@^3.0.1:
|
5470 |
+
version "3.1.0"
|
5471 |
+
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
|
5472 |
+
integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
|
5473 |
|
5474 |
stylehacks@^4.0.0:
|
5475 |
version "4.0.3"
|
5557 |
source-map-support "~0.5.10"
|
5558 |
|
5559 |
terser@^4.3.9:
|
5560 |
+
version "4.7.0"
|
5561 |
+
resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006"
|
5562 |
+
integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==
|
5563 |
dependencies:
|
5564 |
commander "^2.20.0"
|
5565 |
source-map "~0.6.1"
|
5668 |
punycode "^2.1.0"
|
5669 |
|
5670 |
tslib@^1.9.0:
|
5671 |
+
version "1.13.0"
|
5672 |
+
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
|
5673 |
+
integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
|
5674 |
|
5675 |
tty-browserify@0.0.0:
|
5676 |
version "0.0.0"
|