├── .distignore
├── .editorconfig
├── .gitignore
├── .phpcs.xml.dist
├── Gruntfile.js
├── composer.json
├── composer.lock
├── package-lock.json
├── package.json
├── phpstan.neon
├── readme.txt
├── src
├── class-mastodon-rss-api.php
├── class-sync-mastodon-admin.php
├── class-sync-mastodon-core.php
├── class-sync-mastodon-cron.php
├── class-sync-mastodon-meta-boxes.php
├── class-sync-mastodon-options.php
├── class-sync-mastodon-wp-cli.php
├── data
│ ├── class-mastodon-media.php
│ └── class-mastodon-post.php
├── post-types
│ ├── class-mastodon-post.php
│ └── mastodon-post.php
└── taxonomies
│ └── mastodon-tag.php
├── sync-mastodon.php
└── vendor
├── autoload.php
└── composer
├── ClassLoader.php
├── InstalledVersions.php
├── LICENSE
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
├── autoload_static.php
├── installed.json
└── installed.php
/.distignore:
--------------------------------------------------------------------------------
1 | # A set of files you probably don't want in your WordPress.org distribution
2 | .distignore
3 | .editorconfig
4 | .git
5 | .gitignore
6 | .gitlab-ci.yml
7 | .travis.yml
8 | .DS_Store
9 | Thumbs.db
10 | behat.yml
11 | bitbucket-pipelines.yml
12 | bin
13 | .circleci/config.yml
14 | composer.json
15 | composer.lock
16 | Gruntfile.js
17 | package.json
18 | package-lock.json
19 | phpunit.xml
20 | phpunit.xml.dist
21 | multisite.xml
22 | multisite.xml.dist
23 | .phpcs.xml
24 | phpcs.xml
25 | .phpcs.xml.dist
26 | phpcs.xml.dist
27 | README.md
28 | wp-cli.local.yml
29 | yarn.lock
30 | tests
31 | node_modules
32 | *.sql
33 | *.tar.gz
34 | *.zip
35 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # This file is for unifying the coding style for different editors and IDEs
2 | # editorconfig.org
3 |
4 | # WordPress Coding Standards
5 | # https://make.wordpress.org/core/handbook/coding-standards/
6 |
7 | root = true
8 |
9 | [*]
10 | charset = utf-8
11 | end_of_line = lf
12 | insert_final_newline = true
13 | trim_trailing_whitespace = true
14 | indent_style = tab
15 | indent_size = 4
16 |
17 | [{.jshintrc,*.json,*.yml}]
18 | indent_style = tab
19 | indent_size = 4
20 |
21 | [{*.js}]
22 | indent_style = tab
23 | indent_size = 4
24 |
25 | [{*.txt,wp-config-sample.php}]
26 | end_of_line = crlf
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | phpcs.xml
3 | phpunit.xml
4 | Thumbs.db
5 | wp-cli.local.yml
6 | node_modules/
7 | *.sql
8 | *.tar.gz
9 | *.zip
10 |
11 | # Exclude dev dependencies
12 | /vendor/automattic
13 | /vendor/bin
14 | /vendor/dealerdirect
15 | /vendor/fig-r
16 | /vendor/humanmade
17 | /vendor/php-stubs
18 | /vendor/phpcompatibility
19 | /vendor/phpstan
20 | /vendor/squizlabs
21 | /vendor/szepeviktor
22 | /vendor/wp-coding-standards
23 |
--------------------------------------------------------------------------------
/.phpcs.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ./sync-mastodon.php
5 | ./src
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function( grunt ) {
2 |
3 | 'use strict';
4 |
5 | // Project configuration
6 | grunt.initConfig( {
7 |
8 | pkg: grunt.file.readJSON( 'package.json' ),
9 |
10 | addtextdomain: {
11 | options: {
12 | textdomain: 'sync-msatodon',
13 | },
14 | update_all_domains: {
15 | options: {
16 | updateDomains: true
17 | },
18 | src: [ '*.php', '**/*.php', '!\.git/**/*', '!bin/**/*', '!node_modules/**/*', '!tests/**/*' ]
19 | }
20 | },
21 |
22 | wp_readme_to_markdown: {
23 | your_target: {
24 | files: {
25 | 'README.md': 'readme.txt'
26 | }
27 | },
28 | },
29 |
30 | makepot: {
31 | target: {
32 | options: {
33 | domainPath: '/languages',
34 | exclude: [ '\.git/*', 'bin/*', 'node_modules/*', 'tests/*' ],
35 | mainFile: 'sync-mastodon.php',
36 | potFilename: 'sync-mastodon.pot',
37 | potHeaders: {
38 | poedit: true,
39 | 'x-poedit-keywordslist': true
40 | },
41 | type: 'wp-plugin',
42 | updateTimestamp: true
43 | }
44 | }
45 | },
46 | } );
47 |
48 | grunt.loadNpmTasks( 'grunt-wp-i18n' );
49 | grunt.loadNpmTasks( 'grunt-wp-readme-to-markdown' );
50 | grunt.registerTask( 'default', [ 'i18n','readme' ] );
51 | grunt.registerTask( 'i18n', ['addtextdomain', 'makepot'] );
52 | grunt.registerTask( 'readme', ['wp_readme_to_markdown'] );
53 |
54 | grunt.util.linefeed = '\n';
55 |
56 | };
57 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "rosswintle/sync-mastodon",
3 | "description": "WordPress plugin to sync posts from a Mastodon RSS feed",
4 | "type": "project",
5 | "license": "GPL2+",
6 | "authors": [
7 | {
8 | "name": "Ross Wintle",
9 | "email": "ross@oikos.org.uk"
10 | }
11 | ],
12 | "require-dev": {
13 | "phpstan/phpstan": "^1.9",
14 | "szepeviktor/phpstan-wordpress": "^1.1",
15 | "humanmade/coding-standards": "^1.2",
16 | "php-stubs/wp-cli-stubs": "^2.7"
17 | },
18 | "config": {
19 | "allow-plugins": {
20 | "dealerdirect/phpcodesniffer-composer-installer": true
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
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": "b9a30c50121e68dc9abfffbaa8f2ce2b",
8 | "packages": [],
9 | "packages-dev": [
10 | {
11 | "name": "automattic/vipwpcs",
12 | "version": "2.0.0",
13 | "source": {
14 | "type": "git",
15 | "url": "https://github.com/Automattic/VIP-Coding-Standards.git",
16 | "reference": "fc02f491dc9f51da7c32941ac579f70b9ed300c5"
17 | },
18 | "dist": {
19 | "type": "zip",
20 | "url": "https://api.github.com/repos/Automattic/VIP-Coding-Standards/zipball/fc02f491dc9f51da7c32941ac579f70b9ed300c5",
21 | "reference": "fc02f491dc9f51da7c32941ac579f70b9ed300c5",
22 | "shasum": ""
23 | },
24 | "require": {
25 | "php": ">=5.6",
26 | "squizlabs/php_codesniffer": "^3.3.1",
27 | "wp-coding-standards/wpcs": "^2.1"
28 | },
29 | "require-dev": {
30 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5",
31 | "phpcompatibility/php-compatibility": "^9",
32 | "phpunit/phpunit": "^5 || ^6 || ^7"
33 | },
34 | "suggest": {
35 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically."
36 | },
37 | "type": "phpcodesniffer-standard",
38 | "notification-url": "https://packagist.org/downloads/",
39 | "license": [
40 | "MIT"
41 | ],
42 | "authors": [
43 | {
44 | "name": "Contributors",
45 | "homepage": "https://github.com/Automattic/VIP-Coding-Standards/graphs/contributors"
46 | }
47 | ],
48 | "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress VIP minimum coding conventions",
49 | "keywords": [
50 | "phpcs",
51 | "standards",
52 | "wordpress"
53 | ],
54 | "support": {
55 | "issues": "https://github.com/Automattic/VIP-Coding-Standards/issues",
56 | "source": "https://github.com/Automattic/VIP-Coding-Standards",
57 | "wiki": "https://github.com/Automattic/VIP-Coding-Standards/wiki"
58 | },
59 | "time": "2019-07-12T08:47:36+00:00"
60 | },
61 | {
62 | "name": "dealerdirect/phpcodesniffer-composer-installer",
63 | "version": "v0.7.2",
64 | "source": {
65 | "type": "git",
66 | "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git",
67 | "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db"
68 | },
69 | "dist": {
70 | "type": "zip",
71 | "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
72 | "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
73 | "shasum": ""
74 | },
75 | "require": {
76 | "composer-plugin-api": "^1.0 || ^2.0",
77 | "php": ">=5.3",
78 | "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
79 | },
80 | "require-dev": {
81 | "composer/composer": "*",
82 | "php-parallel-lint/php-parallel-lint": "^1.3.1",
83 | "phpcompatibility/php-compatibility": "^9.0"
84 | },
85 | "type": "composer-plugin",
86 | "extra": {
87 | "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
88 | },
89 | "autoload": {
90 | "psr-4": {
91 | "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
92 | }
93 | },
94 | "notification-url": "https://packagist.org/downloads/",
95 | "license": [
96 | "MIT"
97 | ],
98 | "authors": [
99 | {
100 | "name": "Franck Nijhof",
101 | "email": "franck.nijhof@dealerdirect.com",
102 | "homepage": "http://www.frenck.nl",
103 | "role": "Developer / IT Manager"
104 | },
105 | {
106 | "name": "Contributors",
107 | "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors"
108 | }
109 | ],
110 | "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
111 | "homepage": "http://www.dealerdirect.com",
112 | "keywords": [
113 | "PHPCodeSniffer",
114 | "PHP_CodeSniffer",
115 | "code quality",
116 | "codesniffer",
117 | "composer",
118 | "installer",
119 | "phpcbf",
120 | "phpcs",
121 | "plugin",
122 | "qa",
123 | "quality",
124 | "standard",
125 | "standards",
126 | "style guide",
127 | "stylecheck",
128 | "tests"
129 | ],
130 | "support": {
131 | "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues",
132 | "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer"
133 | },
134 | "time": "2022-02-04T12:51:07+00:00"
135 | },
136 | {
137 | "name": "fig-r/psr2r-sniffer",
138 | "version": "0.5.2",
139 | "source": {
140 | "type": "git",
141 | "url": "https://github.com/php-fig-rectified/psr2r-sniffer.git",
142 | "reference": "7eb462bcf19abcae122855a6d79cc8f768c77880"
143 | },
144 | "dist": {
145 | "type": "zip",
146 | "url": "https://api.github.com/repos/php-fig-rectified/psr2r-sniffer/zipball/7eb462bcf19abcae122855a6d79cc8f768c77880",
147 | "reference": "7eb462bcf19abcae122855a6d79cc8f768c77880",
148 | "shasum": ""
149 | },
150 | "require": {
151 | "php": ">=5.4.16",
152 | "squizlabs/php_codesniffer": "^3.0"
153 | },
154 | "bin": [
155 | "bin/tokenize",
156 | "bin/sniff"
157 | ],
158 | "type": "phpcodesniffer-standard",
159 | "autoload": {
160 | "psr-4": {
161 | "PSR2R\\": "PSR2R"
162 | }
163 | },
164 | "notification-url": "https://packagist.org/downloads/",
165 | "license": [
166 | "MIT"
167 | ],
168 | "authors": [
169 | {
170 | "name": "Mark Scherer",
171 | "homepage": "http://www.dereuromark.de",
172 | "role": "Contributor"
173 | }
174 | ],
175 | "description": "Code-Sniffer, Auto-Fixer and Tokenizer for PSR2-R",
176 | "keywords": [
177 | "codesniffer",
178 | "cs"
179 | ],
180 | "support": {
181 | "issues": "https://github.com/php-fig-rectified/psr2r-sniffer/issues",
182 | "source": "https://github.com/php-fig-rectified/psr2r-sniffer/tree/0.5.2"
183 | },
184 | "time": "2019-07-30T11:13:07+00:00"
185 | },
186 | {
187 | "name": "humanmade/coding-standards",
188 | "version": "v1.2.1",
189 | "source": {
190 | "type": "git",
191 | "url": "https://github.com/humanmade/coding-standards.git",
192 | "reference": "4b5aca25cb350f248f1797beed100edda9f32a0d"
193 | },
194 | "dist": {
195 | "type": "zip",
196 | "url": "https://api.github.com/repos/humanmade/coding-standards/zipball/4b5aca25cb350f248f1797beed100edda9f32a0d",
197 | "reference": "4b5aca25cb350f248f1797beed100edda9f32a0d",
198 | "shasum": ""
199 | },
200 | "require": {
201 | "automattic/vipwpcs": "2.0.0",
202 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
203 | "fig-r/psr2r-sniffer": "^0.5.0",
204 | "php": ">=7.1",
205 | "phpcompatibility/phpcompatibility-wp": "^2.0.0",
206 | "squizlabs/php_codesniffer": "~3.5",
207 | "wp-coding-standards/wpcs": "2.3.0"
208 | },
209 | "require-dev": {
210 | "phpunit/phpunit": "^7"
211 | },
212 | "type": "phpcodesniffer-standard",
213 | "notification-url": "https://packagist.org/downloads/",
214 | "license": [
215 | "GPL-2.0-or-later"
216 | ],
217 | "description": "Human Made Coding Standards",
218 | "support": {
219 | "issues": "https://github.com/humanmade/coding-standards/issues",
220 | "source": "https://github.com/humanmade/coding-standards/tree/v1.2.1"
221 | },
222 | "time": "2022-09-14T09:35:02+00:00"
223 | },
224 | {
225 | "name": "php-stubs/wordpress-stubs",
226 | "version": "v6.1.0",
227 | "source": {
228 | "type": "git",
229 | "url": "https://github.com/php-stubs/wordpress-stubs.git",
230 | "reference": "19e7966c8e70a99a4824b3e5d1526680a151f13b"
231 | },
232 | "dist": {
233 | "type": "zip",
234 | "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/19e7966c8e70a99a4824b3e5d1526680a151f13b",
235 | "reference": "19e7966c8e70a99a4824b3e5d1526680a151f13b",
236 | "shasum": ""
237 | },
238 | "replace": {
239 | "giacocorsiglia/wordpress-stubs": "*"
240 | },
241 | "require-dev": {
242 | "nikic/php-parser": "< 4.12.0",
243 | "php": "~7.3 || ~8.0",
244 | "php-stubs/generator": "^0.8.1",
245 | "phpdocumentor/reflection-docblock": "^5.3",
246 | "phpstan/phpstan": "^1.2"
247 | },
248 | "suggest": {
249 | "paragonie/sodium_compat": "Pure PHP implementation of libsodium",
250 | "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
251 | "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
252 | },
253 | "type": "library",
254 | "notification-url": "https://packagist.org/downloads/",
255 | "license": [
256 | "MIT"
257 | ],
258 | "description": "WordPress function and class declaration stubs for static analysis.",
259 | "homepage": "https://github.com/php-stubs/wordpress-stubs",
260 | "keywords": [
261 | "PHPStan",
262 | "static analysis",
263 | "wordpress"
264 | ],
265 | "support": {
266 | "issues": "https://github.com/php-stubs/wordpress-stubs/issues",
267 | "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.1.0"
268 | },
269 | "time": "2022-11-09T05:33:25+00:00"
270 | },
271 | {
272 | "name": "php-stubs/wp-cli-stubs",
273 | "version": "v2.7.0",
274 | "source": {
275 | "type": "git",
276 | "url": "https://github.com/php-stubs/wp-cli-stubs.git",
277 | "reference": "428544fc3696273bfbb4cffe4ac88f5fed428fc8"
278 | },
279 | "dist": {
280 | "type": "zip",
281 | "url": "https://api.github.com/repos/php-stubs/wp-cli-stubs/zipball/428544fc3696273bfbb4cffe4ac88f5fed428fc8",
282 | "reference": "428544fc3696273bfbb4cffe4ac88f5fed428fc8",
283 | "shasum": ""
284 | },
285 | "require": {
286 | "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0"
287 | },
288 | "require-dev": {
289 | "php": "~7.3 || ~8.0",
290 | "php-stubs/generator": "^0.8.0"
291 | },
292 | "suggest": {
293 | "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
294 | "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
295 | },
296 | "type": "library",
297 | "notification-url": "https://packagist.org/downloads/",
298 | "license": [
299 | "MIT"
300 | ],
301 | "description": "WP-CLI function and class declaration stubs for static analysis.",
302 | "homepage": "https://github.com/php-stubs/wp-cli-stubs",
303 | "keywords": [
304 | "PHPStan",
305 | "static analysis",
306 | "wordpress",
307 | "wp-cli"
308 | ],
309 | "support": {
310 | "issues": "https://github.com/php-stubs/wp-cli-stubs/issues",
311 | "source": "https://github.com/php-stubs/wp-cli-stubs/tree/v2.7.0"
312 | },
313 | "time": "2022-11-10T19:19:05+00:00"
314 | },
315 | {
316 | "name": "phpcompatibility/php-compatibility",
317 | "version": "9.3.5",
318 | "source": {
319 | "type": "git",
320 | "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
321 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
322 | },
323 | "dist": {
324 | "type": "zip",
325 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
326 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
327 | "shasum": ""
328 | },
329 | "require": {
330 | "php": ">=5.3",
331 | "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
332 | },
333 | "conflict": {
334 | "squizlabs/php_codesniffer": "2.6.2"
335 | },
336 | "require-dev": {
337 | "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
338 | },
339 | "suggest": {
340 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
341 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
342 | },
343 | "type": "phpcodesniffer-standard",
344 | "notification-url": "https://packagist.org/downloads/",
345 | "license": [
346 | "LGPL-3.0-or-later"
347 | ],
348 | "authors": [
349 | {
350 | "name": "Wim Godden",
351 | "homepage": "https://github.com/wimg",
352 | "role": "lead"
353 | },
354 | {
355 | "name": "Juliette Reinders Folmer",
356 | "homepage": "https://github.com/jrfnl",
357 | "role": "lead"
358 | },
359 | {
360 | "name": "Contributors",
361 | "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
362 | }
363 | ],
364 | "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
365 | "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
366 | "keywords": [
367 | "compatibility",
368 | "phpcs",
369 | "standards"
370 | ],
371 | "support": {
372 | "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
373 | "source": "https://github.com/PHPCompatibility/PHPCompatibility"
374 | },
375 | "time": "2019-12-27T09:44:58+00:00"
376 | },
377 | {
378 | "name": "phpcompatibility/phpcompatibility-paragonie",
379 | "version": "1.3.2",
380 | "source": {
381 | "type": "git",
382 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
383 | "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26"
384 | },
385 | "dist": {
386 | "type": "zip",
387 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/bba5a9dfec7fcfbd679cfaf611d86b4d3759da26",
388 | "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26",
389 | "shasum": ""
390 | },
391 | "require": {
392 | "phpcompatibility/php-compatibility": "^9.0"
393 | },
394 | "require-dev": {
395 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
396 | "paragonie/random_compat": "dev-master",
397 | "paragonie/sodium_compat": "dev-master"
398 | },
399 | "suggest": {
400 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
401 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
402 | },
403 | "type": "phpcodesniffer-standard",
404 | "notification-url": "https://packagist.org/downloads/",
405 | "license": [
406 | "LGPL-3.0-or-later"
407 | ],
408 | "authors": [
409 | {
410 | "name": "Wim Godden",
411 | "role": "lead"
412 | },
413 | {
414 | "name": "Juliette Reinders Folmer",
415 | "role": "lead"
416 | }
417 | ],
418 | "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
419 | "homepage": "http://phpcompatibility.com/",
420 | "keywords": [
421 | "compatibility",
422 | "paragonie",
423 | "phpcs",
424 | "polyfill",
425 | "standards",
426 | "static analysis"
427 | ],
428 | "support": {
429 | "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues",
430 | "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie"
431 | },
432 | "time": "2022-10-25T01:46:02+00:00"
433 | },
434 | {
435 | "name": "phpcompatibility/phpcompatibility-wp",
436 | "version": "2.1.4",
437 | "source": {
438 | "type": "git",
439 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
440 | "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5"
441 | },
442 | "dist": {
443 | "type": "zip",
444 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5",
445 | "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5",
446 | "shasum": ""
447 | },
448 | "require": {
449 | "phpcompatibility/php-compatibility": "^9.0",
450 | "phpcompatibility/phpcompatibility-paragonie": "^1.0"
451 | },
452 | "require-dev": {
453 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7"
454 | },
455 | "suggest": {
456 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
457 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
458 | },
459 | "type": "phpcodesniffer-standard",
460 | "notification-url": "https://packagist.org/downloads/",
461 | "license": [
462 | "LGPL-3.0-or-later"
463 | ],
464 | "authors": [
465 | {
466 | "name": "Wim Godden",
467 | "role": "lead"
468 | },
469 | {
470 | "name": "Juliette Reinders Folmer",
471 | "role": "lead"
472 | }
473 | ],
474 | "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
475 | "homepage": "http://phpcompatibility.com/",
476 | "keywords": [
477 | "compatibility",
478 | "phpcs",
479 | "standards",
480 | "static analysis",
481 | "wordpress"
482 | ],
483 | "support": {
484 | "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
485 | "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP"
486 | },
487 | "time": "2022-10-24T09:00:36+00:00"
488 | },
489 | {
490 | "name": "phpstan/phpstan",
491 | "version": "1.9.11",
492 | "source": {
493 | "type": "git",
494 | "url": "https://github.com/phpstan/phpstan.git",
495 | "reference": "60f3d68481eef216199eae7a2603cd5fe124d464"
496 | },
497 | "dist": {
498 | "type": "zip",
499 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/60f3d68481eef216199eae7a2603cd5fe124d464",
500 | "reference": "60f3d68481eef216199eae7a2603cd5fe124d464",
501 | "shasum": ""
502 | },
503 | "require": {
504 | "php": "^7.2|^8.0"
505 | },
506 | "conflict": {
507 | "phpstan/phpstan-shim": "*"
508 | },
509 | "bin": [
510 | "phpstan",
511 | "phpstan.phar"
512 | ],
513 | "type": "library",
514 | "autoload": {
515 | "files": [
516 | "bootstrap.php"
517 | ]
518 | },
519 | "notification-url": "https://packagist.org/downloads/",
520 | "license": [
521 | "MIT"
522 | ],
523 | "description": "PHPStan - PHP Static Analysis Tool",
524 | "keywords": [
525 | "dev",
526 | "static analysis"
527 | ],
528 | "support": {
529 | "issues": "https://github.com/phpstan/phpstan/issues",
530 | "source": "https://github.com/phpstan/phpstan/tree/1.9.11"
531 | },
532 | "funding": [
533 | {
534 | "url": "https://github.com/ondrejmirtes",
535 | "type": "github"
536 | },
537 | {
538 | "url": "https://github.com/phpstan",
539 | "type": "github"
540 | },
541 | {
542 | "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
543 | "type": "tidelift"
544 | }
545 | ],
546 | "time": "2023-01-12T14:04:13+00:00"
547 | },
548 | {
549 | "name": "squizlabs/php_codesniffer",
550 | "version": "3.7.1",
551 | "source": {
552 | "type": "git",
553 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
554 | "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619"
555 | },
556 | "dist": {
557 | "type": "zip",
558 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619",
559 | "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619",
560 | "shasum": ""
561 | },
562 | "require": {
563 | "ext-simplexml": "*",
564 | "ext-tokenizer": "*",
565 | "ext-xmlwriter": "*",
566 | "php": ">=5.4.0"
567 | },
568 | "require-dev": {
569 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
570 | },
571 | "bin": [
572 | "bin/phpcs",
573 | "bin/phpcbf"
574 | ],
575 | "type": "library",
576 | "extra": {
577 | "branch-alias": {
578 | "dev-master": "3.x-dev"
579 | }
580 | },
581 | "notification-url": "https://packagist.org/downloads/",
582 | "license": [
583 | "BSD-3-Clause"
584 | ],
585 | "authors": [
586 | {
587 | "name": "Greg Sherwood",
588 | "role": "lead"
589 | }
590 | ],
591 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
592 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
593 | "keywords": [
594 | "phpcs",
595 | "standards"
596 | ],
597 | "support": {
598 | "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
599 | "source": "https://github.com/squizlabs/PHP_CodeSniffer",
600 | "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
601 | },
602 | "time": "2022-06-18T07:21:10+00:00"
603 | },
604 | {
605 | "name": "symfony/polyfill-php73",
606 | "version": "v1.27.0",
607 | "source": {
608 | "type": "git",
609 | "url": "https://github.com/symfony/polyfill-php73.git",
610 | "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
611 | },
612 | "dist": {
613 | "type": "zip",
614 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
615 | "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
616 | "shasum": ""
617 | },
618 | "require": {
619 | "php": ">=7.1"
620 | },
621 | "type": "library",
622 | "extra": {
623 | "branch-alias": {
624 | "dev-main": "1.27-dev"
625 | },
626 | "thanks": {
627 | "name": "symfony/polyfill",
628 | "url": "https://github.com/symfony/polyfill"
629 | }
630 | },
631 | "autoload": {
632 | "files": [
633 | "bootstrap.php"
634 | ],
635 | "psr-4": {
636 | "Symfony\\Polyfill\\Php73\\": ""
637 | },
638 | "classmap": [
639 | "Resources/stubs"
640 | ]
641 | },
642 | "notification-url": "https://packagist.org/downloads/",
643 | "license": [
644 | "MIT"
645 | ],
646 | "authors": [
647 | {
648 | "name": "Nicolas Grekas",
649 | "email": "p@tchwork.com"
650 | },
651 | {
652 | "name": "Symfony Community",
653 | "homepage": "https://symfony.com/contributors"
654 | }
655 | ],
656 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
657 | "homepage": "https://symfony.com",
658 | "keywords": [
659 | "compatibility",
660 | "polyfill",
661 | "portable",
662 | "shim"
663 | ],
664 | "support": {
665 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
666 | },
667 | "funding": [
668 | {
669 | "url": "https://symfony.com/sponsor",
670 | "type": "custom"
671 | },
672 | {
673 | "url": "https://github.com/fabpot",
674 | "type": "github"
675 | },
676 | {
677 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
678 | "type": "tidelift"
679 | }
680 | ],
681 | "time": "2022-11-03T14:55:06+00:00"
682 | },
683 | {
684 | "name": "szepeviktor/phpstan-wordpress",
685 | "version": "v1.1.6",
686 | "source": {
687 | "type": "git",
688 | "url": "https://github.com/szepeviktor/phpstan-wordpress.git",
689 | "reference": "27784541f184a1ea3b6656fc8a882bb9adf45fc2"
690 | },
691 | "dist": {
692 | "type": "zip",
693 | "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/27784541f184a1ea3b6656fc8a882bb9adf45fc2",
694 | "reference": "27784541f184a1ea3b6656fc8a882bb9adf45fc2",
695 | "shasum": ""
696 | },
697 | "require": {
698 | "php": "^7.2 || ^8.0",
699 | "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0",
700 | "phpstan/phpstan": "^1.8.7",
701 | "symfony/polyfill-php73": "^1.12.0"
702 | },
703 | "require-dev": {
704 | "composer/composer": "^2.1.14",
705 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
706 | "php-parallel-lint/php-parallel-lint": "^1.1",
707 | "phpstan/phpstan-strict-rules": "^1.2",
708 | "phpunit/phpunit": "^8.0 || ^9.0",
709 | "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^0.6.1"
710 | },
711 | "type": "phpstan-extension",
712 | "extra": {
713 | "phpstan": {
714 | "includes": [
715 | "extension.neon"
716 | ]
717 | }
718 | },
719 | "autoload": {
720 | "psr-4": {
721 | "SzepeViktor\\PHPStan\\WordPress\\": "src/"
722 | }
723 | },
724 | "notification-url": "https://packagist.org/downloads/",
725 | "license": [
726 | "MIT"
727 | ],
728 | "description": "WordPress extensions for PHPStan",
729 | "keywords": [
730 | "PHPStan",
731 | "code analyse",
732 | "code analysis",
733 | "static analysis",
734 | "wordpress"
735 | ],
736 | "support": {
737 | "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues",
738 | "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v1.1.6"
739 | },
740 | "funding": [
741 | {
742 | "url": "https://www.paypal.me/szepeviktor",
743 | "type": "custom"
744 | },
745 | {
746 | "url": "https://github.com/szepeviktor",
747 | "type": "github"
748 | }
749 | ],
750 | "time": "2022-12-01T14:56:51+00:00"
751 | },
752 | {
753 | "name": "wp-coding-standards/wpcs",
754 | "version": "2.3.0",
755 | "source": {
756 | "type": "git",
757 | "url": "https://github.com/WordPress/WordPress-Coding-Standards.git",
758 | "reference": "7da1894633f168fe244afc6de00d141f27517b62"
759 | },
760 | "dist": {
761 | "type": "zip",
762 | "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62",
763 | "reference": "7da1894633f168fe244afc6de00d141f27517b62",
764 | "shasum": ""
765 | },
766 | "require": {
767 | "php": ">=5.4",
768 | "squizlabs/php_codesniffer": "^3.3.1"
769 | },
770 | "require-dev": {
771 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6",
772 | "phpcompatibility/php-compatibility": "^9.0",
773 | "phpcsstandards/phpcsdevtools": "^1.0",
774 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
775 | },
776 | "suggest": {
777 | "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically."
778 | },
779 | "type": "phpcodesniffer-standard",
780 | "notification-url": "https://packagist.org/downloads/",
781 | "license": [
782 | "MIT"
783 | ],
784 | "authors": [
785 | {
786 | "name": "Contributors",
787 | "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors"
788 | }
789 | ],
790 | "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions",
791 | "keywords": [
792 | "phpcs",
793 | "standards",
794 | "wordpress"
795 | ],
796 | "support": {
797 | "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues",
798 | "source": "https://github.com/WordPress/WordPress-Coding-Standards",
799 | "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki"
800 | },
801 | "time": "2020-05-13T23:57:56+00:00"
802 | }
803 | ],
804 | "aliases": [],
805 | "minimum-stability": "stable",
806 | "stability-flags": [],
807 | "prefer-stable": false,
808 | "prefer-lowest": false,
809 | "platform": [],
810 | "platform-dev": [],
811 | "plugin-api-version": "2.3.0"
812 | }
813 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sync-mastodon",
3 | "version": "0.1.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.16.7",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
10 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.16.7"
14 | }
15 | },
16 | "@babel/helper-validator-identifier": {
17 | "version": "7.16.7",
18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
19 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
20 | "dev": true
21 | },
22 | "@babel/highlight": {
23 | "version": "7.17.9",
24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
25 | "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
26 | "dev": true,
27 | "requires": {
28 | "@babel/helper-validator-identifier": "^7.16.7",
29 | "chalk": "^2.0.0",
30 | "js-tokens": "^4.0.0"
31 | }
32 | },
33 | "abbrev": {
34 | "version": "1.1.1",
35 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
36 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
37 | "dev": true
38 | },
39 | "acorn": {
40 | "version": "7.4.1",
41 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
42 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
43 | "dev": true
44 | },
45 | "acorn-jsx": {
46 | "version": "5.3.2",
47 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
48 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
49 | "dev": true
50 | },
51 | "ajv": {
52 | "version": "6.12.6",
53 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
54 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
55 | "dev": true,
56 | "requires": {
57 | "fast-deep-equal": "^3.1.1",
58 | "fast-json-stable-stringify": "^2.0.0",
59 | "json-schema-traverse": "^0.4.1",
60 | "uri-js": "^4.2.2"
61 | }
62 | },
63 | "ansi-escapes": {
64 | "version": "4.3.2",
65 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
66 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
67 | "dev": true,
68 | "requires": {
69 | "type-fest": "^0.21.3"
70 | },
71 | "dependencies": {
72 | "type-fest": {
73 | "version": "0.21.3",
74 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
75 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
76 | "dev": true
77 | }
78 | }
79 | },
80 | "ansi-regex": {
81 | "version": "4.1.1",
82 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
83 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
84 | "dev": true
85 | },
86 | "ansi-styles": {
87 | "version": "3.2.1",
88 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
89 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
90 | "dev": true,
91 | "requires": {
92 | "color-convert": "^1.9.0"
93 | }
94 | },
95 | "argparse": {
96 | "version": "1.0.10",
97 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
98 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
99 | "dev": true,
100 | "requires": {
101 | "sprintf-js": "~1.0.2"
102 | }
103 | },
104 | "array-each": {
105 | "version": "1.0.1",
106 | "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
107 | "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==",
108 | "dev": true
109 | },
110 | "array-includes": {
111 | "version": "3.1.5",
112 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
113 | "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
114 | "dev": true,
115 | "requires": {
116 | "call-bind": "^1.0.2",
117 | "define-properties": "^1.1.4",
118 | "es-abstract": "^1.19.5",
119 | "get-intrinsic": "^1.1.1",
120 | "is-string": "^1.0.7"
121 | }
122 | },
123 | "array-slice": {
124 | "version": "1.1.0",
125 | "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
126 | "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
127 | "dev": true
128 | },
129 | "array.prototype.flatmap": {
130 | "version": "1.3.0",
131 | "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
132 | "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
133 | "dev": true,
134 | "requires": {
135 | "call-bind": "^1.0.2",
136 | "define-properties": "^1.1.3",
137 | "es-abstract": "^1.19.2",
138 | "es-shim-unscopables": "^1.0.0"
139 | }
140 | },
141 | "astral-regex": {
142 | "version": "1.0.0",
143 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
144 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
145 | "dev": true
146 | },
147 | "async": {
148 | "version": "3.2.4",
149 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
150 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
151 | "dev": true
152 | },
153 | "balanced-match": {
154 | "version": "1.0.2",
155 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
156 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
157 | "dev": true
158 | },
159 | "bluebird": {
160 | "version": "3.7.2",
161 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
162 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
163 | "dev": true
164 | },
165 | "brace-expansion": {
166 | "version": "1.1.11",
167 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
168 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
169 | "dev": true,
170 | "requires": {
171 | "balanced-match": "^1.0.0",
172 | "concat-map": "0.0.1"
173 | }
174 | },
175 | "braces": {
176 | "version": "3.0.2",
177 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
178 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
179 | "dev": true,
180 | "requires": {
181 | "fill-range": "^7.0.1"
182 | }
183 | },
184 | "call-bind": {
185 | "version": "1.0.2",
186 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
187 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
188 | "dev": true,
189 | "requires": {
190 | "function-bind": "^1.1.1",
191 | "get-intrinsic": "^1.0.2"
192 | }
193 | },
194 | "callsites": {
195 | "version": "3.1.0",
196 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
197 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
198 | "dev": true
199 | },
200 | "chalk": {
201 | "version": "2.4.2",
202 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
203 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
204 | "dev": true,
205 | "requires": {
206 | "ansi-styles": "^3.2.1",
207 | "escape-string-regexp": "^1.0.5",
208 | "supports-color": "^5.3.0"
209 | }
210 | },
211 | "chardet": {
212 | "version": "0.7.0",
213 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
214 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
215 | "dev": true
216 | },
217 | "cli-cursor": {
218 | "version": "3.1.0",
219 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
220 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
221 | "dev": true,
222 | "requires": {
223 | "restore-cursor": "^3.1.0"
224 | }
225 | },
226 | "cli-width": {
227 | "version": "3.0.0",
228 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
229 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
230 | "dev": true
231 | },
232 | "color-convert": {
233 | "version": "1.9.3",
234 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
235 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
236 | "dev": true,
237 | "requires": {
238 | "color-name": "1.1.3"
239 | }
240 | },
241 | "color-name": {
242 | "version": "1.1.3",
243 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
244 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
245 | "dev": true
246 | },
247 | "colors": {
248 | "version": "1.1.2",
249 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
250 | "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==",
251 | "dev": true
252 | },
253 | "concat-map": {
254 | "version": "0.0.1",
255 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
256 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
257 | "dev": true
258 | },
259 | "cross-spawn": {
260 | "version": "6.0.5",
261 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
262 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
263 | "dev": true,
264 | "requires": {
265 | "nice-try": "^1.0.4",
266 | "path-key": "^2.0.1",
267 | "semver": "^5.5.0",
268 | "shebang-command": "^1.2.0",
269 | "which": "^1.2.9"
270 | },
271 | "dependencies": {
272 | "semver": {
273 | "version": "5.7.1",
274 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
275 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
276 | "dev": true
277 | }
278 | }
279 | },
280 | "dateformat": {
281 | "version": "3.0.3",
282 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
283 | "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
284 | "dev": true
285 | },
286 | "debug": {
287 | "version": "4.3.4",
288 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
289 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
290 | "dev": true,
291 | "requires": {
292 | "ms": "2.1.2"
293 | }
294 | },
295 | "deep-is": {
296 | "version": "0.1.4",
297 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
298 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
299 | "dev": true
300 | },
301 | "define-properties": {
302 | "version": "1.1.4",
303 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
304 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
305 | "dev": true,
306 | "requires": {
307 | "has-property-descriptors": "^1.0.0",
308 | "object-keys": "^1.1.1"
309 | }
310 | },
311 | "detect-file": {
312 | "version": "1.0.0",
313 | "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
314 | "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
315 | "dev": true
316 | },
317 | "doctrine": {
318 | "version": "3.0.0",
319 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
320 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
321 | "dev": true,
322 | "requires": {
323 | "esutils": "^2.0.2"
324 | }
325 | },
326 | "emoji-regex": {
327 | "version": "8.0.0",
328 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
329 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
330 | "dev": true
331 | },
332 | "encoding": {
333 | "version": "0.1.13",
334 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
335 | "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
336 | "dev": true,
337 | "requires": {
338 | "iconv-lite": "^0.6.2"
339 | },
340 | "dependencies": {
341 | "iconv-lite": {
342 | "version": "0.6.3",
343 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
344 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
345 | "dev": true,
346 | "requires": {
347 | "safer-buffer": ">= 2.1.2 < 3.0.0"
348 | }
349 | }
350 | }
351 | },
352 | "es-abstract": {
353 | "version": "1.20.1",
354 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
355 | "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
356 | "dev": true,
357 | "requires": {
358 | "call-bind": "^1.0.2",
359 | "es-to-primitive": "^1.2.1",
360 | "function-bind": "^1.1.1",
361 | "function.prototype.name": "^1.1.5",
362 | "get-intrinsic": "^1.1.1",
363 | "get-symbol-description": "^1.0.0",
364 | "has": "^1.0.3",
365 | "has-property-descriptors": "^1.0.0",
366 | "has-symbols": "^1.0.3",
367 | "internal-slot": "^1.0.3",
368 | "is-callable": "^1.2.4",
369 | "is-negative-zero": "^2.0.2",
370 | "is-regex": "^1.1.4",
371 | "is-shared-array-buffer": "^1.0.2",
372 | "is-string": "^1.0.7",
373 | "is-weakref": "^1.0.2",
374 | "object-inspect": "^1.12.0",
375 | "object-keys": "^1.1.1",
376 | "object.assign": "^4.1.2",
377 | "regexp.prototype.flags": "^1.4.3",
378 | "string.prototype.trimend": "^1.0.5",
379 | "string.prototype.trimstart": "^1.0.5",
380 | "unbox-primitive": "^1.0.2"
381 | }
382 | },
383 | "es-shim-unscopables": {
384 | "version": "1.0.0",
385 | "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
386 | "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
387 | "dev": true,
388 | "requires": {
389 | "has": "^1.0.3"
390 | }
391 | },
392 | "es-to-primitive": {
393 | "version": "1.2.1",
394 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
395 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
396 | "dev": true,
397 | "requires": {
398 | "is-callable": "^1.1.4",
399 | "is-date-object": "^1.0.1",
400 | "is-symbol": "^1.0.2"
401 | }
402 | },
403 | "escape-string-regexp": {
404 | "version": "1.0.5",
405 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
406 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
407 | "dev": true
408 | },
409 | "eslint": {
410 | "version": "6.8.0",
411 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
412 | "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
413 | "dev": true,
414 | "requires": {
415 | "@babel/code-frame": "^7.0.0",
416 | "ajv": "^6.10.0",
417 | "chalk": "^2.1.0",
418 | "cross-spawn": "^6.0.5",
419 | "debug": "^4.0.1",
420 | "doctrine": "^3.0.0",
421 | "eslint-scope": "^5.0.0",
422 | "eslint-utils": "^1.4.3",
423 | "eslint-visitor-keys": "^1.1.0",
424 | "espree": "^6.1.2",
425 | "esquery": "^1.0.1",
426 | "esutils": "^2.0.2",
427 | "file-entry-cache": "^5.0.1",
428 | "functional-red-black-tree": "^1.0.1",
429 | "glob-parent": "^5.0.0",
430 | "globals": "^12.1.0",
431 | "ignore": "^4.0.6",
432 | "import-fresh": "^3.0.0",
433 | "imurmurhash": "^0.1.4",
434 | "inquirer": "^7.0.0",
435 | "is-glob": "^4.0.0",
436 | "js-yaml": "^3.13.1",
437 | "json-stable-stringify-without-jsonify": "^1.0.1",
438 | "levn": "^0.3.0",
439 | "lodash": "^4.17.14",
440 | "minimatch": "^3.0.4",
441 | "mkdirp": "^0.5.1",
442 | "natural-compare": "^1.4.0",
443 | "optionator": "^0.8.3",
444 | "progress": "^2.0.0",
445 | "regexpp": "^2.0.1",
446 | "semver": "^6.1.2",
447 | "strip-ansi": "^5.2.0",
448 | "strip-json-comments": "^3.0.1",
449 | "table": "^5.2.3",
450 | "text-table": "^0.2.0",
451 | "v8-compile-cache": "^2.0.3"
452 | }
453 | },
454 | "eslint-plugin-react": {
455 | "version": "7.30.1",
456 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz",
457 | "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==",
458 | "dev": true,
459 | "requires": {
460 | "array-includes": "^3.1.5",
461 | "array.prototype.flatmap": "^1.3.0",
462 | "doctrine": "^2.1.0",
463 | "estraverse": "^5.3.0",
464 | "jsx-ast-utils": "^2.4.1 || ^3.0.0",
465 | "minimatch": "^3.1.2",
466 | "object.entries": "^1.1.5",
467 | "object.fromentries": "^2.0.5",
468 | "object.hasown": "^1.1.1",
469 | "object.values": "^1.1.5",
470 | "prop-types": "^15.8.1",
471 | "resolve": "^2.0.0-next.3",
472 | "semver": "^6.3.0",
473 | "string.prototype.matchall": "^4.0.7"
474 | },
475 | "dependencies": {
476 | "doctrine": {
477 | "version": "2.1.0",
478 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
479 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
480 | "dev": true,
481 | "requires": {
482 | "esutils": "^2.0.2"
483 | }
484 | }
485 | }
486 | },
487 | "eslint-scope": {
488 | "version": "5.1.1",
489 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
490 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
491 | "dev": true,
492 | "requires": {
493 | "esrecurse": "^4.3.0",
494 | "estraverse": "^4.1.1"
495 | },
496 | "dependencies": {
497 | "estraverse": {
498 | "version": "4.3.0",
499 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
500 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
501 | "dev": true
502 | }
503 | }
504 | },
505 | "eslint-utils": {
506 | "version": "1.4.3",
507 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
508 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
509 | "dev": true,
510 | "requires": {
511 | "eslint-visitor-keys": "^1.1.0"
512 | }
513 | },
514 | "eslint-visitor-keys": {
515 | "version": "1.3.0",
516 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
517 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
518 | "dev": true
519 | },
520 | "espree": {
521 | "version": "6.2.1",
522 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
523 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
524 | "dev": true,
525 | "requires": {
526 | "acorn": "^7.1.1",
527 | "acorn-jsx": "^5.2.0",
528 | "eslint-visitor-keys": "^1.1.0"
529 | }
530 | },
531 | "esprima": {
532 | "version": "4.0.1",
533 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
534 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
535 | "dev": true
536 | },
537 | "esquery": {
538 | "version": "1.4.0",
539 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
540 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
541 | "dev": true,
542 | "requires": {
543 | "estraverse": "^5.1.0"
544 | }
545 | },
546 | "esrecurse": {
547 | "version": "4.3.0",
548 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
549 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
550 | "dev": true,
551 | "requires": {
552 | "estraverse": "^5.2.0"
553 | }
554 | },
555 | "estraverse": {
556 | "version": "5.3.0",
557 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
558 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
559 | "dev": true
560 | },
561 | "esutils": {
562 | "version": "2.0.3",
563 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
564 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
565 | "dev": true
566 | },
567 | "eventemitter2": {
568 | "version": "0.4.14",
569 | "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
570 | "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==",
571 | "dev": true
572 | },
573 | "exit": {
574 | "version": "0.1.2",
575 | "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
576 | "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
577 | "dev": true
578 | },
579 | "expand-tilde": {
580 | "version": "2.0.2",
581 | "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
582 | "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
583 | "dev": true,
584 | "requires": {
585 | "homedir-polyfill": "^1.0.1"
586 | }
587 | },
588 | "extend": {
589 | "version": "3.0.2",
590 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
591 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
592 | "dev": true
593 | },
594 | "external-editor": {
595 | "version": "3.1.0",
596 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
597 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
598 | "dev": true,
599 | "requires": {
600 | "chardet": "^0.7.0",
601 | "iconv-lite": "^0.4.24",
602 | "tmp": "^0.0.33"
603 | }
604 | },
605 | "fast-deep-equal": {
606 | "version": "3.1.3",
607 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
608 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
609 | "dev": true
610 | },
611 | "fast-json-stable-stringify": {
612 | "version": "2.1.0",
613 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
614 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
615 | "dev": true
616 | },
617 | "fast-levenshtein": {
618 | "version": "2.0.6",
619 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
620 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
621 | "dev": true
622 | },
623 | "figures": {
624 | "version": "3.2.0",
625 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
626 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
627 | "dev": true,
628 | "requires": {
629 | "escape-string-regexp": "^1.0.5"
630 | }
631 | },
632 | "file-entry-cache": {
633 | "version": "5.0.1",
634 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
635 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
636 | "dev": true,
637 | "requires": {
638 | "flat-cache": "^2.0.1"
639 | }
640 | },
641 | "fill-range": {
642 | "version": "7.0.1",
643 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
644 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
645 | "dev": true,
646 | "requires": {
647 | "to-regex-range": "^5.0.1"
648 | }
649 | },
650 | "findup-sync": {
651 | "version": "0.3.0",
652 | "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
653 | "integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==",
654 | "dev": true,
655 | "requires": {
656 | "glob": "~5.0.0"
657 | },
658 | "dependencies": {
659 | "glob": {
660 | "version": "5.0.15",
661 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
662 | "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
663 | "dev": true,
664 | "requires": {
665 | "inflight": "^1.0.4",
666 | "inherits": "2",
667 | "minimatch": "2 || 3",
668 | "once": "^1.3.0",
669 | "path-is-absolute": "^1.0.0"
670 | }
671 | }
672 | }
673 | },
674 | "fined": {
675 | "version": "1.2.0",
676 | "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
677 | "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
678 | "dev": true,
679 | "requires": {
680 | "expand-tilde": "^2.0.2",
681 | "is-plain-object": "^2.0.3",
682 | "object.defaults": "^1.1.0",
683 | "object.pick": "^1.2.0",
684 | "parse-filepath": "^1.0.1"
685 | }
686 | },
687 | "flagged-respawn": {
688 | "version": "1.0.1",
689 | "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
690 | "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
691 | "dev": true
692 | },
693 | "flat-cache": {
694 | "version": "2.0.1",
695 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
696 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
697 | "dev": true,
698 | "requires": {
699 | "flatted": "^2.0.0",
700 | "rimraf": "2.6.3",
701 | "write": "1.0.3"
702 | }
703 | },
704 | "flatted": {
705 | "version": "2.0.2",
706 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
707 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
708 | "dev": true
709 | },
710 | "for-in": {
711 | "version": "1.0.2",
712 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
713 | "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
714 | "dev": true
715 | },
716 | "for-own": {
717 | "version": "1.0.0",
718 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
719 | "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==",
720 | "dev": true,
721 | "requires": {
722 | "for-in": "^1.0.1"
723 | }
724 | },
725 | "fs.realpath": {
726 | "version": "1.0.0",
727 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
728 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
729 | "dev": true
730 | },
731 | "function-bind": {
732 | "version": "1.1.1",
733 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
734 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
735 | "dev": true
736 | },
737 | "function.prototype.name": {
738 | "version": "1.1.5",
739 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
740 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
741 | "dev": true,
742 | "requires": {
743 | "call-bind": "^1.0.2",
744 | "define-properties": "^1.1.3",
745 | "es-abstract": "^1.19.0",
746 | "functions-have-names": "^1.2.2"
747 | }
748 | },
749 | "functional-red-black-tree": {
750 | "version": "1.0.1",
751 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
752 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
753 | "dev": true
754 | },
755 | "functions-have-names": {
756 | "version": "1.2.3",
757 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
758 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
759 | "dev": true
760 | },
761 | "get-intrinsic": {
762 | "version": "1.1.2",
763 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
764 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
765 | "dev": true,
766 | "requires": {
767 | "function-bind": "^1.1.1",
768 | "has": "^1.0.3",
769 | "has-symbols": "^1.0.3"
770 | }
771 | },
772 | "get-symbol-description": {
773 | "version": "1.0.0",
774 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
775 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
776 | "dev": true,
777 | "requires": {
778 | "call-bind": "^1.0.2",
779 | "get-intrinsic": "^1.1.1"
780 | }
781 | },
782 | "getobject": {
783 | "version": "1.0.2",
784 | "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
785 | "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==",
786 | "dev": true
787 | },
788 | "gettext-parser": {
789 | "version": "3.1.1",
790 | "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-3.1.1.tgz",
791 | "integrity": "sha512-vNhWcqXEtZPs5Ft1ReA34g7ByWotpcOIeJvXVy2jF3/G2U9v6W0wG4Z4hXzcU8R//jArqkgHcVCGgGqa4vxVlQ==",
792 | "dev": true,
793 | "requires": {
794 | "encoding": "^0.1.12",
795 | "readable-stream": "^3.2.0",
796 | "safe-buffer": "^5.1.2"
797 | }
798 | },
799 | "glob": {
800 | "version": "7.1.7",
801 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
802 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
803 | "dev": true,
804 | "requires": {
805 | "fs.realpath": "^1.0.0",
806 | "inflight": "^1.0.4",
807 | "inherits": "2",
808 | "minimatch": "^3.0.4",
809 | "once": "^1.3.0",
810 | "path-is-absolute": "^1.0.0"
811 | }
812 | },
813 | "glob-parent": {
814 | "version": "5.1.2",
815 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
816 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
817 | "dev": true,
818 | "requires": {
819 | "is-glob": "^4.0.1"
820 | }
821 | },
822 | "global-modules": {
823 | "version": "1.0.0",
824 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
825 | "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
826 | "dev": true,
827 | "requires": {
828 | "global-prefix": "^1.0.1",
829 | "is-windows": "^1.0.1",
830 | "resolve-dir": "^1.0.0"
831 | }
832 | },
833 | "global-prefix": {
834 | "version": "1.0.2",
835 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
836 | "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
837 | "dev": true,
838 | "requires": {
839 | "expand-tilde": "^2.0.2",
840 | "homedir-polyfill": "^1.0.1",
841 | "ini": "^1.3.4",
842 | "is-windows": "^1.0.1",
843 | "which": "^1.2.14"
844 | }
845 | },
846 | "globals": {
847 | "version": "12.4.0",
848 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
849 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
850 | "dev": true,
851 | "requires": {
852 | "type-fest": "^0.8.1"
853 | }
854 | },
855 | "grunt": {
856 | "version": "1.5.3",
857 | "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
858 | "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
859 | "dev": true,
860 | "requires": {
861 | "dateformat": "~3.0.3",
862 | "eventemitter2": "~0.4.13",
863 | "exit": "~0.1.2",
864 | "findup-sync": "~0.3.0",
865 | "glob": "~7.1.6",
866 | "grunt-cli": "~1.4.3",
867 | "grunt-known-options": "~2.0.0",
868 | "grunt-legacy-log": "~3.0.0",
869 | "grunt-legacy-util": "~2.0.1",
870 | "iconv-lite": "~0.4.13",
871 | "js-yaml": "~3.14.0",
872 | "minimatch": "~3.0.4",
873 | "mkdirp": "~1.0.4",
874 | "nopt": "~3.0.6",
875 | "rimraf": "~3.0.2"
876 | },
877 | "dependencies": {
878 | "grunt-cli": {
879 | "version": "1.4.3",
880 | "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz",
881 | "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==",
882 | "dev": true,
883 | "requires": {
884 | "grunt-known-options": "~2.0.0",
885 | "interpret": "~1.1.0",
886 | "liftup": "~3.0.1",
887 | "nopt": "~4.0.1",
888 | "v8flags": "~3.2.0"
889 | },
890 | "dependencies": {
891 | "nopt": {
892 | "version": "4.0.3",
893 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
894 | "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
895 | "dev": true,
896 | "requires": {
897 | "abbrev": "1",
898 | "osenv": "^0.1.4"
899 | }
900 | }
901 | }
902 | },
903 | "minimatch": {
904 | "version": "3.0.8",
905 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
906 | "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
907 | "dev": true,
908 | "requires": {
909 | "brace-expansion": "^1.1.7"
910 | }
911 | },
912 | "mkdirp": {
913 | "version": "1.0.4",
914 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
915 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
916 | "dev": true
917 | },
918 | "rimraf": {
919 | "version": "3.0.2",
920 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
921 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
922 | "dev": true,
923 | "requires": {
924 | "glob": "^7.1.3"
925 | }
926 | }
927 | }
928 | },
929 | "grunt-known-options": {
930 | "version": "2.0.0",
931 | "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz",
932 | "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==",
933 | "dev": true
934 | },
935 | "grunt-legacy-log": {
936 | "version": "3.0.0",
937 | "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz",
938 | "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==",
939 | "dev": true,
940 | "requires": {
941 | "colors": "~1.1.2",
942 | "grunt-legacy-log-utils": "~2.1.0",
943 | "hooker": "~0.2.3",
944 | "lodash": "~4.17.19"
945 | }
946 | },
947 | "grunt-legacy-log-utils": {
948 | "version": "2.1.0",
949 | "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz",
950 | "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==",
951 | "dev": true,
952 | "requires": {
953 | "chalk": "~4.1.0",
954 | "lodash": "~4.17.19"
955 | },
956 | "dependencies": {
957 | "ansi-styles": {
958 | "version": "4.3.0",
959 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
960 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
961 | "dev": true,
962 | "requires": {
963 | "color-convert": "^2.0.1"
964 | }
965 | },
966 | "chalk": {
967 | "version": "4.1.2",
968 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
969 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
970 | "dev": true,
971 | "requires": {
972 | "ansi-styles": "^4.1.0",
973 | "supports-color": "^7.1.0"
974 | }
975 | },
976 | "color-convert": {
977 | "version": "2.0.1",
978 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
979 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
980 | "dev": true,
981 | "requires": {
982 | "color-name": "~1.1.4"
983 | }
984 | },
985 | "color-name": {
986 | "version": "1.1.4",
987 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
988 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
989 | "dev": true
990 | },
991 | "has-flag": {
992 | "version": "4.0.0",
993 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
994 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
995 | "dev": true
996 | },
997 | "supports-color": {
998 | "version": "7.2.0",
999 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1000 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1001 | "dev": true,
1002 | "requires": {
1003 | "has-flag": "^4.0.0"
1004 | }
1005 | }
1006 | }
1007 | },
1008 | "grunt-legacy-util": {
1009 | "version": "2.0.1",
1010 | "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz",
1011 | "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==",
1012 | "dev": true,
1013 | "requires": {
1014 | "async": "~3.2.0",
1015 | "exit": "~0.1.2",
1016 | "getobject": "~1.0.0",
1017 | "hooker": "~0.2.3",
1018 | "lodash": "~4.17.21",
1019 | "underscore.string": "~3.3.5",
1020 | "which": "~2.0.2"
1021 | },
1022 | "dependencies": {
1023 | "which": {
1024 | "version": "2.0.2",
1025 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1026 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1027 | "dev": true,
1028 | "requires": {
1029 | "isexe": "^2.0.0"
1030 | }
1031 | }
1032 | }
1033 | },
1034 | "grunt-wp-i18n": {
1035 | "version": "1.0.3",
1036 | "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-1.0.3.tgz",
1037 | "integrity": "sha512-CJNbEKeBeOSAPeaJ9B8iCgSwtaG63UR9/uT46a4OsIqnFhOJpeAi138JTlvjfIbnDVoBrzvdrKJe1svveLjUtA==",
1038 | "dev": true,
1039 | "requires": {
1040 | "grunt": "^1.0.3",
1041 | "node-wp-i18n": "^1.2.2"
1042 | }
1043 | },
1044 | "grunt-wp-readme-to-markdown": {
1045 | "version": "2.0.1",
1046 | "resolved": "https://registry.npmjs.org/grunt-wp-readme-to-markdown/-/grunt-wp-readme-to-markdown-2.0.1.tgz",
1047 | "integrity": "sha1-QGzV6YmIWA3B0W6AXE4uYJJWhVI=",
1048 | "dev": true
1049 | },
1050 | "has": {
1051 | "version": "1.0.3",
1052 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1053 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1054 | "dev": true,
1055 | "requires": {
1056 | "function-bind": "^1.1.1"
1057 | }
1058 | },
1059 | "has-bigints": {
1060 | "version": "1.0.2",
1061 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
1062 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
1063 | "dev": true
1064 | },
1065 | "has-flag": {
1066 | "version": "3.0.0",
1067 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1068 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1069 | "dev": true
1070 | },
1071 | "has-property-descriptors": {
1072 | "version": "1.0.0",
1073 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
1074 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
1075 | "dev": true,
1076 | "requires": {
1077 | "get-intrinsic": "^1.1.1"
1078 | }
1079 | },
1080 | "has-symbols": {
1081 | "version": "1.0.3",
1082 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1083 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
1084 | "dev": true
1085 | },
1086 | "has-tostringtag": {
1087 | "version": "1.0.0",
1088 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
1089 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
1090 | "dev": true,
1091 | "requires": {
1092 | "has-symbols": "^1.0.2"
1093 | }
1094 | },
1095 | "homedir-polyfill": {
1096 | "version": "1.0.3",
1097 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
1098 | "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
1099 | "dev": true,
1100 | "requires": {
1101 | "parse-passwd": "^1.0.0"
1102 | }
1103 | },
1104 | "hooker": {
1105 | "version": "0.2.3",
1106 | "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
1107 | "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==",
1108 | "dev": true
1109 | },
1110 | "iconv-lite": {
1111 | "version": "0.4.24",
1112 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1113 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1114 | "dev": true,
1115 | "requires": {
1116 | "safer-buffer": ">= 2.1.2 < 3"
1117 | }
1118 | },
1119 | "ignore": {
1120 | "version": "4.0.6",
1121 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
1122 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
1123 | "dev": true
1124 | },
1125 | "import-fresh": {
1126 | "version": "3.3.0",
1127 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1128 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1129 | "dev": true,
1130 | "requires": {
1131 | "parent-module": "^1.0.0",
1132 | "resolve-from": "^4.0.0"
1133 | }
1134 | },
1135 | "imurmurhash": {
1136 | "version": "0.1.4",
1137 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1138 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1139 | "dev": true
1140 | },
1141 | "inflight": {
1142 | "version": "1.0.6",
1143 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1144 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1145 | "dev": true,
1146 | "requires": {
1147 | "once": "^1.3.0",
1148 | "wrappy": "1"
1149 | }
1150 | },
1151 | "inherits": {
1152 | "version": "2.0.4",
1153 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1154 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1155 | "dev": true
1156 | },
1157 | "ini": {
1158 | "version": "1.3.8",
1159 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
1160 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
1161 | "dev": true
1162 | },
1163 | "inquirer": {
1164 | "version": "7.3.3",
1165 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
1166 | "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
1167 | "dev": true,
1168 | "requires": {
1169 | "ansi-escapes": "^4.2.1",
1170 | "chalk": "^4.1.0",
1171 | "cli-cursor": "^3.1.0",
1172 | "cli-width": "^3.0.0",
1173 | "external-editor": "^3.0.3",
1174 | "figures": "^3.0.0",
1175 | "lodash": "^4.17.19",
1176 | "mute-stream": "0.0.8",
1177 | "run-async": "^2.4.0",
1178 | "rxjs": "^6.6.0",
1179 | "string-width": "^4.1.0",
1180 | "strip-ansi": "^6.0.0",
1181 | "through": "^2.3.6"
1182 | },
1183 | "dependencies": {
1184 | "ansi-regex": {
1185 | "version": "5.0.1",
1186 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1187 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1188 | "dev": true
1189 | },
1190 | "ansi-styles": {
1191 | "version": "4.3.0",
1192 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1193 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1194 | "dev": true,
1195 | "requires": {
1196 | "color-convert": "^2.0.1"
1197 | }
1198 | },
1199 | "chalk": {
1200 | "version": "4.1.2",
1201 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1202 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1203 | "dev": true,
1204 | "requires": {
1205 | "ansi-styles": "^4.1.0",
1206 | "supports-color": "^7.1.0"
1207 | }
1208 | },
1209 | "color-convert": {
1210 | "version": "2.0.1",
1211 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1212 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1213 | "dev": true,
1214 | "requires": {
1215 | "color-name": "~1.1.4"
1216 | }
1217 | },
1218 | "color-name": {
1219 | "version": "1.1.4",
1220 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1221 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1222 | "dev": true
1223 | },
1224 | "has-flag": {
1225 | "version": "4.0.0",
1226 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1227 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1228 | "dev": true
1229 | },
1230 | "strip-ansi": {
1231 | "version": "6.0.1",
1232 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1233 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1234 | "dev": true,
1235 | "requires": {
1236 | "ansi-regex": "^5.0.1"
1237 | }
1238 | },
1239 | "supports-color": {
1240 | "version": "7.2.0",
1241 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1242 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1243 | "dev": true,
1244 | "requires": {
1245 | "has-flag": "^4.0.0"
1246 | }
1247 | }
1248 | }
1249 | },
1250 | "internal-slot": {
1251 | "version": "1.0.3",
1252 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
1253 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
1254 | "dev": true,
1255 | "requires": {
1256 | "get-intrinsic": "^1.1.0",
1257 | "has": "^1.0.3",
1258 | "side-channel": "^1.0.4"
1259 | }
1260 | },
1261 | "interpret": {
1262 | "version": "1.1.0",
1263 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
1264 | "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==",
1265 | "dev": true
1266 | },
1267 | "is-absolute": {
1268 | "version": "1.0.0",
1269 | "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
1270 | "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
1271 | "dev": true,
1272 | "requires": {
1273 | "is-relative": "^1.0.0",
1274 | "is-windows": "^1.0.1"
1275 | }
1276 | },
1277 | "is-bigint": {
1278 | "version": "1.0.4",
1279 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
1280 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
1281 | "dev": true,
1282 | "requires": {
1283 | "has-bigints": "^1.0.1"
1284 | }
1285 | },
1286 | "is-boolean-object": {
1287 | "version": "1.1.2",
1288 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
1289 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
1290 | "dev": true,
1291 | "requires": {
1292 | "call-bind": "^1.0.2",
1293 | "has-tostringtag": "^1.0.0"
1294 | }
1295 | },
1296 | "is-callable": {
1297 | "version": "1.2.4",
1298 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
1299 | "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
1300 | "dev": true
1301 | },
1302 | "is-core-module": {
1303 | "version": "2.9.0",
1304 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
1305 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
1306 | "dev": true,
1307 | "requires": {
1308 | "has": "^1.0.3"
1309 | }
1310 | },
1311 | "is-date-object": {
1312 | "version": "1.0.5",
1313 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
1314 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
1315 | "dev": true,
1316 | "requires": {
1317 | "has-tostringtag": "^1.0.0"
1318 | }
1319 | },
1320 | "is-extglob": {
1321 | "version": "2.1.1",
1322 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1323 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1324 | "dev": true
1325 | },
1326 | "is-fullwidth-code-point": {
1327 | "version": "3.0.0",
1328 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1329 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1330 | "dev": true
1331 | },
1332 | "is-glob": {
1333 | "version": "4.0.3",
1334 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1335 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1336 | "dev": true,
1337 | "requires": {
1338 | "is-extglob": "^2.1.1"
1339 | }
1340 | },
1341 | "is-negative-zero": {
1342 | "version": "2.0.2",
1343 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
1344 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
1345 | "dev": true
1346 | },
1347 | "is-number": {
1348 | "version": "7.0.0",
1349 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1350 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1351 | "dev": true
1352 | },
1353 | "is-number-object": {
1354 | "version": "1.0.7",
1355 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
1356 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
1357 | "dev": true,
1358 | "requires": {
1359 | "has-tostringtag": "^1.0.0"
1360 | }
1361 | },
1362 | "is-plain-object": {
1363 | "version": "2.0.4",
1364 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
1365 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
1366 | "dev": true,
1367 | "requires": {
1368 | "isobject": "^3.0.1"
1369 | }
1370 | },
1371 | "is-regex": {
1372 | "version": "1.1.4",
1373 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
1374 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
1375 | "dev": true,
1376 | "requires": {
1377 | "call-bind": "^1.0.2",
1378 | "has-tostringtag": "^1.0.0"
1379 | }
1380 | },
1381 | "is-relative": {
1382 | "version": "1.0.0",
1383 | "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
1384 | "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
1385 | "dev": true,
1386 | "requires": {
1387 | "is-unc-path": "^1.0.0"
1388 | }
1389 | },
1390 | "is-shared-array-buffer": {
1391 | "version": "1.0.2",
1392 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
1393 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
1394 | "dev": true,
1395 | "requires": {
1396 | "call-bind": "^1.0.2"
1397 | }
1398 | },
1399 | "is-string": {
1400 | "version": "1.0.7",
1401 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
1402 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
1403 | "dev": true,
1404 | "requires": {
1405 | "has-tostringtag": "^1.0.0"
1406 | }
1407 | },
1408 | "is-symbol": {
1409 | "version": "1.0.4",
1410 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
1411 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
1412 | "dev": true,
1413 | "requires": {
1414 | "has-symbols": "^1.0.2"
1415 | }
1416 | },
1417 | "is-unc-path": {
1418 | "version": "1.0.0",
1419 | "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
1420 | "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
1421 | "dev": true,
1422 | "requires": {
1423 | "unc-path-regex": "^0.1.2"
1424 | }
1425 | },
1426 | "is-weakref": {
1427 | "version": "1.0.2",
1428 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
1429 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
1430 | "dev": true,
1431 | "requires": {
1432 | "call-bind": "^1.0.2"
1433 | }
1434 | },
1435 | "is-windows": {
1436 | "version": "1.0.2",
1437 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
1438 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
1439 | "dev": true
1440 | },
1441 | "isexe": {
1442 | "version": "2.0.0",
1443 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1444 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1445 | "dev": true
1446 | },
1447 | "isobject": {
1448 | "version": "3.0.1",
1449 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
1450 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
1451 | "dev": true
1452 | },
1453 | "js-tokens": {
1454 | "version": "4.0.0",
1455 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1456 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1457 | "dev": true
1458 | },
1459 | "js-yaml": {
1460 | "version": "3.14.1",
1461 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
1462 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
1463 | "dev": true,
1464 | "requires": {
1465 | "argparse": "^1.0.7",
1466 | "esprima": "^4.0.0"
1467 | }
1468 | },
1469 | "json-schema-traverse": {
1470 | "version": "0.4.1",
1471 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1472 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1473 | "dev": true
1474 | },
1475 | "json-stable-stringify-without-jsonify": {
1476 | "version": "1.0.1",
1477 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1478 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
1479 | "dev": true
1480 | },
1481 | "jsx-ast-utils": {
1482 | "version": "3.3.2",
1483 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
1484 | "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==",
1485 | "dev": true,
1486 | "requires": {
1487 | "array-includes": "^3.1.5",
1488 | "object.assign": "^4.1.2"
1489 | }
1490 | },
1491 | "kind-of": {
1492 | "version": "6.0.3",
1493 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
1494 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
1495 | "dev": true
1496 | },
1497 | "levn": {
1498 | "version": "0.3.0",
1499 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
1500 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
1501 | "dev": true,
1502 | "requires": {
1503 | "prelude-ls": "~1.1.2",
1504 | "type-check": "~0.3.2"
1505 | }
1506 | },
1507 | "liftup": {
1508 | "version": "3.0.1",
1509 | "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
1510 | "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==",
1511 | "dev": true,
1512 | "requires": {
1513 | "extend": "^3.0.2",
1514 | "findup-sync": "^4.0.0",
1515 | "fined": "^1.2.0",
1516 | "flagged-respawn": "^1.0.1",
1517 | "is-plain-object": "^2.0.4",
1518 | "object.map": "^1.0.1",
1519 | "rechoir": "^0.7.0",
1520 | "resolve": "^1.19.0"
1521 | },
1522 | "dependencies": {
1523 | "findup-sync": {
1524 | "version": "4.0.0",
1525 | "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
1526 | "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
1527 | "dev": true,
1528 | "requires": {
1529 | "detect-file": "^1.0.0",
1530 | "is-glob": "^4.0.0",
1531 | "micromatch": "^4.0.2",
1532 | "resolve-dir": "^1.0.1"
1533 | }
1534 | },
1535 | "resolve": {
1536 | "version": "1.22.1",
1537 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1538 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1539 | "dev": true,
1540 | "requires": {
1541 | "is-core-module": "^2.9.0",
1542 | "path-parse": "^1.0.7",
1543 | "supports-preserve-symlinks-flag": "^1.0.0"
1544 | }
1545 | }
1546 | }
1547 | },
1548 | "lodash": {
1549 | "version": "4.17.21",
1550 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1551 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
1552 | "dev": true
1553 | },
1554 | "loose-envify": {
1555 | "version": "1.4.0",
1556 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1557 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1558 | "dev": true,
1559 | "requires": {
1560 | "js-tokens": "^3.0.0 || ^4.0.0"
1561 | }
1562 | },
1563 | "make-iterator": {
1564 | "version": "1.0.1",
1565 | "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
1566 | "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
1567 | "dev": true,
1568 | "requires": {
1569 | "kind-of": "^6.0.2"
1570 | }
1571 | },
1572 | "map-cache": {
1573 | "version": "0.2.2",
1574 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
1575 | "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
1576 | "dev": true
1577 | },
1578 | "micromatch": {
1579 | "version": "4.0.5",
1580 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1581 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1582 | "dev": true,
1583 | "requires": {
1584 | "braces": "^3.0.2",
1585 | "picomatch": "^2.3.1"
1586 | }
1587 | },
1588 | "mimic-fn": {
1589 | "version": "2.1.0",
1590 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1591 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
1592 | "dev": true
1593 | },
1594 | "minimatch": {
1595 | "version": "3.1.2",
1596 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1597 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1598 | "dev": true,
1599 | "requires": {
1600 | "brace-expansion": "^1.1.7"
1601 | }
1602 | },
1603 | "minimist": {
1604 | "version": "1.2.6",
1605 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
1606 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
1607 | "dev": true
1608 | },
1609 | "mkdirp": {
1610 | "version": "0.5.6",
1611 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
1612 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
1613 | "dev": true,
1614 | "requires": {
1615 | "minimist": "^1.2.6"
1616 | }
1617 | },
1618 | "ms": {
1619 | "version": "2.1.2",
1620 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1621 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1622 | "dev": true
1623 | },
1624 | "mute-stream": {
1625 | "version": "0.0.8",
1626 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
1627 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
1628 | "dev": true
1629 | },
1630 | "natural-compare": {
1631 | "version": "1.4.0",
1632 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1633 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
1634 | "dev": true
1635 | },
1636 | "nice-try": {
1637 | "version": "1.0.5",
1638 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
1639 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
1640 | "dev": true
1641 | },
1642 | "node-wp-i18n": {
1643 | "version": "1.2.6",
1644 | "resolved": "https://registry.npmjs.org/node-wp-i18n/-/node-wp-i18n-1.2.6.tgz",
1645 | "integrity": "sha512-aLutjDB1rMJ3FNlNcs/XjmaejED1/y30uLYQrmkXpeUj1NH/SA6pI94CUz3iI7fbQd63lTGg0YNvOQAT8cWdIw==",
1646 | "dev": true,
1647 | "requires": {
1648 | "bluebird": "^3.4.1",
1649 | "gettext-parser": "^3.1.0",
1650 | "glob": "^7.0.5",
1651 | "lodash": "^4.14.2",
1652 | "minimist": "^1.2.5",
1653 | "mkdirp": "^1.0.4",
1654 | "tmp": "^0.2.1"
1655 | },
1656 | "dependencies": {
1657 | "mkdirp": {
1658 | "version": "1.0.4",
1659 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1660 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
1661 | "dev": true
1662 | },
1663 | "rimraf": {
1664 | "version": "3.0.2",
1665 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1666 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1667 | "dev": true,
1668 | "requires": {
1669 | "glob": "^7.1.3"
1670 | }
1671 | },
1672 | "tmp": {
1673 | "version": "0.2.1",
1674 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
1675 | "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
1676 | "dev": true,
1677 | "requires": {
1678 | "rimraf": "^3.0.0"
1679 | }
1680 | }
1681 | }
1682 | },
1683 | "nopt": {
1684 | "version": "3.0.6",
1685 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
1686 | "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==",
1687 | "dev": true,
1688 | "requires": {
1689 | "abbrev": "1"
1690 | }
1691 | },
1692 | "object-assign": {
1693 | "version": "4.1.1",
1694 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1695 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1696 | "dev": true
1697 | },
1698 | "object-inspect": {
1699 | "version": "1.12.2",
1700 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
1701 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
1702 | "dev": true
1703 | },
1704 | "object-keys": {
1705 | "version": "1.1.1",
1706 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1707 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
1708 | "dev": true
1709 | },
1710 | "object.assign": {
1711 | "version": "4.1.2",
1712 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
1713 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
1714 | "dev": true,
1715 | "requires": {
1716 | "call-bind": "^1.0.0",
1717 | "define-properties": "^1.1.3",
1718 | "has-symbols": "^1.0.1",
1719 | "object-keys": "^1.1.1"
1720 | }
1721 | },
1722 | "object.defaults": {
1723 | "version": "1.1.0",
1724 | "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
1725 | "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==",
1726 | "dev": true,
1727 | "requires": {
1728 | "array-each": "^1.0.1",
1729 | "array-slice": "^1.0.0",
1730 | "for-own": "^1.0.0",
1731 | "isobject": "^3.0.0"
1732 | }
1733 | },
1734 | "object.entries": {
1735 | "version": "1.1.5",
1736 | "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
1737 | "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
1738 | "dev": true,
1739 | "requires": {
1740 | "call-bind": "^1.0.2",
1741 | "define-properties": "^1.1.3",
1742 | "es-abstract": "^1.19.1"
1743 | }
1744 | },
1745 | "object.fromentries": {
1746 | "version": "2.0.5",
1747 | "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
1748 | "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
1749 | "dev": true,
1750 | "requires": {
1751 | "call-bind": "^1.0.2",
1752 | "define-properties": "^1.1.3",
1753 | "es-abstract": "^1.19.1"
1754 | }
1755 | },
1756 | "object.hasown": {
1757 | "version": "1.1.1",
1758 | "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
1759 | "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
1760 | "dev": true,
1761 | "requires": {
1762 | "define-properties": "^1.1.4",
1763 | "es-abstract": "^1.19.5"
1764 | }
1765 | },
1766 | "object.map": {
1767 | "version": "1.0.1",
1768 | "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
1769 | "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==",
1770 | "dev": true,
1771 | "requires": {
1772 | "for-own": "^1.0.0",
1773 | "make-iterator": "^1.0.0"
1774 | }
1775 | },
1776 | "object.pick": {
1777 | "version": "1.3.0",
1778 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
1779 | "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
1780 | "dev": true,
1781 | "requires": {
1782 | "isobject": "^3.0.1"
1783 | }
1784 | },
1785 | "object.values": {
1786 | "version": "1.1.5",
1787 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
1788 | "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
1789 | "dev": true,
1790 | "requires": {
1791 | "call-bind": "^1.0.2",
1792 | "define-properties": "^1.1.3",
1793 | "es-abstract": "^1.19.1"
1794 | }
1795 | },
1796 | "once": {
1797 | "version": "1.4.0",
1798 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1799 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1800 | "dev": true,
1801 | "requires": {
1802 | "wrappy": "1"
1803 | }
1804 | },
1805 | "onetime": {
1806 | "version": "5.1.2",
1807 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
1808 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
1809 | "dev": true,
1810 | "requires": {
1811 | "mimic-fn": "^2.1.0"
1812 | }
1813 | },
1814 | "optionator": {
1815 | "version": "0.8.3",
1816 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
1817 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
1818 | "dev": true,
1819 | "requires": {
1820 | "deep-is": "~0.1.3",
1821 | "fast-levenshtein": "~2.0.6",
1822 | "levn": "~0.3.0",
1823 | "prelude-ls": "~1.1.2",
1824 | "type-check": "~0.3.2",
1825 | "word-wrap": "~1.2.3"
1826 | }
1827 | },
1828 | "os-homedir": {
1829 | "version": "1.0.2",
1830 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1831 | "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
1832 | "dev": true
1833 | },
1834 | "os-tmpdir": {
1835 | "version": "1.0.2",
1836 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1837 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1838 | "dev": true
1839 | },
1840 | "osenv": {
1841 | "version": "0.1.5",
1842 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
1843 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
1844 | "dev": true,
1845 | "requires": {
1846 | "os-homedir": "^1.0.0",
1847 | "os-tmpdir": "^1.0.0"
1848 | }
1849 | },
1850 | "parent-module": {
1851 | "version": "1.0.1",
1852 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1853 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1854 | "dev": true,
1855 | "requires": {
1856 | "callsites": "^3.0.0"
1857 | }
1858 | },
1859 | "parse-filepath": {
1860 | "version": "1.0.2",
1861 | "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
1862 | "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==",
1863 | "dev": true,
1864 | "requires": {
1865 | "is-absolute": "^1.0.0",
1866 | "map-cache": "^0.2.0",
1867 | "path-root": "^0.1.1"
1868 | }
1869 | },
1870 | "parse-passwd": {
1871 | "version": "1.0.0",
1872 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
1873 | "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
1874 | "dev": true
1875 | },
1876 | "path-is-absolute": {
1877 | "version": "1.0.1",
1878 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1879 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1880 | "dev": true
1881 | },
1882 | "path-key": {
1883 | "version": "2.0.1",
1884 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
1885 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1886 | "dev": true
1887 | },
1888 | "path-parse": {
1889 | "version": "1.0.7",
1890 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1891 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1892 | "dev": true
1893 | },
1894 | "path-root": {
1895 | "version": "0.1.1",
1896 | "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
1897 | "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
1898 | "dev": true,
1899 | "requires": {
1900 | "path-root-regex": "^0.1.0"
1901 | }
1902 | },
1903 | "path-root-regex": {
1904 | "version": "0.1.2",
1905 | "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
1906 | "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==",
1907 | "dev": true
1908 | },
1909 | "picomatch": {
1910 | "version": "2.3.1",
1911 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1912 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1913 | "dev": true
1914 | },
1915 | "prelude-ls": {
1916 | "version": "1.1.2",
1917 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
1918 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
1919 | "dev": true
1920 | },
1921 | "progress": {
1922 | "version": "2.0.3",
1923 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
1924 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1925 | "dev": true
1926 | },
1927 | "prop-types": {
1928 | "version": "15.8.1",
1929 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
1930 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
1931 | "dev": true,
1932 | "requires": {
1933 | "loose-envify": "^1.4.0",
1934 | "object-assign": "^4.1.1",
1935 | "react-is": "^16.13.1"
1936 | }
1937 | },
1938 | "punycode": {
1939 | "version": "2.1.1",
1940 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1941 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1942 | "dev": true
1943 | },
1944 | "react-is": {
1945 | "version": "16.13.1",
1946 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
1947 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
1948 | "dev": true
1949 | },
1950 | "readable-stream": {
1951 | "version": "3.6.0",
1952 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1953 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1954 | "dev": true,
1955 | "requires": {
1956 | "inherits": "^2.0.3",
1957 | "string_decoder": "^1.1.1",
1958 | "util-deprecate": "^1.0.1"
1959 | }
1960 | },
1961 | "rechoir": {
1962 | "version": "0.7.1",
1963 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
1964 | "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
1965 | "dev": true,
1966 | "requires": {
1967 | "resolve": "^1.9.0"
1968 | },
1969 | "dependencies": {
1970 | "resolve": {
1971 | "version": "1.22.1",
1972 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1973 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1974 | "dev": true,
1975 | "requires": {
1976 | "is-core-module": "^2.9.0",
1977 | "path-parse": "^1.0.7",
1978 | "supports-preserve-symlinks-flag": "^1.0.0"
1979 | }
1980 | }
1981 | }
1982 | },
1983 | "regexp.prototype.flags": {
1984 | "version": "1.4.3",
1985 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
1986 | "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
1987 | "dev": true,
1988 | "requires": {
1989 | "call-bind": "^1.0.2",
1990 | "define-properties": "^1.1.3",
1991 | "functions-have-names": "^1.2.2"
1992 | }
1993 | },
1994 | "regexpp": {
1995 | "version": "2.0.1",
1996 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
1997 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
1998 | "dev": true
1999 | },
2000 | "resolve": {
2001 | "version": "2.0.0-next.4",
2002 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
2003 | "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
2004 | "dev": true,
2005 | "requires": {
2006 | "is-core-module": "^2.9.0",
2007 | "path-parse": "^1.0.7",
2008 | "supports-preserve-symlinks-flag": "^1.0.0"
2009 | }
2010 | },
2011 | "resolve-dir": {
2012 | "version": "1.0.1",
2013 | "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
2014 | "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
2015 | "dev": true,
2016 | "requires": {
2017 | "expand-tilde": "^2.0.0",
2018 | "global-modules": "^1.0.0"
2019 | }
2020 | },
2021 | "resolve-from": {
2022 | "version": "4.0.0",
2023 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2024 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2025 | "dev": true
2026 | },
2027 | "restore-cursor": {
2028 | "version": "3.1.0",
2029 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
2030 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
2031 | "dev": true,
2032 | "requires": {
2033 | "onetime": "^5.1.0",
2034 | "signal-exit": "^3.0.2"
2035 | }
2036 | },
2037 | "rimraf": {
2038 | "version": "2.6.3",
2039 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
2040 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
2041 | "dev": true,
2042 | "requires": {
2043 | "glob": "^7.1.3"
2044 | }
2045 | },
2046 | "run-async": {
2047 | "version": "2.4.1",
2048 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
2049 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
2050 | "dev": true
2051 | },
2052 | "rxjs": {
2053 | "version": "6.6.7",
2054 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
2055 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
2056 | "dev": true,
2057 | "requires": {
2058 | "tslib": "^1.9.0"
2059 | }
2060 | },
2061 | "safe-buffer": {
2062 | "version": "5.2.1",
2063 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2064 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
2065 | "dev": true
2066 | },
2067 | "safer-buffer": {
2068 | "version": "2.1.2",
2069 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2070 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
2071 | "dev": true
2072 | },
2073 | "semver": {
2074 | "version": "6.3.0",
2075 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2076 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
2077 | "dev": true
2078 | },
2079 | "shebang-command": {
2080 | "version": "1.2.0",
2081 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
2082 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
2083 | "dev": true,
2084 | "requires": {
2085 | "shebang-regex": "^1.0.0"
2086 | }
2087 | },
2088 | "shebang-regex": {
2089 | "version": "1.0.0",
2090 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
2091 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
2092 | "dev": true
2093 | },
2094 | "side-channel": {
2095 | "version": "1.0.4",
2096 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
2097 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
2098 | "dev": true,
2099 | "requires": {
2100 | "call-bind": "^1.0.0",
2101 | "get-intrinsic": "^1.0.2",
2102 | "object-inspect": "^1.9.0"
2103 | }
2104 | },
2105 | "signal-exit": {
2106 | "version": "3.0.7",
2107 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
2108 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
2109 | "dev": true
2110 | },
2111 | "slice-ansi": {
2112 | "version": "2.1.0",
2113 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
2114 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
2115 | "dev": true,
2116 | "requires": {
2117 | "ansi-styles": "^3.2.0",
2118 | "astral-regex": "^1.0.0",
2119 | "is-fullwidth-code-point": "^2.0.0"
2120 | },
2121 | "dependencies": {
2122 | "is-fullwidth-code-point": {
2123 | "version": "2.0.0",
2124 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2125 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2126 | "dev": true
2127 | }
2128 | }
2129 | },
2130 | "sprintf-js": {
2131 | "version": "1.0.3",
2132 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2133 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2134 | "dev": true
2135 | },
2136 | "string-width": {
2137 | "version": "4.2.3",
2138 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2139 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2140 | "dev": true,
2141 | "requires": {
2142 | "emoji-regex": "^8.0.0",
2143 | "is-fullwidth-code-point": "^3.0.0",
2144 | "strip-ansi": "^6.0.1"
2145 | },
2146 | "dependencies": {
2147 | "ansi-regex": {
2148 | "version": "5.0.1",
2149 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2150 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2151 | "dev": true
2152 | },
2153 | "strip-ansi": {
2154 | "version": "6.0.1",
2155 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2156 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2157 | "dev": true,
2158 | "requires": {
2159 | "ansi-regex": "^5.0.1"
2160 | }
2161 | }
2162 | }
2163 | },
2164 | "string.prototype.matchall": {
2165 | "version": "4.0.7",
2166 | "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
2167 | "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
2168 | "dev": true,
2169 | "requires": {
2170 | "call-bind": "^1.0.2",
2171 | "define-properties": "^1.1.3",
2172 | "es-abstract": "^1.19.1",
2173 | "get-intrinsic": "^1.1.1",
2174 | "has-symbols": "^1.0.3",
2175 | "internal-slot": "^1.0.3",
2176 | "regexp.prototype.flags": "^1.4.1",
2177 | "side-channel": "^1.0.4"
2178 | }
2179 | },
2180 | "string.prototype.trimend": {
2181 | "version": "1.0.5",
2182 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
2183 | "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
2184 | "dev": true,
2185 | "requires": {
2186 | "call-bind": "^1.0.2",
2187 | "define-properties": "^1.1.4",
2188 | "es-abstract": "^1.19.5"
2189 | }
2190 | },
2191 | "string.prototype.trimstart": {
2192 | "version": "1.0.5",
2193 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
2194 | "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
2195 | "dev": true,
2196 | "requires": {
2197 | "call-bind": "^1.0.2",
2198 | "define-properties": "^1.1.4",
2199 | "es-abstract": "^1.19.5"
2200 | }
2201 | },
2202 | "string_decoder": {
2203 | "version": "1.3.0",
2204 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
2205 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
2206 | "dev": true,
2207 | "requires": {
2208 | "safe-buffer": "~5.2.0"
2209 | }
2210 | },
2211 | "strip-ansi": {
2212 | "version": "5.2.0",
2213 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
2214 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
2215 | "dev": true,
2216 | "requires": {
2217 | "ansi-regex": "^4.1.0"
2218 | }
2219 | },
2220 | "strip-json-comments": {
2221 | "version": "3.1.1",
2222 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2223 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2224 | "dev": true
2225 | },
2226 | "supports-color": {
2227 | "version": "5.5.0",
2228 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2229 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2230 | "dev": true,
2231 | "requires": {
2232 | "has-flag": "^3.0.0"
2233 | }
2234 | },
2235 | "supports-preserve-symlinks-flag": {
2236 | "version": "1.0.0",
2237 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2238 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2239 | "dev": true
2240 | },
2241 | "table": {
2242 | "version": "5.4.6",
2243 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
2244 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
2245 | "dev": true,
2246 | "requires": {
2247 | "ajv": "^6.10.2",
2248 | "lodash": "^4.17.14",
2249 | "slice-ansi": "^2.1.0",
2250 | "string-width": "^3.0.0"
2251 | },
2252 | "dependencies": {
2253 | "emoji-regex": {
2254 | "version": "7.0.3",
2255 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
2256 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
2257 | "dev": true
2258 | },
2259 | "is-fullwidth-code-point": {
2260 | "version": "2.0.0",
2261 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2262 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2263 | "dev": true
2264 | },
2265 | "string-width": {
2266 | "version": "3.1.0",
2267 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2268 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2269 | "dev": true,
2270 | "requires": {
2271 | "emoji-regex": "^7.0.1",
2272 | "is-fullwidth-code-point": "^2.0.0",
2273 | "strip-ansi": "^5.1.0"
2274 | }
2275 | }
2276 | }
2277 | },
2278 | "text-table": {
2279 | "version": "0.2.0",
2280 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2281 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
2282 | "dev": true
2283 | },
2284 | "through": {
2285 | "version": "2.3.8",
2286 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2287 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2288 | "dev": true
2289 | },
2290 | "tmp": {
2291 | "version": "0.0.33",
2292 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
2293 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
2294 | "dev": true,
2295 | "requires": {
2296 | "os-tmpdir": "~1.0.2"
2297 | }
2298 | },
2299 | "to-regex-range": {
2300 | "version": "5.0.1",
2301 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2302 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2303 | "dev": true,
2304 | "requires": {
2305 | "is-number": "^7.0.0"
2306 | }
2307 | },
2308 | "tslib": {
2309 | "version": "1.14.1",
2310 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
2311 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
2312 | "dev": true
2313 | },
2314 | "type-check": {
2315 | "version": "0.3.2",
2316 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
2317 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
2318 | "dev": true,
2319 | "requires": {
2320 | "prelude-ls": "~1.1.2"
2321 | }
2322 | },
2323 | "type-fest": {
2324 | "version": "0.8.1",
2325 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
2326 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
2327 | "dev": true
2328 | },
2329 | "unbox-primitive": {
2330 | "version": "1.0.2",
2331 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
2332 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
2333 | "dev": true,
2334 | "requires": {
2335 | "call-bind": "^1.0.2",
2336 | "has-bigints": "^1.0.2",
2337 | "has-symbols": "^1.0.3",
2338 | "which-boxed-primitive": "^1.0.2"
2339 | }
2340 | },
2341 | "unc-path-regex": {
2342 | "version": "0.1.2",
2343 | "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
2344 | "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
2345 | "dev": true
2346 | },
2347 | "underscore.string": {
2348 | "version": "3.3.6",
2349 | "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz",
2350 | "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==",
2351 | "dev": true,
2352 | "requires": {
2353 | "sprintf-js": "^1.1.1",
2354 | "util-deprecate": "^1.0.2"
2355 | },
2356 | "dependencies": {
2357 | "sprintf-js": {
2358 | "version": "1.1.2",
2359 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
2360 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
2361 | "dev": true
2362 | }
2363 | }
2364 | },
2365 | "uri-js": {
2366 | "version": "4.4.1",
2367 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2368 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2369 | "dev": true,
2370 | "requires": {
2371 | "punycode": "^2.1.0"
2372 | }
2373 | },
2374 | "util-deprecate": {
2375 | "version": "1.0.2",
2376 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2377 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2378 | "dev": true
2379 | },
2380 | "v8-compile-cache": {
2381 | "version": "2.3.0",
2382 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
2383 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
2384 | "dev": true
2385 | },
2386 | "v8flags": {
2387 | "version": "3.2.0",
2388 | "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
2389 | "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
2390 | "dev": true,
2391 | "requires": {
2392 | "homedir-polyfill": "^1.0.1"
2393 | }
2394 | },
2395 | "which": {
2396 | "version": "1.3.1",
2397 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
2398 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
2399 | "dev": true,
2400 | "requires": {
2401 | "isexe": "^2.0.0"
2402 | }
2403 | },
2404 | "which-boxed-primitive": {
2405 | "version": "1.0.2",
2406 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
2407 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
2408 | "dev": true,
2409 | "requires": {
2410 | "is-bigint": "^1.0.1",
2411 | "is-boolean-object": "^1.1.0",
2412 | "is-number-object": "^1.0.4",
2413 | "is-string": "^1.0.5",
2414 | "is-symbol": "^1.0.3"
2415 | }
2416 | },
2417 | "word-wrap": {
2418 | "version": "1.2.3",
2419 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
2420 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
2421 | "dev": true
2422 | },
2423 | "wrappy": {
2424 | "version": "1.0.2",
2425 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2426 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2427 | "dev": true
2428 | },
2429 | "write": {
2430 | "version": "1.0.3",
2431 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
2432 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
2433 | "dev": true,
2434 | "requires": {
2435 | "mkdirp": "^0.5.1"
2436 | }
2437 | }
2438 | }
2439 | }
2440 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sync-mastodon",
3 | "version": "1.3.1",
4 | "main": "Gruntfile.js",
5 | "author": "Ross Wintle",
6 | "devDependencies": {
7 | "eslint": "^6.8",
8 | "eslint-plugin-react": "^7.30.1",
9 | "grunt": "^1.5.3",
10 | "grunt-wp-i18n": "^1.0.3",
11 | "grunt-wp-readme-to-markdown": "~2.0.0"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/phpstan.neon:
--------------------------------------------------------------------------------
1 | includes:
2 | - vendor/szepeviktor/phpstan-wordpress/extension.neon
3 |
4 | parameters:
5 | level: 5
6 | paths:
7 | - sync-mastodon.php
8 | - src/
9 | scanFiles:
10 | - %rootDir%/../../php-stubs/wordpress-stubs/wordpress-stubs.php
11 | - %rootDir%/../../php-stubs/wp-cli-stubs/wp-cli-stubs.php
12 | - %rootDir%/../../php-stubs/wp-cli-stubs/wp-cli-commands-stubs.php
13 | - %rootDir%/../../php-stubs/wp-cli-stubs/wp-cli-i18n-stubs.php
14 |
--------------------------------------------------------------------------------
/readme.txt:
--------------------------------------------------------------------------------
1 | === Sync Mastodon ===
2 | Contributors: magicroundabout
3 | Tags: mastodon, sync, fediverse
4 | Requires at least: 5.1
5 | Tested up to: 6.1
6 | Stable tag: 1.3.1
7 | License: GPLv2 or later
8 | License URI: https://www.gnu.org/licenses/gpl-2.0.html
9 |
10 | Fetch posts from a Mastodon RSS feed and add them to a custom post type
11 |
12 | == Description ==
13 |
14 | This plugin syncs Mastodon posts from a Mastodon RSS feed into a custom post type.
15 |
16 | This plugin:
17 |
18 | * runs automatically using either wp-cron or manually using [wp-cli](https://wp-cli.org/)
19 | * uses Mastodon RSS feeds and needs no authentication
20 | * rates-limits fetches
21 | * allows you to choose an author for synced posts
22 | * sideloads images from your Mastodon posts
23 |
24 | Note that this plugin does a one-way sync from Mastodon to your WordPress install. You can add your own posts in WordPress but they will not be cross-posted to Mastodon.
25 |
26 | = Instructions =
27 |
28 | Once you have installed the plugin you will need to go to Settings -> Mastodon Sync and enter your RSS feed URL
29 |
30 | If you want to do automatic sync then you can then also turn on the Auto-sync option.
31 |
32 | = WP-CLI command =
33 |
34 | If you can use [WP-CLI](https://wp-cli.org/) then you can make use of the `wp-cli sync-mastodon` command to
35 | do an import from Mastodon. This works particularly well for large first-time imports before you enable the automatic sync. But you could also use the system cron to run this command instead of WP cron.
36 |
37 | = Wish list / Roadmap =
38 |
39 | Things I have in mind for future development:
40 |
41 | * Better front-end validation in admin screens and meta boxes
42 | * Better error logging, and logging in general, including WP-CLI-specific output
43 |
44 | == Installation ==
45 |
46 | Once you have installed and activated the plugin, follow the instructions in the description.
47 |
48 | == Screenshots ==
49 |
50 | 1. Options screen
51 |
52 | == Changelog ==
53 |
54 | = 1.3.1 =
55 | * Fix fatals
56 |
57 | = 1.3.0 =
58 | * Syncs images
59 |
60 | = 1.2.2 =
61 | * Removed Guzzle dependency - it's not used
62 |
63 | = 1.2.1 =
64 | * Fix RSS feed caching
65 |
66 | = 1.2.0 =
67 | * Changes sync interval to five minutes
68 |
69 | = 1.1.0 =
70 | * Adds ability to select a post type to sync to
71 |
72 | = 1.0.0 =
73 | * Initial version based on [Sync Pinboard](https://wordpress.org/plugins/sync-pinboard/)
74 |
75 | == Upgrade Notice ==
76 |
--------------------------------------------------------------------------------
/src/class-mastodon-rss-api.php:
--------------------------------------------------------------------------------
1 | get_items();
45 |
46 | return $this->make_posts_array( $rss_items );
47 | }
48 |
49 | /**
50 | * Filter the feed cache time
51 | *
52 | * @param int $seconds The number of seconds the feed should be cached for.
53 | * @param string $url The feed URL.
54 | * @return int
55 | */
56 | public static function filter_feed_lifetime( $seconds, $url ) {
57 | return 60 * 5; // 5 minutes
58 | }
59 |
60 | /**
61 | * Convert an array of items returned by the RSS API into an array of
62 | * Mastodon_Post objects
63 | *
64 | * @param array $items Items to be converted
65 | * @return Mastodon_Post[]
66 | */
67 | public function make_posts_array( $items = [] ) {
68 | $posts = [];
69 |
70 | foreach ( $items as $item ) {
71 | $post = Mastodon_Post::from_rss_object( $item );
72 | $posts[] = $post;
73 | }
74 |
75 | return $posts;
76 | }
77 |
78 | /**
79 | * Gets the latest posts from the RSS feed
80 | *
81 | * @param array $options Array of options to pass to the API. Currently unused.
82 | * @return Mastodon_Post[]
83 | */
84 | public function posts_latest( $options = [] ) {
85 | // We use a timestamp in a transient to suspend calls for a 1 seconds
86 | // to avoid completely spamming the API.
87 | $suspended = get_transient( 'mastodon-posts-all-suspended' );
88 | if ( false !== $suspended ) {
89 | Sync_Mastodon::log( 'Waiting for API...' );
90 | // Wait for a second to ensure we are past the transient delay
91 | sleep( 1 );
92 | }
93 |
94 | set_transient( 'mastodon-posts-all-suspended', time(), 1 );
95 |
96 | return $this->call();
97 | }
98 |
99 | }
100 |
--------------------------------------------------------------------------------
/src/class-sync-mastodon-admin.php:
--------------------------------------------------------------------------------
1 | handle_submission();
31 |
32 | $rss_url = Sync_Mastodon_Options::get_rss_url();
33 | $post_author = Sync_Mastodon_Options::get_post_author();
34 | $post_type = Sync_Mastodon_Options::get_post_type();
35 | $post_sync_status = Sync_Mastodon_Options::get_post_sync_status();
36 |
37 | ?>
38 |
Sync Mastodon Settings
39 |
40 |
41 |
42 | Please note: This is not an official Mastodon plugin. If you have any problems please direct them to the WordPress support forums for this plugin.
43 |
44 |
45 |
46 |
118 | last_sync = ( false !== $stored_last_sync ) ? $stored_last_sync : 0;
28 | }
29 |
30 | public function sync() {
31 | $api = new Mastodon_API();
32 |
33 | Sync_Mastodon::log( 'Getting last post from WordPress' );
34 |
35 | $latest_posts = get_posts(
36 | [
37 | 'post_type' => Sync_Mastodon_Options::get_post_type(),
38 | 'posts_per_page' => 1,
39 | 'orderby' => 'date',
40 | 'order' => 'DESC',
41 | ]
42 | );
43 |
44 | if ( empty( $latest_posts ) ) {
45 | Sync_Mastodon::log( 'No last post found. This will sync all!' );
46 | $latest_post_date = 0;
47 | } else {
48 | Sync_Mastodon::log( 'Last post found: ' . $latest_posts[0]->post_date_gmt );
49 | $latest_post_date = strtotime( $latest_posts[0]->post_date_gmt );
50 | }
51 |
52 | /**
53 | * @var Mastodon_Post[]
54 | */
55 | $new_posts = [];
56 |
57 | Sync_Mastodon::log( 'Fetching Mastodon posts' );
58 |
59 | $fetched_posts = $api->posts_latest();
60 |
61 | Sync_Mastodon::log( 'Fetched ' . count( $fetched_posts ) . ' posts' );
62 |
63 | foreach ( $fetched_posts as $post ) {
64 | if ( $post->date > $latest_post_date ) {
65 | // Sync_Mastodon::log( 'Post created at ' . $post->created . ' is newer than latest boopostkmark date ' . $latest_post_date );
66 | $new_posts[] = $post;
67 | } else {
68 | break;
69 | }
70 | }
71 |
72 | if ( ! is_array( $new_posts ) ) {
73 | Sync_Mastodon::error( 'Tried sync, but no new posts were retrieved' );
74 | return;
75 | }
76 |
77 | Sync_Mastodon::log( 'Retrieved ' . count( $new_posts ) . ' from Mastodon' );
78 |
79 | // Get the author ID to use.
80 | $author_id = Sync_Mastodon_Options::get_post_author();
81 |
82 | // Added post count
83 | $added_post_count = 0;
84 |
85 | // Loop through posts creating posts for them.
86 | foreach ( $new_posts as $post ) {
87 |
88 | Sync_Mastodon::log( 'Syncing post: ' . $post->title );
89 |
90 | $existing_post = \SyncMastodon\Mastodon_Post::with_id( $post->id );
91 | if ( $existing_post ) {
92 | Sync_Mastodon::log( 'Existing post with ID ' . $existing_post->ID . ' found. Skipping.' );
93 | continue;
94 | }
95 |
96 | $post_data = [
97 | 'post_type' => Sync_Mastodon_Options::get_post_type(),
98 | 'post_date' => date( 'Y-m-d H:i:s', Sync_Mastodon::make_time_local( $post->date ) ),
99 | 'post_title' => empty( $post->title ) ? date( 'Y-m-d H:i:s', Sync_Mastodon::make_time_local( $post->date ) ) : $post->title,
100 | 'post_content' => $post->content,
101 | // 'post_status' => 'yes' === $post->shared ? 'publish' : 'private',
102 | 'post_status' => 'publish',
103 | 'meta_input' => [
104 | 'mastodon_permalink' => $post->permalink,
105 | 'mastodon_id' => $post->id,
106 | 'mastodon_excerpt' => $post->excerpt,
107 | ],
108 | 'post_author' => $author_id,
109 | ];
110 |
111 | $result = wp_insert_post( $post_data );
112 |
113 | if ( $result === 0 ) {
114 | Sync_Mastodon::error( 'Error inserting post' );
115 | continue;
116 | }
117 |
118 | $added_post_count++;
119 |
120 | $post->sideload_media( $result );
121 |
122 | // TAXONOMIES?
123 | // if ( $result > 0 ) {
124 | // wp_set_post_terms( $result, $post->tags, 'mastodon-tag' );
125 | // }
126 |
127 | }
128 |
129 | Sync_Mastodon::log( 'Added ' . $added_post_count . ' new posts' );
130 |
131 | // Update last sync time
132 | $this->last_sync = time();
133 | update_option( 'sync-mastodon-last-sync', $this->last_sync );
134 |
135 | }
136 |
137 | }
138 |
--------------------------------------------------------------------------------
/src/class-sync-mastodon-cron.php:
--------------------------------------------------------------------------------
1 | hook_name, [ $this, 'sync' ] );
15 |
16 | if ( ! wp_next_scheduled( $this->hook_name ) ) {
17 | wp_schedule_event( time(), 'five_minutes', $this->hook_name );
18 | }
19 |
20 | add_action( 'sync_mastodon_deactivate', [ $this, 'remove_cron' ] );
21 | }
22 |
23 | public function sync_mastodon_cron_interval( $schedules ) {
24 | $schedules['five_minutes'] = [
25 | 'interval' => 5 * 60,
26 | 'display' => esc_html__( 'Every Five Minutes' ),
27 | ];
28 |
29 | return $schedules;
30 | }
31 |
32 | public function remove_cron() {
33 | echo 'Removing cron';
34 | $timestamp = wp_next_scheduled( $this->hook_name );
35 | wp_unschedule_event( $timestamp, $this->hook_name );
36 | }
37 |
38 | public function sync() {
39 | if ( 0 == Sync_Mastodon_Options::get_post_sync_status() ) {
40 | return;
41 | }
42 |
43 | $core = new Sync_Mastodon_Core();
44 | $core->sync();
45 | }
46 |
47 | public function next_sync_time() {
48 | $timestamp = wp_next_scheduled( $this->hook_name );
49 | // There MUST be a WP function to format a time and take into account the offset, but I can't find it.
50 | return date_i18n( 'H:i:s', $timestamp + ( get_option( 'gmt_offset' ) * 60 * 60 ) );
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/src/class-sync-mastodon-meta-boxes.php:
--------------------------------------------------------------------------------
1 | Sync_Mastodon_Options::get_post_type(),
17 | 'type' => 'string',
18 | 'description' => 'The URL of the bookmark',
19 | 'single' => true,
20 | 'show_in_rest' => true,
21 | ]
22 | );
23 |
24 | // TODO: Need to properly register Mastodon meta fields
25 | // register_rest_field(Sync_Mastodon_Options::get_post_type(), 'content_raw', [
26 | // 'get_callback' => function ($post_array) {
27 | // return $post_array['content']['raw'];
28 | // },
29 | // 'schema' => [
30 | // 'description' => 'The raw content',
31 | // 'type' => 'string',
32 | // ],
33 | // ]);
34 | }
35 |
36 | public function add_meta_boxes() {
37 | add_meta_box( 'sync-mastodon-details', 'Mastodon details', [ $this, 'meta_box' ], Sync_Mastodon_Options::get_post_type(), 'normal', 'default' );
38 | }
39 |
40 | // TODO: Use the right meta boxes/fields
41 | public function meta_box( $post ) {
42 | wp_nonce_field( basename( __FILE__ ), 'sync-mastodon-meta-nonce' );
43 | ?>
44 |
45 |
46 |
47 |
48 |
49 |
50 | post_type );
61 |
62 | // If this isn't a 'mastodon-post' post (or whatever is set), don't update it.
63 | if ( Sync_Mastodon_Options::get_post_type() != $post_type->name ) {
64 | return;
65 | }
66 |
67 | /* Check if the current user has permission to edit the post. */
68 | if ( ! current_user_can( $post_type->cap->edit_post, $post_id ) ) {
69 | return $post_id;
70 | }
71 |
72 | /* Get the posted data and sanitize it for use as an HTML class. */
73 | $new_meta_value = ( isset( $_POST['sync-mastodon-url'] ) ? esc_url_raw( $_POST['sync-mastodon-url'] ) : '' );
74 |
75 | if ( empty( $new_meta_value ) ) {
76 | delete_post_meta( $post_id, 'url' );
77 | } else {
78 | update_post_meta( $post_id, 'url', $new_meta_value );
79 | }
80 |
81 | }
82 |
83 | }
84 |
--------------------------------------------------------------------------------
/src/class-sync-mastodon-options.php:
--------------------------------------------------------------------------------
1 | sync();
44 |
45 | \WP_CLI::log( 'Sync finished' );
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/src/data/class-mastodon-media.php:
--------------------------------------------------------------------------------
1 | url = $data['url'];
52 | $media->title = $data['title'];
53 | $media->description = $data['description'];
54 |
55 | return $media;
56 | }
57 |
58 | /**
59 | * Undocumented function
60 | *
61 | * @param int $wp_post_id The WordPress post ID to attach to.
62 | * @return int The WordPress media ID
63 | */
64 | public function sideload( $wp_post_id ) {
65 | Sync_Mastodon::log( 'Sideloading media item ' . $this->url . ' to post ID ' . $wp_post_id . '...' );
66 |
67 | $this->wordpress_id = media_sideload_image( $this->url, $wp_post_id, $this->title, 'id' );
68 |
69 | if ( is_wp_error( $this->wordpress_id ) ) {
70 | Sync_Mastodon::log( 'Error sideloading media item ' . $this->url . ' to post ID ' . $wp_post_id . ': ' . $this->wordpress_id->get_error_message() );
71 | return 0;
72 | }
73 |
74 | // Set the alt text
75 | update_post_meta( $this->wordpress_id, '_wp_attachment_image_alt', $this->description );
76 |
77 | return $this->wordpress_id;
78 | }
79 |
80 | }
81 |
--------------------------------------------------------------------------------
/src/data/class-mastodon-post.php:
--------------------------------------------------------------------------------
1 | id = $data->get_id();
83 | $post->permalink = $data->get_permalink();
84 | $post->title = $data->get_title();
85 | $post->excerpt = $data->get_description();
86 | $post->content = $data->get_content();
87 | $post->date = $data->get_gmdate( 'U' );
88 |
89 | $media = $data->get_enclosures();
90 |
91 | if ( ! is_array( $media ) || empty( $media ) ) {
92 | return $post;
93 | }
94 |
95 | foreach ( $media as $media_item ) {
96 | if ( $media_item->get_type() !== null ) {
97 | $post->media[] = Mastodon_Media::from_array(
98 | [
99 | 'url' => $media_item->get_link(),
100 | 'title' => $media_item->get_title(),
101 | 'description' => $media_item->get_description(),
102 | ]
103 | );
104 | }
105 | }
106 |
107 | return $post;
108 | }
109 |
110 | /**
111 | * This will sideload the media files and attach them to the specifed WordPress post.
112 | *
113 | * You'll need to do this once a WP post has been created.
114 | *
115 | * @param int $wp_post_id The WordPress post ID to attach items to.
116 | * @return void
117 | */
118 | public function sideload_media( $wp_post_id ) {
119 | Sync_Mastodon::log( 'Loading media for post ID ' . $wp_post_id . '...' );
120 |
121 | if ( empty( $this->media ) ) {
122 | Sync_Mastodon::log( 'No media to load.' );
123 | return;
124 | }
125 |
126 | $this->media_ids = [];
127 |
128 | foreach ( $this->media as $media_item ) {
129 | $this->media_ids[] = $media_item->sideload( $wp_post_id );
130 | }
131 |
132 | if ( ! empty( $this->media_ids ) ) {
133 | Sync_Mastodon::log( 'Setting post thumbnail for post ID ' . $wp_post_id . ' to media ID ' . $this->media_ids[0] . '...' );
134 | set_post_thumbnail( $wp_post_id, $this->media_ids[0] );
135 | }
136 | }
137 | }
138 |
--------------------------------------------------------------------------------
/src/post-types/class-mastodon-post.php:
--------------------------------------------------------------------------------
1 | Sync_Mastodon_Options::get_post_type(),
23 | 'meta_query' => [
24 | [
25 | 'key' => 'mastodon_id',
26 | 'value' => $id,
27 | ],
28 | ],
29 | ]
30 | );
31 | if ( ! empty( $posts ) ) {
32 | return current( $posts );
33 | } else {
34 | return null;
35 | }
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/src/post-types/mastodon-post.php:
--------------------------------------------------------------------------------
1 | [
14 | 'name' => __( 'Mastodon Posts', 'sync-mastodon' ),
15 | 'singular_name' => __( 'Mastodon Post', 'sync-mastodon' ),
16 | 'all_items' => __( 'All Mastodon Posts', 'sync-mastodon' ),
17 | 'archives' => __( 'Mastodon Post Archives', 'sync-mastodon' ),
18 | 'attributes' => __( 'Mastodon Post Attributes', 'sync-mastodon' ),
19 | 'insert_into_item' => __( 'Insert into Mastodon Post', 'sync-mastodon' ),
20 | 'uploaded_to_this_item' => __( 'Uploaded to this Mastodon Post', 'sync-mastodon' ),
21 | 'featured_image' => _x( 'Featured Image', Sync_Mastodon_Options::get_post_type(), 'sync-mastodon' ),
22 | 'set_featured_image' => _x( 'Set featured image', Sync_Mastodon_Options::get_post_type(), 'sync-mastodon' ),
23 | 'remove_featured_image' => _x( 'Remove featured image', Sync_Mastodon_Options::get_post_type(), 'sync-mastodon' ),
24 | 'use_featured_image' => _x( 'Use as featured image', Sync_Mastodon_Options::get_post_type(), 'sync-mastodon' ),
25 | 'filter_items_list' => __( 'Filter Mastodon Posts list', 'sync-mastodon' ),
26 | 'items_list_navigation' => __( 'Mastodon Posts list navigation', 'sync-mastodon' ),
27 | 'items_list' => __( 'Mastodon Posts list', 'sync-mastodon' ),
28 | 'new_item' => __( 'New Mastodon Post', 'sync-mastodon' ),
29 | 'add_new' => __( 'Add New', 'sync-mastodon' ),
30 | 'add_new_item' => __( 'Add New Mastodon Post', 'sync-mastodon' ),
31 | 'edit_item' => __( 'Edit Mastodon Post', 'sync-mastodon' ),
32 | 'view_item' => __( 'View Mastodon Post', 'sync-mastodon' ),
33 | 'view_items' => __( 'View Mastodon Posts', 'sync-mastodon' ),
34 | 'search_items' => __( 'Search Mastodon Posts', 'sync-mastodon' ),
35 | 'not_found' => __( 'No Mastodon Posts found', 'sync-mastodon' ),
36 | 'not_found_in_trash' => __( 'No Mastodon Posts found in trash', 'sync-mastodon' ),
37 | 'parent_item_colon' => __( 'Parent Mastodon Post:', 'sync-mastodon' ),
38 | 'menu_name' => __( 'Mastodon Posts', 'sync-mastodon' ),
39 | ],
40 | 'public' => true,
41 | 'hierarchical' => false,
42 | 'show_ui' => true,
43 | 'show_in_nav_menus' => true,
44 | 'supports' => [ 'title', 'editor', 'author', 'custom-fields', 'excerpt' ],
45 | 'has_archive' => true,
46 | 'rewrite' => true,
47 | 'exclude_from_search' => true,
48 | 'query_var' => true,
49 | 'menu_position' => null,
50 | 'menu_icon' => 'dashicons-pressthis',
51 | 'show_in_rest' => true,
52 | 'rest_base' => 'mastodon-post',
53 | 'rest_controller_class' => 'WP_REST_Posts_Controller',
54 | ];
55 |
56 | $mastodon_post_post_type_options = apply_filters( 'sync-mastodon-post-post-type-options', $mastodon_post_post_type_options );
57 |
58 | register_post_type( 'mastodon-post', $mastodon_post_post_type_options );
59 |
60 | }
61 | add_action( 'init', 'mastodon_post_init' );
62 |
63 | /**
64 | * Sets the post updated messages for the `mastodon_post` post type.
65 | *
66 | * @param array $messages Post updated messages.
67 | * @return array Messages for the `mastodon_post` post type.
68 | */
69 | function mastodon_post_updated_messages( $messages ) {
70 | global $post;
71 |
72 | $permalink = get_permalink( $post );
73 |
74 | $messages[ Sync_Mastodon_Options::get_post_type() ] = [
75 | 0 => '', // Unused. Messages start at index 1.
76 | /* translators: %s: post permalink */
77 | 1 => sprintf( __( 'Mastodon Post updated. View Mastodon Post', 'sync-mastodon' ), esc_url( $permalink ) ),
78 | 2 => __( 'Custom field updated.', 'sync-mastodon' ),
79 | 3 => __( 'Custom field deleted.', 'sync-mastodon' ),
80 | 4 => __( 'Mastodon Post updated.', 'sync-mastodon' ),
81 | /* translators: %s: date and time of the revision */
82 | 5 => isset( $_GET['revision'] ) ? sprintf( __( 'Mastodon Post restored to revision from %s', 'sync-mastodon' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
83 | /* translators: %s: post permalink */
84 | 6 => sprintf( __( 'Mastodon Post published. View Mastodon Post', 'sync-mastodon' ), esc_url( $permalink ) ),
85 | 7 => __( 'Mastodon Post saved.', 'sync-mastodon' ),
86 | /* translators: %s: post permalink */
87 | 8 => sprintf( __( 'Mastodon Post submitted. Preview Mastodon Post', 'sync-mastodon' ), esc_url( add_query_arg( 'preview', 'true', $permalink ) ) ),
88 | /* translators: 1: Publish box date format, see https://secure.php.net/date 2: Post permalink */
89 | 9 => sprintf(
90 | __( 'Mastodon Post scheduled for: %1$s. Preview Mastodon Post', 'sync-mastodon' ),
91 | date_i18n( __( 'M j, Y @ G:i', 'sync-mastodon' ), strtotime( $post->post_date ) ), esc_url( $permalink )
92 | ),
93 | /* translators: %s: post permalink */
94 | 10 => sprintf( __( 'Mastodon Post draft updated. Preview Mastodon Post', 'sync-mastodon' ), esc_url( add_query_arg( 'preview', 'true', $permalink ) ) ),
95 | ];
96 |
97 | return $messages;
98 | }
99 | add_filter( 'post_updated_messages', 'mastodon_post_updated_messages' );
100 |
--------------------------------------------------------------------------------
/src/taxonomies/mastodon-tag.php:
--------------------------------------------------------------------------------
1 | false,
11 | 'public' => true,
12 | 'show_in_nav_menus' => true,
13 | 'show_ui' => true,
14 | 'show_admin_column' => false,
15 | 'query_var' => true,
16 | 'rewrite' => true,
17 | 'capabilities' => [
18 | 'manage_terms' => 'edit_posts',
19 | 'edit_terms' => 'edit_posts',
20 | 'delete_terms' => 'edit_posts',
21 | 'assign_terms' => 'edit_posts',
22 | ],
23 | 'labels' => [
24 | 'name' => __( 'Mastodon Tags', 'sync-mastodon' ),
25 | 'singular_name' => _x( 'Mastodon Tag', 'taxonomy general name', 'sync-mastodon' ),
26 | 'search_items' => __( 'Search Mastodon Tags', 'sync-mastodon' ),
27 | 'popular_items' => __( 'Popular Mastodon Tags', 'sync-mastodon' ),
28 | 'all_items' => __( 'All Mastodon Tags', 'sync-mastodon' ),
29 | 'parent_item' => __( 'Parent Mastodon Tag', 'sync-mastodon' ),
30 | 'parent_item_colon' => __( 'Parent Mastodon Tag:', 'sync-mastodon' ),
31 | 'edit_item' => __( 'Edit Mastodon Tag', 'sync-mastodon' ),
32 | 'update_item' => __( 'Update Mastodon Tag', 'sync-mastodon' ),
33 | 'view_item' => __( 'View Mastodon Tag', 'sync-mastodon' ),
34 | 'add_new_item' => __( 'Add New Mastodon Tag', 'sync-mastodon' ),
35 | 'new_item_name' => __( 'New Mastodon Tag', 'sync-mastodon' ),
36 | 'separate_items_with_commas' => __( 'Separate Mastodon Tags with commas', 'sync-mastodon' ),
37 | 'add_or_remove_items' => __( 'Add or remove Mastodon Tags', 'sync-mastodon' ),
38 | 'choose_from_most_used' => __( 'Choose from the most used Mastodon Tags', 'sync-mastodon' ),
39 | 'not_found' => __( 'No Mastodon Tags found.', 'sync-mastodon' ),
40 | 'no_terms' => __( 'No Mastodon Tags', 'sync-mastodon' ),
41 | 'menu_name' => __( 'Mastodon Tags', 'sync-mastodon' ),
42 | 'items_list_navigation' => __( 'Mastodon Tags list navigation', 'sync-mastodon' ),
43 | 'items_list' => __( 'Mastodon Tags list', 'sync-mastodon' ),
44 | 'most_used' => _x( 'Most Used', 'mastodon-tag', 'sync-mastodon' ),
45 | 'back_to_items' => __( '← Back to Mastodon Tags', 'sync-mastodon' ),
46 | ],
47 | 'show_in_rest' => true,
48 | 'rest_base' => 'mastodon-tag',
49 | 'rest_controller_class' => 'WP_REST_Terms_Controller',
50 | ]
51 | );
52 |
53 | }
54 | add_action( 'init', 'mastodon_tag_init' );
55 |
56 | /**
57 | * Sets the post updated messages for the `mastodon_tag` taxonomy.
58 | *
59 | * @param array $messages Post updated messages.
60 | * @return array Messages for the `mastodon_tag` taxonomy.
61 | */
62 | function mastodon_tag_updated_messages( $messages ) {
63 | $messages['mastodon-tag'] = [
64 | 0 => '', // Unused. Messages start at index 1.
65 | 1 => __( 'Mastodon Tag added.', 'sync-mastodon' ),
66 | 2 => __( 'Mastodon Tag deleted.', 'sync-mastodon' ),
67 | 3 => __( 'Mastodon Tag updated.', 'sync-mastodon' ),
68 | 4 => __( 'Mastodon Tag not added.', 'sync-mastodon' ),
69 | 5 => __( 'Mastodon Tag not updated.', 'sync-mastodon' ),
70 | 6 => __( 'Mastodon Tags deleted.', 'sync-mastodon' ),
71 | ];
72 |
73 | return $messages;
74 | }
75 | add_filter( 'term_updated_messages', 'mastodon_tag_updated_messages' );
76 |
--------------------------------------------------------------------------------
/sync-mastodon.php:
--------------------------------------------------------------------------------
1 | register_deactivation_hook();
45 | }
46 |
47 | /**
48 | * Run any init hook actions
49 | *
50 | * @return void
51 | */
52 | public function init_hooks() {
53 | new Sync_Mastodon_Cron();
54 | new Sync_Mastodon_Meta_Boxes();
55 | new Sync_Mastodon_WPCLI();
56 | }
57 |
58 | /**
59 | * Run any admin menu hook actions
60 | *
61 | * @return void
62 | */
63 | public function admin_menu_hooks() {
64 | new Sync_Mastodon_Admin();
65 | }
66 |
67 | /**
68 | * Register a deactivation hook - this will trigger the sync_mastodon_deactivate action
69 | * so anything that needs to be done on deactivation should be done using that hook.
70 | *
71 | * @return void
72 | */
73 | public function register_deactivation_hook() {
74 | register_deactivation_hook( __FILE__, [ $this, 'run_deactivation_hook' ] );
75 | }
76 |
77 | /**
78 | * This actually does the sync_mastodon_deactivate hook
79 | */
80 | public function run_deactivation_hook() {
81 | do_action( 'sync_mastodon_deactivate' );
82 | }
83 |
84 | /**
85 | * This takes a timestamp and turns it into local time using the gmt_offset options
86 | */
87 | public static function make_time_local( $timestamp ) {
88 | $offset_secs = ( (int) get_option( 'gmt_offset' ) ) * 60 * 60;
89 | return $timestamp + $offset_secs;
90 | }
91 |
92 | /**
93 | * This does information logging based on how the sync has been called
94 | */
95 | public static function log( $message ) {
96 | if ( class_exists( 'WP_CLI' ) ) {
97 | \WP_CLI::log( $message );
98 | }
99 | return;
100 | }
101 |
102 | /**
103 | * This does error logging based on how the sync has been called
104 | */
105 | public static function error( $message ) {
106 | if ( class_exists( 'WP_CLI' ) ) {
107 | \WP_CLI::error( $message );
108 | }
109 | }
110 |
111 | }
112 |
113 | $syncmastodon_instance = new Sync_Mastodon();
114 |
--------------------------------------------------------------------------------
/vendor/autoload.php:
--------------------------------------------------------------------------------
1 |
7 | * Jordi Boggiano
8 | *
9 | * For the full copyright and license information, please view the LICENSE
10 | * file that was distributed with this source code.
11 | */
12 |
13 | namespace Composer\Autoload;
14 |
15 | /**
16 | * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17 | *
18 | * $loader = new \Composer\Autoload\ClassLoader();
19 | *
20 | * // register classes with namespaces
21 | * $loader->add('Symfony\Component', __DIR__.'/component');
22 | * $loader->add('Symfony', __DIR__.'/framework');
23 | *
24 | * // activate the autoloader
25 | * $loader->register();
26 | *
27 | * // to enable searching the include path (eg. for PEAR packages)
28 | * $loader->setUseIncludePath(true);
29 | *
30 | * In this example, if you try to use a class in the Symfony\Component
31 | * namespace or one of its children (Symfony\Component\Console for instance),
32 | * the autoloader will first look for the class under the component/
33 | * directory, and it will then fallback to the framework/ directory if not
34 | * found before giving up.
35 | *
36 | * This class is loosely based on the Symfony UniversalClassLoader.
37 | *
38 | * @author Fabien Potencier
39 | * @author Jordi Boggiano
40 | * @see https://www.php-fig.org/psr/psr-0/
41 | * @see https://www.php-fig.org/psr/psr-4/
42 | */
43 | class ClassLoader
44 | {
45 | /** @var \Closure(string):void */
46 | private $includeFile;
47 |
48 | /** @var ?string */
49 | private $vendorDir;
50 |
51 | // PSR-4
52 | /**
53 | * @var array[]
54 | * @psalm-var array>
55 | */
56 | private $prefixLengthsPsr4 = array();
57 | /**
58 | * @var array[]
59 | * @psalm-var array>
60 | */
61 | private $prefixDirsPsr4 = array();
62 | /**
63 | * @var array[]
64 | * @psalm-var array
65 | */
66 | private $fallbackDirsPsr4 = array();
67 |
68 | // PSR-0
69 | /**
70 | * @var array[]
71 | * @psalm-var array>
72 | */
73 | private $prefixesPsr0 = array();
74 | /**
75 | * @var array[]
76 | * @psalm-var array
77 | */
78 | private $fallbackDirsPsr0 = array();
79 |
80 | /** @var bool */
81 | private $useIncludePath = false;
82 |
83 | /**
84 | * @var string[]
85 | * @psalm-var array
86 | */
87 | private $classMap = array();
88 |
89 | /** @var bool */
90 | private $classMapAuthoritative = false;
91 |
92 | /**
93 | * @var bool[]
94 | * @psalm-var array
95 | */
96 | private $missingClasses = array();
97 |
98 | /** @var ?string */
99 | private $apcuPrefix;
100 |
101 | /**
102 | * @var self[]
103 | */
104 | private static $registeredLoaders = array();
105 |
106 | /**
107 | * @param ?string $vendorDir
108 | */
109 | public function __construct($vendorDir = null)
110 | {
111 | $this->vendorDir = $vendorDir;
112 |
113 | /**
114 | * Scope isolated include.
115 | *
116 | * Prevents access to $this/self from included files.
117 | *
118 | * @param string $file
119 | * @return void
120 | */
121 | $this->includeFile = static function($file) {
122 | include $file;
123 | };
124 | }
125 |
126 | /**
127 | * @return string[]
128 | */
129 | public function getPrefixes()
130 | {
131 | if (!empty($this->prefixesPsr0)) {
132 | return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
133 | }
134 |
135 | return array();
136 | }
137 |
138 | /**
139 | * @return array[]
140 | * @psalm-return array>
141 | */
142 | public function getPrefixesPsr4()
143 | {
144 | return $this->prefixDirsPsr4;
145 | }
146 |
147 | /**
148 | * @return array[]
149 | * @psalm-return array
150 | */
151 | public function getFallbackDirs()
152 | {
153 | return $this->fallbackDirsPsr0;
154 | }
155 |
156 | /**
157 | * @return array[]
158 | * @psalm-return array
159 | */
160 | public function getFallbackDirsPsr4()
161 | {
162 | return $this->fallbackDirsPsr4;
163 | }
164 |
165 | /**
166 | * @return string[] Array of classname => path
167 | * @psalm-return array
168 | */
169 | public function getClassMap()
170 | {
171 | return $this->classMap;
172 | }
173 |
174 | /**
175 | * @param string[] $classMap Class to filename map
176 | * @psalm-param array $classMap
177 | *
178 | * @return void
179 | */
180 | public function addClassMap(array $classMap)
181 | {
182 | if ($this->classMap) {
183 | $this->classMap = array_merge($this->classMap, $classMap);
184 | } else {
185 | $this->classMap = $classMap;
186 | }
187 | }
188 |
189 | /**
190 | * Registers a set of PSR-0 directories for a given prefix, either
191 | * appending or prepending to the ones previously set for this prefix.
192 | *
193 | * @param string $prefix The prefix
194 | * @param string[]|string $paths The PSR-0 root directories
195 | * @param bool $prepend Whether to prepend the directories
196 | *
197 | * @return void
198 | */
199 | public function add($prefix, $paths, $prepend = false)
200 | {
201 | if (!$prefix) {
202 | if ($prepend) {
203 | $this->fallbackDirsPsr0 = array_merge(
204 | (array) $paths,
205 | $this->fallbackDirsPsr0
206 | );
207 | } else {
208 | $this->fallbackDirsPsr0 = array_merge(
209 | $this->fallbackDirsPsr0,
210 | (array) $paths
211 | );
212 | }
213 |
214 | return;
215 | }
216 |
217 | $first = $prefix[0];
218 | if (!isset($this->prefixesPsr0[$first][$prefix])) {
219 | $this->prefixesPsr0[$first][$prefix] = (array) $paths;
220 |
221 | return;
222 | }
223 | if ($prepend) {
224 | $this->prefixesPsr0[$first][$prefix] = array_merge(
225 | (array) $paths,
226 | $this->prefixesPsr0[$first][$prefix]
227 | );
228 | } else {
229 | $this->prefixesPsr0[$first][$prefix] = array_merge(
230 | $this->prefixesPsr0[$first][$prefix],
231 | (array) $paths
232 | );
233 | }
234 | }
235 |
236 | /**
237 | * Registers a set of PSR-4 directories for a given namespace, either
238 | * appending or prepending to the ones previously set for this namespace.
239 | *
240 | * @param string $prefix The prefix/namespace, with trailing '\\'
241 | * @param string[]|string $paths The PSR-4 base directories
242 | * @param bool $prepend Whether to prepend the directories
243 | *
244 | * @throws \InvalidArgumentException
245 | *
246 | * @return void
247 | */
248 | public function addPsr4($prefix, $paths, $prepend = false)
249 | {
250 | if (!$prefix) {
251 | // Register directories for the root namespace.
252 | if ($prepend) {
253 | $this->fallbackDirsPsr4 = array_merge(
254 | (array) $paths,
255 | $this->fallbackDirsPsr4
256 | );
257 | } else {
258 | $this->fallbackDirsPsr4 = array_merge(
259 | $this->fallbackDirsPsr4,
260 | (array) $paths
261 | );
262 | }
263 | } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
264 | // Register directories for a new namespace.
265 | $length = strlen($prefix);
266 | if ('\\' !== $prefix[$length - 1]) {
267 | throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
268 | }
269 | $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
270 | $this->prefixDirsPsr4[$prefix] = (array) $paths;
271 | } elseif ($prepend) {
272 | // Prepend directories for an already registered namespace.
273 | $this->prefixDirsPsr4[$prefix] = array_merge(
274 | (array) $paths,
275 | $this->prefixDirsPsr4[$prefix]
276 | );
277 | } else {
278 | // Append directories for an already registered namespace.
279 | $this->prefixDirsPsr4[$prefix] = array_merge(
280 | $this->prefixDirsPsr4[$prefix],
281 | (array) $paths
282 | );
283 | }
284 | }
285 |
286 | /**
287 | * Registers a set of PSR-0 directories for a given prefix,
288 | * replacing any others previously set for this prefix.
289 | *
290 | * @param string $prefix The prefix
291 | * @param string[]|string $paths The PSR-0 base directories
292 | *
293 | * @return void
294 | */
295 | public function set($prefix, $paths)
296 | {
297 | if (!$prefix) {
298 | $this->fallbackDirsPsr0 = (array) $paths;
299 | } else {
300 | $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
301 | }
302 | }
303 |
304 | /**
305 | * Registers a set of PSR-4 directories for a given namespace,
306 | * replacing any others previously set for this namespace.
307 | *
308 | * @param string $prefix The prefix/namespace, with trailing '\\'
309 | * @param string[]|string $paths The PSR-4 base directories
310 | *
311 | * @throws \InvalidArgumentException
312 | *
313 | * @return void
314 | */
315 | public function setPsr4($prefix, $paths)
316 | {
317 | if (!$prefix) {
318 | $this->fallbackDirsPsr4 = (array) $paths;
319 | } else {
320 | $length = strlen($prefix);
321 | if ('\\' !== $prefix[$length - 1]) {
322 | throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
323 | }
324 | $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
325 | $this->prefixDirsPsr4[$prefix] = (array) $paths;
326 | }
327 | }
328 |
329 | /**
330 | * Turns on searching the include path for class files.
331 | *
332 | * @param bool $useIncludePath
333 | *
334 | * @return void
335 | */
336 | public function setUseIncludePath($useIncludePath)
337 | {
338 | $this->useIncludePath = $useIncludePath;
339 | }
340 |
341 | /**
342 | * Can be used to check if the autoloader uses the include path to check
343 | * for classes.
344 | *
345 | * @return bool
346 | */
347 | public function getUseIncludePath()
348 | {
349 | return $this->useIncludePath;
350 | }
351 |
352 | /**
353 | * Turns off searching the prefix and fallback directories for classes
354 | * that have not been registered with the class map.
355 | *
356 | * @param bool $classMapAuthoritative
357 | *
358 | * @return void
359 | */
360 | public function setClassMapAuthoritative($classMapAuthoritative)
361 | {
362 | $this->classMapAuthoritative = $classMapAuthoritative;
363 | }
364 |
365 | /**
366 | * Should class lookup fail if not found in the current class map?
367 | *
368 | * @return bool
369 | */
370 | public function isClassMapAuthoritative()
371 | {
372 | return $this->classMapAuthoritative;
373 | }
374 |
375 | /**
376 | * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
377 | *
378 | * @param string|null $apcuPrefix
379 | *
380 | * @return void
381 | */
382 | public function setApcuPrefix($apcuPrefix)
383 | {
384 | $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
385 | }
386 |
387 | /**
388 | * The APCu prefix in use, or null if APCu caching is not enabled.
389 | *
390 | * @return string|null
391 | */
392 | public function getApcuPrefix()
393 | {
394 | return $this->apcuPrefix;
395 | }
396 |
397 | /**
398 | * Registers this instance as an autoloader.
399 | *
400 | * @param bool $prepend Whether to prepend the autoloader or not
401 | *
402 | * @return void
403 | */
404 | public function register($prepend = false)
405 | {
406 | spl_autoload_register(array($this, 'loadClass'), true, $prepend);
407 |
408 | if (null === $this->vendorDir) {
409 | return;
410 | }
411 |
412 | if ($prepend) {
413 | self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
414 | } else {
415 | unset(self::$registeredLoaders[$this->vendorDir]);
416 | self::$registeredLoaders[$this->vendorDir] = $this;
417 | }
418 | }
419 |
420 | /**
421 | * Unregisters this instance as an autoloader.
422 | *
423 | * @return void
424 | */
425 | public function unregister()
426 | {
427 | spl_autoload_unregister(array($this, 'loadClass'));
428 |
429 | if (null !== $this->vendorDir) {
430 | unset(self::$registeredLoaders[$this->vendorDir]);
431 | }
432 | }
433 |
434 | /**
435 | * Loads the given class or interface.
436 | *
437 | * @param string $class The name of the class
438 | * @return true|null True if loaded, null otherwise
439 | */
440 | public function loadClass($class)
441 | {
442 | if ($file = $this->findFile($class)) {
443 | ($this->includeFile)($file);
444 |
445 | return true;
446 | }
447 |
448 | return null;
449 | }
450 |
451 | /**
452 | * Finds the path to the file where the class is defined.
453 | *
454 | * @param string $class The name of the class
455 | *
456 | * @return string|false The path if found, false otherwise
457 | */
458 | public function findFile($class)
459 | {
460 | // class map lookup
461 | if (isset($this->classMap[$class])) {
462 | return $this->classMap[$class];
463 | }
464 | if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
465 | return false;
466 | }
467 | if (null !== $this->apcuPrefix) {
468 | $file = apcu_fetch($this->apcuPrefix.$class, $hit);
469 | if ($hit) {
470 | return $file;
471 | }
472 | }
473 |
474 | $file = $this->findFileWithExtension($class, '.php');
475 |
476 | // Search for Hack files if we are running on HHVM
477 | if (false === $file && defined('HHVM_VERSION')) {
478 | $file = $this->findFileWithExtension($class, '.hh');
479 | }
480 |
481 | if (null !== $this->apcuPrefix) {
482 | apcu_add($this->apcuPrefix.$class, $file);
483 | }
484 |
485 | if (false === $file) {
486 | // Remember that this class does not exist.
487 | $this->missingClasses[$class] = true;
488 | }
489 |
490 | return $file;
491 | }
492 |
493 | /**
494 | * Returns the currently registered loaders indexed by their corresponding vendor directories.
495 | *
496 | * @return self[]
497 | */
498 | public static function getRegisteredLoaders()
499 | {
500 | return self::$registeredLoaders;
501 | }
502 |
503 | /**
504 | * @param string $class
505 | * @param string $ext
506 | * @return string|false
507 | */
508 | private function findFileWithExtension($class, $ext)
509 | {
510 | // PSR-4 lookup
511 | $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
512 |
513 | $first = $class[0];
514 | if (isset($this->prefixLengthsPsr4[$first])) {
515 | $subPath = $class;
516 | while (false !== $lastPos = strrpos($subPath, '\\')) {
517 | $subPath = substr($subPath, 0, $lastPos);
518 | $search = $subPath . '\\';
519 | if (isset($this->prefixDirsPsr4[$search])) {
520 | $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
521 | foreach ($this->prefixDirsPsr4[$search] as $dir) {
522 | if (file_exists($file = $dir . $pathEnd)) {
523 | return $file;
524 | }
525 | }
526 | }
527 | }
528 | }
529 |
530 | // PSR-4 fallback dirs
531 | foreach ($this->fallbackDirsPsr4 as $dir) {
532 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
533 | return $file;
534 | }
535 | }
536 |
537 | // PSR-0 lookup
538 | if (false !== $pos = strrpos($class, '\\')) {
539 | // namespaced class name
540 | $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
541 | . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
542 | } else {
543 | // PEAR-like class name
544 | $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
545 | }
546 |
547 | if (isset($this->prefixesPsr0[$first])) {
548 | foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
549 | if (0 === strpos($class, $prefix)) {
550 | foreach ($dirs as $dir) {
551 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
552 | return $file;
553 | }
554 | }
555 | }
556 | }
557 | }
558 |
559 | // PSR-0 fallback dirs
560 | foreach ($this->fallbackDirsPsr0 as $dir) {
561 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
562 | return $file;
563 | }
564 | }
565 |
566 | // PSR-0 include paths.
567 | if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
568 | return $file;
569 | }
570 |
571 | return false;
572 | }
573 | }
574 |
--------------------------------------------------------------------------------
/vendor/composer/InstalledVersions.php:
--------------------------------------------------------------------------------
1 |
7 | * Jordi Boggiano
8 | *
9 | * For the full copyright and license information, please view the LICENSE
10 | * file that was distributed with this source code.
11 | */
12 |
13 | namespace Composer;
14 |
15 | use Composer\Autoload\ClassLoader;
16 | use Composer\Semver\VersionParser;
17 |
18 | /**
19 | * This class is copied in every Composer installed project and available to all
20 | *
21 | * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
22 | *
23 | * To require its presence, you can require `composer-runtime-api ^2.0`
24 | *
25 | * @final
26 | */
27 | class InstalledVersions
28 | {
29 | /**
30 | * @var mixed[]|null
31 | * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null
32 | */
33 | private static $installed;
34 |
35 | /**
36 | * @var bool|null
37 | */
38 | private static $canGetVendors;
39 |
40 | /**
41 | * @var array[]
42 | * @psalm-var array}>
43 | */
44 | private static $installedByVendor = array();
45 |
46 | /**
47 | * Returns a list of all package names which are present, either by being installed, replaced or provided
48 | *
49 | * @return string[]
50 | * @psalm-return list
51 | */
52 | public static function getInstalledPackages()
53 | {
54 | $packages = array();
55 | foreach (self::getInstalled() as $installed) {
56 | $packages[] = array_keys($installed['versions']);
57 | }
58 |
59 | if (1 === \count($packages)) {
60 | return $packages[0];
61 | }
62 |
63 | return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
64 | }
65 |
66 | /**
67 | * Returns a list of all package names with a specific type e.g. 'library'
68 | *
69 | * @param string $type
70 | * @return string[]
71 | * @psalm-return list
72 | */
73 | public static function getInstalledPackagesByType($type)
74 | {
75 | $packagesByType = array();
76 |
77 | foreach (self::getInstalled() as $installed) {
78 | foreach ($installed['versions'] as $name => $package) {
79 | if (isset($package['type']) && $package['type'] === $type) {
80 | $packagesByType[] = $name;
81 | }
82 | }
83 | }
84 |
85 | return $packagesByType;
86 | }
87 |
88 | /**
89 | * Checks whether the given package is installed
90 | *
91 | * This also returns true if the package name is provided or replaced by another package
92 | *
93 | * @param string $packageName
94 | * @param bool $includeDevRequirements
95 | * @return bool
96 | */
97 | public static function isInstalled($packageName, $includeDevRequirements = true)
98 | {
99 | foreach (self::getInstalled() as $installed) {
100 | if (isset($installed['versions'][$packageName])) {
101 | return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
102 | }
103 | }
104 |
105 | return false;
106 | }
107 |
108 | /**
109 | * Checks whether the given package satisfies a version constraint
110 | *
111 | * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
112 | *
113 | * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
114 | *
115 | * @param VersionParser $parser Install composer/semver to have access to this class and functionality
116 | * @param string $packageName
117 | * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
118 | * @return bool
119 | */
120 | public static function satisfies(VersionParser $parser, $packageName, $constraint)
121 | {
122 | $constraint = $parser->parseConstraints($constraint);
123 | $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
124 |
125 | return $provided->matches($constraint);
126 | }
127 |
128 | /**
129 | * Returns a version constraint representing all the range(s) which are installed for a given package
130 | *
131 | * It is easier to use this via isInstalled() with the $constraint argument if you need to check
132 | * whether a given version of a package is installed, and not just whether it exists
133 | *
134 | * @param string $packageName
135 | * @return string Version constraint usable with composer/semver
136 | */
137 | public static function getVersionRanges($packageName)
138 | {
139 | foreach (self::getInstalled() as $installed) {
140 | if (!isset($installed['versions'][$packageName])) {
141 | continue;
142 | }
143 |
144 | $ranges = array();
145 | if (isset($installed['versions'][$packageName]['pretty_version'])) {
146 | $ranges[] = $installed['versions'][$packageName]['pretty_version'];
147 | }
148 | if (array_key_exists('aliases', $installed['versions'][$packageName])) {
149 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
150 | }
151 | if (array_key_exists('replaced', $installed['versions'][$packageName])) {
152 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
153 | }
154 | if (array_key_exists('provided', $installed['versions'][$packageName])) {
155 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
156 | }
157 |
158 | return implode(' || ', $ranges);
159 | }
160 |
161 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
162 | }
163 |
164 | /**
165 | * @param string $packageName
166 | * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
167 | */
168 | public static function getVersion($packageName)
169 | {
170 | foreach (self::getInstalled() as $installed) {
171 | if (!isset($installed['versions'][$packageName])) {
172 | continue;
173 | }
174 |
175 | if (!isset($installed['versions'][$packageName]['version'])) {
176 | return null;
177 | }
178 |
179 | return $installed['versions'][$packageName]['version'];
180 | }
181 |
182 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
183 | }
184 |
185 | /**
186 | * @param string $packageName
187 | * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
188 | */
189 | public static function getPrettyVersion($packageName)
190 | {
191 | foreach (self::getInstalled() as $installed) {
192 | if (!isset($installed['versions'][$packageName])) {
193 | continue;
194 | }
195 |
196 | if (!isset($installed['versions'][$packageName]['pretty_version'])) {
197 | return null;
198 | }
199 |
200 | return $installed['versions'][$packageName]['pretty_version'];
201 | }
202 |
203 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
204 | }
205 |
206 | /**
207 | * @param string $packageName
208 | * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
209 | */
210 | public static function getReference($packageName)
211 | {
212 | foreach (self::getInstalled() as $installed) {
213 | if (!isset($installed['versions'][$packageName])) {
214 | continue;
215 | }
216 |
217 | if (!isset($installed['versions'][$packageName]['reference'])) {
218 | return null;
219 | }
220 |
221 | return $installed['versions'][$packageName]['reference'];
222 | }
223 |
224 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
225 | }
226 |
227 | /**
228 | * @param string $packageName
229 | * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
230 | */
231 | public static function getInstallPath($packageName)
232 | {
233 | foreach (self::getInstalled() as $installed) {
234 | if (!isset($installed['versions'][$packageName])) {
235 | continue;
236 | }
237 |
238 | return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
239 | }
240 |
241 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
242 | }
243 |
244 | /**
245 | * @return array
246 | * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
247 | */
248 | public static function getRootPackage()
249 | {
250 | $installed = self::getInstalled();
251 |
252 | return $installed[0]['root'];
253 | }
254 |
255 | /**
256 | * Returns the raw installed.php data for custom implementations
257 | *
258 | * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
259 | * @return array[]
260 | * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}
261 | */
262 | public static function getRawData()
263 | {
264 | @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
265 |
266 | if (null === self::$installed) {
267 | // only require the installed.php file if this file is loaded from its dumped location,
268 | // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
269 | if (substr(__DIR__, -8, 1) !== 'C') {
270 | self::$installed = include __DIR__ . '/installed.php';
271 | } else {
272 | self::$installed = array();
273 | }
274 | }
275 |
276 | return self::$installed;
277 | }
278 |
279 | /**
280 | * Returns the raw data of all installed.php which are currently loaded for custom implementations
281 | *
282 | * @return array[]
283 | * @psalm-return list}>
284 | */
285 | public static function getAllRawData()
286 | {
287 | return self::getInstalled();
288 | }
289 |
290 | /**
291 | * Lets you reload the static array from another file
292 | *
293 | * This is only useful for complex integrations in which a project needs to use
294 | * this class but then also needs to execute another project's autoloader in process,
295 | * and wants to ensure both projects have access to their version of installed.php.
296 | *
297 | * A typical case would be PHPUnit, where it would need to make sure it reads all
298 | * the data it needs from this class, then call reload() with
299 | * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
300 | * the project in which it runs can then also use this class safely, without
301 | * interference between PHPUnit's dependencies and the project's dependencies.
302 | *
303 | * @param array[] $data A vendor/composer/installed.php data set
304 | * @return void
305 | *
306 | * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data
307 | */
308 | public static function reload($data)
309 | {
310 | self::$installed = $data;
311 | self::$installedByVendor = array();
312 | }
313 |
314 | /**
315 | * @return array[]
316 | * @psalm-return list}>
317 | */
318 | private static function getInstalled()
319 | {
320 | if (null === self::$canGetVendors) {
321 | self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
322 | }
323 |
324 | $installed = array();
325 |
326 | if (self::$canGetVendors) {
327 | foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
328 | if (isset(self::$installedByVendor[$vendorDir])) {
329 | $installed[] = self::$installedByVendor[$vendorDir];
330 | } elseif (is_file($vendorDir.'/composer/installed.php')) {
331 | $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
332 | if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
333 | self::$installed = $installed[count($installed) - 1];
334 | }
335 | }
336 | }
337 | }
338 |
339 | if (null === self::$installed) {
340 | // only require the installed.php file if this file is loaded from its dumped location,
341 | // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
342 | if (substr(__DIR__, -8, 1) !== 'C') {
343 | self::$installed = require __DIR__ . '/installed.php';
344 | } else {
345 | self::$installed = array();
346 | }
347 | }
348 | $installed[] = self::$installed;
349 |
350 | return $installed;
351 | }
352 | }
353 |
--------------------------------------------------------------------------------
/vendor/composer/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Copyright (c) Nils Adermann, Jordi Boggiano
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the "Software"), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is furnished
9 | to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in all
12 | copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | THE SOFTWARE.
21 |
22 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_classmap.php:
--------------------------------------------------------------------------------
1 | $vendorDir . '/composer/InstalledVersions.php',
10 | );
11 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_namespaces.php:
--------------------------------------------------------------------------------
1 | register(true);
33 |
34 | return $loader;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_static.php:
--------------------------------------------------------------------------------
1 | __DIR__ . '/..' . '/composer/InstalledVersions.php',
11 | );
12 |
13 | public static function getInitializer(ClassLoader $loader)
14 | {
15 | return \Closure::bind(function () use ($loader) {
16 | $loader->classMap = ComposerStaticInite52e8e90c47157470d368af20f00b4db::$classMap;
17 |
18 | }, null, ClassLoader::class);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/vendor/composer/installed.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": [],
3 | "dev": false,
4 | "dev-package-names": []
5 | }
6 |
--------------------------------------------------------------------------------
/vendor/composer/installed.php:
--------------------------------------------------------------------------------
1 | array(
3 | 'name' => 'rosswintle/sync-mastodon',
4 | 'pretty_version' => 'dev-main',
5 | 'version' => 'dev-main',
6 | 'reference' => '59b48e4b79adc39de9682824bf8bdcf2118c9dce',
7 | 'type' => 'project',
8 | 'install_path' => __DIR__ . '/../../',
9 | 'aliases' => array(),
10 | 'dev' => false,
11 | ),
12 | 'versions' => array(
13 | 'rosswintle/sync-mastodon' => array(
14 | 'pretty_version' => 'dev-main',
15 | 'version' => 'dev-main',
16 | 'reference' => '59b48e4b79adc39de9682824bf8bdcf2118c9dce',
17 | 'type' => 'project',
18 | 'install_path' => __DIR__ . '/../../',
19 | 'aliases' => array(),
20 | 'dev_requirement' => false,
21 | ),
22 | ),
23 | );
24 |
--------------------------------------------------------------------------------