N, [>=M, !=N,
getEnd()->getOperator() === '<' && $i+1 < $count) {
- $nextInterval = $intervals['numeric'][$i+1];
- if ($interval->getEnd()->getVersion() === $nextInterval->getStart()->getVersion() && $nextInterval->getStart()->getOperator() === '>') {
- // only add a start if we didn't already do so, can be skipped if we're looking at second
- // interval in [>=M, N, P, =M, !=N] already and we only want to add !=P right now
- if (\count($unEqualConstraints) === 0 && (string) $interval->getStart() !== (string) Interval::fromZero()) {
- $unEqualConstraints[] = $interval->getStart();
- }
- $unEqualConstraints[] = new Constraint('!=', $interval->getEnd()->getVersion());
- continue;
- }
- }
-
- if (\count($unEqualConstraints) > 0) {
- // this is where the end of the following interval of a != constraint is added as explained above
- if ((string) $interval->getEnd() !== (string) Interval::untilPositiveInfinity()) {
- $unEqualConstraints[] = $interval->getEnd();
- }
-
- // count is 1 if entire constraint is just one != expression
- if (\count($unEqualConstraints) > 1) {
- $constraints[] = new MultiConstraint($unEqualConstraints, true);
- } else {
- $constraints[] = $unEqualConstraints[0];
- }
-
- $unEqualConstraints = array();
- continue;
- }
-
- // convert back >= x - <= x intervals to == x
- if ($interval->getStart()->getVersion() === $interval->getEnd()->getVersion() && $interval->getStart()->getOperator() === '>=' && $interval->getEnd()->getOperator() === '<=') {
- $constraints[] = new Constraint('==', $interval->getStart()->getVersion());
- continue;
- }
-
- if ((string) $interval->getStart() === (string) Interval::fromZero()) {
- $constraints[] = $interval->getEnd();
- } elseif ((string) $interval->getEnd() === (string) Interval::untilPositiveInfinity()) {
- $constraints[] = $interval->getStart();
- } else {
- $constraints[] = new MultiConstraint(array($interval->getStart(), $interval->getEnd()), true);
- }
- }
- }
-
- $devConstraints = array();
-
- if (0 === \count($intervals['branches']['names'])) {
- if ($intervals['branches']['exclude']) {
- if ($hasNumericMatchAll) {
- return new MatchAllConstraint;
- }
- // otherwise constraint should contain a != operator and already cover this
- }
- } else {
- foreach ($intervals['branches']['names'] as $branchName) {
- if ($intervals['branches']['exclude']) {
- $devConstraints[] = new Constraint('!=', $branchName);
- } else {
- $devConstraints[] = new Constraint('==', $branchName);
- }
- }
-
- // excluded branches, e.g. != dev-foo are conjunctive with the interval, so
- // > 2.0 != dev-foo must return a conjunctive constraint
- if ($intervals['branches']['exclude']) {
- if (\count($constraints) > 1) {
- return new MultiConstraint(array_merge(
- array(new MultiConstraint($constraints, false)),
- $devConstraints
- ), true);
- }
-
- if (\count($constraints) === 1 && (string)$constraints[0] === (string)Interval::fromZero()) {
- if (\count($devConstraints) > 1) {
- return new MultiConstraint($devConstraints, true);
- }
- return $devConstraints[0];
- }
-
- return new MultiConstraint(array_merge($constraints, $devConstraints), true);
- }
-
- // otherwise devConstraints contains a list of == operators for branches which are disjunctive with the
- // rest of the constraint
- $constraints = array_merge($constraints, $devConstraints);
- }
-
- if (\count($constraints) > 1) {
- return new MultiConstraint($constraints, false);
- }
-
- if (\count($constraints) === 1) {
- return $constraints[0];
- }
-
- return new MatchNoneConstraint;
- }
-
- /**
- * Creates an array of numeric intervals and branch constraints representing a given constraint
- *
- * if the returned numeric array is empty it means the constraint matches nothing in the numeric range (0 - +inf)
- * if the returned branches array is empty it means no dev-* versions are matched
- * if a constraint matches all possible dev-* versions, branches will contain Interval::anyDev()
- *
- * @return array
- * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}}
- */
- public static function get(ConstraintInterface $constraint)
- {
- $key = (string) $constraint;
-
- if (!isset(self::$intervalsCache[$key])) {
- self::$intervalsCache[$key] = self::generateIntervals($constraint);
- }
-
- return self::$intervalsCache[$key];
- }
-
- /**
- * @param bool $stopOnFirstValidInterval
- *
- * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}}
- */
- private static function generateIntervals(ConstraintInterface $constraint, $stopOnFirstValidInterval = false)
- {
- if ($constraint instanceof MatchAllConstraint) {
- return array('numeric' => array(new Interval(Interval::fromZero(), Interval::untilPositiveInfinity())), 'branches' => Interval::anyDev());
- }
-
- if ($constraint instanceof MatchNoneConstraint) {
- return array('numeric' => array(), 'branches' => array('names' => array(), 'exclude' => false));
- }
-
- if ($constraint instanceof Constraint) {
- return self::generateSingleConstraintIntervals($constraint);
- }
-
- if (!$constraint instanceof MultiConstraint) {
- throw new \UnexpectedValueException('The constraint passed in should be an MatchAllConstraint, Constraint or MultiConstraint instance, got '.\get_class($constraint).'.');
- }
-
- $constraints = $constraint->getConstraints();
-
- $numericGroups = array();
- $constraintBranches = array();
- foreach ($constraints as $c) {
- $res = self::get($c);
- $numericGroups[] = $res['numeric'];
- $constraintBranches[] = $res['branches'];
- }
-
- if ($constraint->isDisjunctive()) {
- $branches = Interval::noDev();
- foreach ($constraintBranches as $b) {
- if ($b['exclude']) {
- if ($branches['exclude']) {
- // disjunctive constraint, so only exclude what's excluded in all constraints
- // !=a,!=b || !=b,!=c => !=b
- $branches['names'] = array_intersect($branches['names'], $b['names']);
- } else {
- // disjunctive constraint so exclude all names which are not explicitly included in the alternative
- // (==b || ==c) || !=a,!=b => !=a
- $branches['exclude'] = true;
- $branches['names'] = array_diff($b['names'], $branches['names']);
- }
- } else {
- if ($branches['exclude']) {
- // disjunctive constraint so exclude all names which are not explicitly included in the alternative
- // !=a,!=b || (==b || ==c) => !=a
- $branches['names'] = array_diff($branches['names'], $b['names']);
- } else {
- // disjunctive constraint, so just add all the other branches
- // (==a || ==b) || ==c => ==a || ==b || ==c
- $branches['names'] = array_merge($branches['names'], $b['names']);
- }
- }
- }
- } else {
- $branches = Interval::anyDev();
- foreach ($constraintBranches as $b) {
- if ($b['exclude']) {
- if ($branches['exclude']) {
- // conjunctive, so just add all branch names to be excluded
- // !=a && !=b => !=a,!=b
- $branches['names'] = array_merge($branches['names'], $b['names']);
- } else {
- // conjunctive, so only keep included names which are not excluded
- // (==a||==c) && !=a,!=b => ==c
- $branches['names'] = array_diff($branches['names'], $b['names']);
- }
- } else {
- if ($branches['exclude']) {
- // conjunctive, so only keep included names which are not excluded
- // !=a,!=b && (==a||==c) => ==c
- $branches['names'] = array_diff($b['names'], $branches['names']);
- $branches['exclude'] = false;
- } else {
- // conjunctive, so only keep names that are included in both
- // (==a||==b) && (==a||==c) => ==a
- $branches['names'] = array_intersect($branches['names'], $b['names']);
- }
- }
- }
- }
-
- $branches['names'] = array_unique($branches['names']);
-
- if (\count($numericGroups) === 1) {
- return array('numeric' => $numericGroups[0], 'branches' => $branches);
- }
-
- $borders = array();
- foreach ($numericGroups as $group) {
- foreach ($group as $interval) {
- $borders[] = array('version' => $interval->getStart()->getVersion(), 'operator' => $interval->getStart()->getOperator(), 'side' => 'start');
- $borders[] = array('version' => $interval->getEnd()->getVersion(), 'operator' => $interval->getEnd()->getOperator(), 'side' => 'end');
- }
- }
-
- $opSortOrder = self::$opSortOrder;
- usort($borders, function ($a, $b) use ($opSortOrder) {
- $order = version_compare($a['version'], $b['version']);
- if ($order === 0) {
- return $opSortOrder[$a['operator']] - $opSortOrder[$b['operator']];
- }
-
- return $order;
- });
-
- $activeIntervals = 0;
- $intervals = array();
- $index = 0;
- $activationThreshold = $constraint->isConjunctive() ? \count($numericGroups) : 1;
- $start = null;
- foreach ($borders as $border) {
- if ($border['side'] === 'start') {
- $activeIntervals++;
- } else {
- $activeIntervals--;
- }
- if (!$start && $activeIntervals >= $activationThreshold) {
- $start = new Constraint($border['operator'], $border['version']);
- } elseif ($start && $activeIntervals < $activationThreshold) {
- // filter out invalid intervals like > x - <= x, or >= x - < x
- if (
- version_compare($start->getVersion(), $border['version'], '=')
- && (
- ($start->getOperator() === '>' && $border['operator'] === '<=')
- || ($start->getOperator() === '>=' && $border['operator'] === '<')
- )
- ) {
- unset($intervals[$index]);
- } else {
- $intervals[$index] = new Interval($start, new Constraint($border['operator'], $border['version']));
- $index++;
-
- if ($stopOnFirstValidInterval) {
- break;
- }
- }
-
- $start = null;
- }
- }
-
- return array('numeric' => $intervals, 'branches' => $branches);
- }
-
- /**
- * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}}
- */
- private static function generateSingleConstraintIntervals(Constraint $constraint)
- {
- $op = $constraint->getOperator();
-
- // handle branch constraints first
- if (strpos($constraint->getVersion(), 'dev-') === 0) {
- $intervals = array();
- $branches = array('names' => array(), 'exclude' => false);
-
- // != dev-foo means any numeric version may match, we treat >/< like != they are not really defined for branches
- if ($op === '!=') {
- $intervals[] = new Interval(Interval::fromZero(), Interval::untilPositiveInfinity());
- $branches = array('names' => array($constraint->getVersion()), 'exclude' => true);
- } elseif ($op === '==') {
- $branches['names'][] = $constraint->getVersion();
- }
-
- return array(
- 'numeric' => $intervals,
- 'branches' => $branches,
- );
- }
-
- if ($op[0] === '>') { // > & >=
- return array('numeric' => array(new Interval($constraint, Interval::untilPositiveInfinity())), 'branches' => Interval::noDev());
- }
- if ($op[0] === '<') { // < & <=
- return array('numeric' => array(new Interval(Interval::fromZero(), $constraint)), 'branches' => Interval::noDev());
- }
- if ($op === '!=') {
- // convert !=x to intervals of 0 - x - +inf + dev*
- return array('numeric' => array(
- new Interval(Interval::fromZero(), new Constraint('<', $constraint->getVersion())),
- new Interval(new Constraint('>', $constraint->getVersion()), Interval::untilPositiveInfinity()),
- ), 'branches' => Interval::anyDev());
- }
-
- // convert ==x to an interval of >=x - <=x
- return array('numeric' => array(
- new Interval(new Constraint('>=', $constraint->getVersion()), new Constraint('<=', $constraint->getVersion())),
- ), 'branches' => Interval::noDev());
- }
-}
diff --git a/vendor/composer/semver/src/Semver.php b/vendor/composer/semver/src/Semver.php
deleted file mode 100644
index 4d6de3c2..00000000
--- a/vendor/composer/semver/src/Semver.php
+++ /dev/null
@@ -1,129 +0,0 @@
-
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Semver;
-
-use Composer\Semver\Constraint\Constraint;
-
-class Semver
-{
- const SORT_ASC = 1;
- const SORT_DESC = -1;
-
- /** @var VersionParser */
- private static $versionParser;
-
- /**
- * Determine if given version satisfies given constraints.
- *
- * @param string $version
- * @param string $constraints
- *
- * @return bool
- */
- public static function satisfies($version, $constraints)
- {
- if (null === self::$versionParser) {
- self::$versionParser = new VersionParser();
- }
-
- $versionParser = self::$versionParser;
- $provider = new Constraint('==', $versionParser->normalize($version));
- $parsedConstraints = $versionParser->parseConstraints($constraints);
-
- return $parsedConstraints->matches($provider);
- }
-
- /**
- * Return all versions that satisfy given constraints.
- *
- * @param string[] $versions
- * @param string $constraints
- *
- * @return string[]
- */
- public static function satisfiedBy(array $versions, $constraints)
- {
- $versions = array_filter($versions, function ($version) use ($constraints) {
- return Semver::satisfies($version, $constraints);
- });
-
- return array_values($versions);
- }
-
- /**
- * Sort given array of versions.
- *
- * @param string[] $versions
- *
- * @return string[]
- */
- public static function sort(array $versions)
- {
- return self::usort($versions, self::SORT_ASC);
- }
-
- /**
- * Sort given array of versions in reverse.
- *
- * @param string[] $versions
- *
- * @return string[]
- */
- public static function rsort(array $versions)
- {
- return self::usort($versions, self::SORT_DESC);
- }
-
- /**
- * @param string[] $versions
- * @param int $direction
- *
- * @return string[]
- */
- private static function usort(array $versions, $direction)
- {
- if (null === self::$versionParser) {
- self::$versionParser = new VersionParser();
- }
-
- $versionParser = self::$versionParser;
- $normalized = array();
-
- // Normalize outside of usort() scope for minor performance increase.
- // Creates an array of arrays: [[normalized, key], ...]
- foreach ($versions as $key => $version) {
- $normalizedVersion = $versionParser->normalize($version);
- $normalizedVersion = $versionParser->normalizeDefaultBranch($normalizedVersion);
- $normalized[] = array($normalizedVersion, $key);
- }
-
- usort($normalized, function (array $left, array $right) use ($direction) {
- if ($left[0] === $right[0]) {
- return 0;
- }
-
- if (Comparator::lessThan($left[0], $right[0])) {
- return -$direction;
- }
-
- return $direction;
- });
-
- // Recreate input array, using the original indexes which are now in sorted order.
- $sorted = array();
- foreach ($normalized as $item) {
- $sorted[] = $versions[$item[1]];
- }
-
- return $sorted;
- }
-}
diff --git a/vendor/composer/semver/src/VersionParser.php b/vendor/composer/semver/src/VersionParser.php
deleted file mode 100644
index 9318629a..00000000
--- a/vendor/composer/semver/src/VersionParser.php
+++ /dev/null
@@ -1,586 +0,0 @@
-
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Semver;
-
-use Composer\Semver\Constraint\ConstraintInterface;
-use Composer\Semver\Constraint\MatchAllConstraint;
-use Composer\Semver\Constraint\MultiConstraint;
-use Composer\Semver\Constraint\Constraint;
-
-/**
- * Version parser.
- *
- * @author Jordi Boggiano
- */
-class VersionParser
-{
- /**
- * Regex to match pre-release data (sort of).
- *
- * Due to backwards compatibility:
- * - Instead of enforcing hyphen, an underscore, dot or nothing at all are also accepted.
- * - Only stabilities as recognized by Composer are allowed to precede a numerical identifier.
- * - Numerical-only pre-release identifiers are not supported, see tests.
- *
- * |--------------|
- * [major].[minor].[patch] -[pre-release] +[build-metadata]
- *
- * @var string
- */
- private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)((?:[.-]?\d+)*+)?)?([.-]?dev)?';
-
- /** @var string */
- private static $stabilitiesRegex = 'stable|RC|beta|alpha|dev';
-
- /**
- * Returns the stability of a version.
- *
- * @param string $version
- *
- * @return string
- * @phpstan-return 'stable'|'RC'|'beta'|'alpha'|'dev'
- */
- public static function parseStability($version)
- {
- $version = (string) preg_replace('{#.+$}', '', (string) $version);
-
- if (strpos($version, 'dev-') === 0 || '-dev' === substr($version, -4)) {
- return 'dev';
- }
-
- preg_match('{' . self::$modifierRegex . '(?:\+.*)?$}i', strtolower($version), $match);
-
- if (!empty($match[3])) {
- return 'dev';
- }
-
- if (!empty($match[1])) {
- if ('beta' === $match[1] || 'b' === $match[1]) {
- return 'beta';
- }
- if ('alpha' === $match[1] || 'a' === $match[1]) {
- return 'alpha';
- }
- if ('rc' === $match[1]) {
- return 'RC';
- }
- }
-
- return 'stable';
- }
-
- /**
- * @param string $stability
- *
- * @return string
- */
- public static function normalizeStability($stability)
- {
- $stability = strtolower((string) $stability);
-
- return $stability === 'rc' ? 'RC' : $stability;
- }
-
- /**
- * Normalizes a version string to be able to perform comparisons on it.
- *
- * @param string $version
- * @param ?string $fullVersion optional complete version string to give more context
- *
- * @throws \UnexpectedValueException
- *
- * @return string
- */
- public function normalize($version, $fullVersion = null)
- {
- $version = trim((string) $version);
- $origVersion = $version;
- if (null === $fullVersion) {
- $fullVersion = $version;
- }
-
- // strip off aliasing
- if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $version, $match)) {
- $version = $match[1];
- }
-
- // strip off stability flag
- if (preg_match('{@(?:' . self::$stabilitiesRegex . ')$}i', $version, $match)) {
- $version = substr($version, 0, strlen($version) - strlen($match[0]));
- }
-
- // normalize master/trunk/default branches to dev-name for BC with 1.x as these used to be valid constraints
- if (\in_array($version, array('master', 'trunk', 'default'), true)) {
- $version = 'dev-' . $version;
- }
-
- // if requirement is branch-like, use full name
- if (stripos($version, 'dev-') === 0) {
- return 'dev-' . substr($version, 4);
- }
-
- // strip off build metadata
- if (preg_match('{^([^,\s+]++)\+[^\s]++$}', $version, $match)) {
- $version = $match[1];
- }
-
- // match classical versioning
- if (preg_match('{^v?(\d{1,5}+)(\.\d++)?(\.\d++)?(\.\d++)?' . self::$modifierRegex . '$}i', $version, $matches)) {
- $version = $matches[1]
- . (!empty($matches[2]) ? $matches[2] : '.0')
- . (!empty($matches[3]) ? $matches[3] : '.0')
- . (!empty($matches[4]) ? $matches[4] : '.0');
- $index = 5;
- // match date(time) based versioning
- } elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3}){0,2})' . self::$modifierRegex . '$}i', $version, $matches)) {
- $version = (string) preg_replace('{\D}', '.', $matches[1]);
- $index = 2;
- }
-
- // add version modifiers if a version was matched
- if (isset($index)) {
- if (!empty($matches[$index])) {
- if ('stable' === $matches[$index]) {
- return $version;
- }
- $version .= '-' . $this->expandStability($matches[$index]) . (isset($matches[$index + 1]) && '' !== $matches[$index + 1] ? ltrim($matches[$index + 1], '.-') : '');
- }
-
- if (!empty($matches[$index + 2])) {
- $version .= '-dev';
- }
-
- return $version;
- }
-
- // match dev branches
- if (preg_match('{(.*?)[.-]?dev$}i', $version, $match)) {
- try {
- $normalized = $this->normalizeBranch($match[1]);
- // a branch ending with -dev is only valid if it is numeric
- // if it gets prefixed with dev- it means the branch name should
- // have had a dev- prefix already when passed to normalize
- if (strpos($normalized, 'dev-') === false) {
- return $normalized;
- }
- } catch (\Exception $e) {
- }
- }
-
- $extraMessage = '';
- if (preg_match('{ +as +' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))?$}', $fullVersion)) {
- $extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
- } elseif (preg_match('{^' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))? +as +}', $fullVersion)) {
- $extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
- }
-
- throw new \UnexpectedValueException('Invalid version string "' . $origVersion . '"' . $extraMessage);
- }
-
- /**
- * Extract numeric prefix from alias, if it is in numeric format, suitable for version comparison.
- *
- * @param string $branch Branch name (e.g. 2.1.x-dev)
- *
- * @return string|false Numeric prefix if present (e.g. 2.1.) or false
- */
- public function parseNumericAliasPrefix($branch)
- {
- if (preg_match('{^(?P(\d++\\.)*\d++)(?:\.x)?-dev$}i', (string) $branch, $matches)) {
- return $matches['version'] . '.';
- }
-
- return false;
- }
-
- /**
- * Normalizes a branch name to be able to perform comparisons on it.
- *
- * @param string $name
- *
- * @return string
- */
- public function normalizeBranch($name)
- {
- $name = trim((string) $name);
-
- if (preg_match('{^v?(\d++)(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?$}i', $name, $matches)) {
- $version = '';
- for ($i = 1; $i < 5; ++$i) {
- $version .= isset($matches[$i]) ? str_replace(array('*', 'X'), 'x', $matches[$i]) : '.x';
- }
-
- return str_replace('x', '9999999', $version) . '-dev';
- }
-
- return 'dev-' . $name;
- }
-
- /**
- * Normalizes a default branch name (i.e. master on git) to 9999999-dev.
- *
- * @param string $name
- *
- * @return string
- *
- * @deprecated No need to use this anymore in theory, Composer 2 does not normalize any branch names to 9999999-dev anymore
- */
- public function normalizeDefaultBranch($name)
- {
- if ($name === 'dev-master' || $name === 'dev-default' || $name === 'dev-trunk') {
- return '9999999-dev';
- }
-
- return (string) $name;
- }
-
- /**
- * Parses a constraint string into MultiConstraint and/or Constraint objects.
- *
- * @param string $constraints
- *
- * @return ConstraintInterface
- */
- public function parseConstraints($constraints)
- {
- $prettyConstraint = (string) $constraints;
-
- $orConstraints = preg_split('{\s*\|\|?\s*}', trim((string) $constraints));
- if (false === $orConstraints) {
- throw new \RuntimeException('Failed to preg_split string: '.$constraints);
- }
- $orGroups = array();
-
- foreach ($orConstraints as $orConstraint) {
- $andConstraints = preg_split('{(?< ,]) *(? 1) {
- $constraintObjects = array();
- foreach ($andConstraints as $andConstraint) {
- foreach ($this->parseConstraint($andConstraint) as $parsedAndConstraint) {
- $constraintObjects[] = $parsedAndConstraint;
- }
- }
- } else {
- $constraintObjects = $this->parseConstraint($andConstraints[0]);
- }
-
- if (1 === \count($constraintObjects)) {
- $constraint = $constraintObjects[0];
- } else {
- $constraint = new MultiConstraint($constraintObjects);
- }
-
- $orGroups[] = $constraint;
- }
-
- $parsedConstraint = MultiConstraint::create($orGroups, false);
-
- $parsedConstraint->setPrettyString($prettyConstraint);
-
- return $parsedConstraint;
- }
-
- /**
- * @param string $constraint
- *
- * @throws \UnexpectedValueException
- *
- * @return array
- *
- * @phpstan-return non-empty-array
- */
- private function parseConstraint($constraint)
- {
- // strip off aliasing
- if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $constraint, $match)) {
- $constraint = $match[1];
- }
-
- // strip @stability flags, and keep it for later use
- if (preg_match('{^([^,\s]*?)@(' . self::$stabilitiesRegex . ')$}i', $constraint, $match)) {
- $constraint = '' !== $match[1] ? $match[1] : '*';
- if ($match[2] !== 'stable') {
- $stabilityModifier = $match[2];
- }
- }
-
- // get rid of #refs as those are used by composer only
- if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#.+$}i', $constraint, $match)) {
- $constraint = $match[1];
- }
-
- if (preg_match('{^(v)?[xX*](\.[xX*])*$}i', $constraint, $match)) {
- if (!empty($match[1]) || !empty($match[2])) {
- return array(new Constraint('>=', '0.0.0.0-dev'));
- }
-
- return array(new MatchAllConstraint());
- }
-
- $versionRegex = 'v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.(\d++))?(?:' . self::$modifierRegex . '|\.([xX*][.-]?dev))(?:\+[^\s]+)?';
-
- // Tilde Range
- //
- // Like wildcard constraints, unsuffixed tilde constraints say that they must be greater than the previous
- // version, to ensure that unstable instances of the current version are allowed. However, if a stability
- // suffix is added to the constraint, then a >= match on the current version is used instead.
- if (preg_match('{^~>?' . $versionRegex . '$}i', $constraint, $matches)) {
- if (strpos($constraint, '~>') === 0) {
- throw new \UnexpectedValueException(
- 'Could not parse version constraint ' . $constraint . ': ' .
- 'Invalid operator "~>", you probably meant to use the "~" operator'
- );
- }
-
- // Work out which position in the version we are operating at
- if (isset($matches[4]) && '' !== $matches[4] && null !== $matches[4]) {
- $position = 4;
- } elseif (isset($matches[3]) && '' !== $matches[3] && null !== $matches[3]) {
- $position = 3;
- } elseif (isset($matches[2]) && '' !== $matches[2] && null !== $matches[2]) {
- $position = 2;
- } else {
- $position = 1;
- }
-
- // when matching 2.x-dev or 3.0.x-dev we have to shift the second or third number, despite no second/third number matching above
- if (!empty($matches[8])) {
- $position++;
- }
-
- // Calculate the stability suffix
- $stabilitySuffix = '';
- if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) {
- $stabilitySuffix .= '-dev';
- }
-
- $lowVersion = $this->normalize(substr($constraint . $stabilitySuffix, 1));
- $lowerBound = new Constraint('>=', $lowVersion);
-
- // For upper bound, we increment the position of one more significance,
- // but highPosition = 0 would be illegal
- $highPosition = max(1, $position - 1);
- $highVersion = $this->manipulateVersionString($matches, $highPosition, 1) . '-dev';
- $upperBound = new Constraint('<', $highVersion);
-
- return array(
- $lowerBound,
- $upperBound,
- );
- }
-
- // Caret Range
- //
- // Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple.
- // In other words, this allows patch and minor updates for versions 1.0.0 and above, patch updates for
- // versions 0.X >=0.1.0, and no updates for versions 0.0.X
- if (preg_match('{^\^' . $versionRegex . '($)}i', $constraint, $matches)) {
- // Work out which position in the version we are operating at
- if ('0' !== $matches[1] || '' === $matches[2] || null === $matches[2]) {
- $position = 1;
- } elseif ('0' !== $matches[2] || '' === $matches[3] || null === $matches[3]) {
- $position = 2;
- } else {
- $position = 3;
- }
-
- // Calculate the stability suffix
- $stabilitySuffix = '';
- if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) {
- $stabilitySuffix .= '-dev';
- }
-
- $lowVersion = $this->normalize(substr($constraint . $stabilitySuffix, 1));
- $lowerBound = new Constraint('>=', $lowVersion);
-
- // For upper bound, we increment the position of one more significance,
- // but highPosition = 0 would be illegal
- $highVersion = $this->manipulateVersionString($matches, $position, 1) . '-dev';
- $upperBound = new Constraint('<', $highVersion);
-
- return array(
- $lowerBound,
- $upperBound,
- );
- }
-
- // X Range
- //
- // Any of X, x, or * may be used to "stand in" for one of the numeric values in the [major, minor, patch] tuple.
- // A partial version range is treated as an X-Range, so the special character is in fact optional.
- if (preg_match('{^v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.[xX*])++$}', $constraint, $matches)) {
- if (isset($matches[3]) && '' !== $matches[3] && null !== $matches[3]) {
- $position = 3;
- } elseif (isset($matches[2]) && '' !== $matches[2] && null !== $matches[2]) {
- $position = 2;
- } else {
- $position = 1;
- }
-
- $lowVersion = $this->manipulateVersionString($matches, $position) . '-dev';
- $highVersion = $this->manipulateVersionString($matches, $position, 1) . '-dev';
-
- if ($lowVersion === '0.0.0.0-dev') {
- return array(new Constraint('<', $highVersion));
- }
-
- return array(
- new Constraint('>=', $lowVersion),
- new Constraint('<', $highVersion),
- );
- }
-
- // Hyphen Range
- //
- // Specifies an inclusive set. If a partial version is provided as the first version in the inclusive range,
- // then the missing pieces are replaced with zeroes. If a partial version is provided as the second version in
- // the inclusive range, then all versions that start with the supplied parts of the tuple are accepted, but
- // nothing that would be greater than the provided tuple parts.
- if (preg_match('{^(?P' . $versionRegex . ') +- +(?P' . $versionRegex . ')($)}i', $constraint, $matches)) {
- // Calculate the stability suffix
- $lowStabilitySuffix = '';
- if (empty($matches[6]) && empty($matches[8]) && empty($matches[9])) {
- $lowStabilitySuffix = '-dev';
- }
-
- $lowVersion = $this->normalize($matches['from']);
- $lowerBound = new Constraint('>=', $lowVersion . $lowStabilitySuffix);
-
- $empty = function ($x) {
- return ($x === 0 || $x === '0') ? false : empty($x);
- };
-
- if ((!$empty($matches[12]) && !$empty($matches[13])) || !empty($matches[15]) || !empty($matches[17]) || !empty($matches[18])) {
- $highVersion = $this->normalize($matches['to']);
- $upperBound = new Constraint('<=', $highVersion);
- } else {
- $highMatch = array('', $matches[11], $matches[12], $matches[13], $matches[14]);
-
- // validate to version
- $this->normalize($matches['to']);
-
- $highVersion = $this->manipulateVersionString($highMatch, $empty($matches[12]) ? 1 : 2, 1) . '-dev';
- $upperBound = new Constraint('<', $highVersion);
- }
-
- return array(
- $lowerBound,
- $upperBound,
- );
- }
-
- // Basic Comparators
- if (preg_match('{^(<>|!=|>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) {
- try {
- try {
- $version = $this->normalize($matches[2]);
- } catch (\UnexpectedValueException $e) {
- // recover from an invalid constraint like foobar-dev which should be dev-foobar
- // except if the constraint uses a known operator, in which case it must be a parse error
- if (substr($matches[2], -4) === '-dev' && preg_match('{^[0-9a-zA-Z-./]+$}', $matches[2])) {
- $version = $this->normalize('dev-'.substr($matches[2], 0, -4));
- } else {
- throw $e;
- }
- }
-
- $op = $matches[1] ?: '=';
-
- if ($op !== '==' && $op !== '=' && !empty($stabilityModifier) && self::parseStability($version) === 'stable') {
- $version .= '-' . $stabilityModifier;
- } elseif ('<' === $op || '>=' === $op) {
- if (!preg_match('/-' . self::$modifierRegex . '$/', strtolower($matches[2]))) {
- if (strpos($matches[2], 'dev-') !== 0) {
- $version .= '-dev';
- }
- }
- }
-
- return array(new Constraint($matches[1] ?: '=', $version));
- } catch (\Exception $e) {
- }
- }
-
- $message = 'Could not parse version constraint ' . $constraint;
- if (isset($e)) {
- $message .= ': ' . $e->getMessage();
- }
-
- throw new \UnexpectedValueException($message);
- }
-
- /**
- * Increment, decrement, or simply pad a version number.
- *
- * Support function for {@link parseConstraint()}
- *
- * @param array $matches Array with version parts in array indexes 1,2,3,4
- * @param int $position 1,2,3,4 - which segment of the version to increment/decrement
- * @param int $increment
- * @param string $pad The string to pad version parts after $position
- *
- * @return string|null The new version
- *
- * @phpstan-param string[] $matches
- */
- private function manipulateVersionString(array $matches, $position, $increment = 0, $pad = '0')
- {
- for ($i = 4; $i > 0; --$i) {
- if ($i > $position) {
- $matches[$i] = $pad;
- } elseif ($i === $position && $increment) {
- $matches[$i] += $increment;
- // If $matches[$i] was 0, carry the decrement
- if ($matches[$i] < 0) {
- $matches[$i] = $pad;
- --$position;
-
- // Return null on a carry overflow
- if ($i === 1) {
- return null;
- }
- }
- }
- }
-
- return $matches[1] . '.' . $matches[2] . '.' . $matches[3] . '.' . $matches[4];
- }
-
- /**
- * Expand shorthand stability string to long version.
- *
- * @param string $stability
- *
- * @return string
- */
- private function expandStability($stability)
- {
- $stability = strtolower($stability);
-
- switch ($stability) {
- case 'a':
- return 'alpha';
- case 'b':
- return 'beta';
- case 'p':
- case 'pl':
- return 'patch';
- case 'rc':
- return 'RC';
- default:
- return $stability;
- }
- }
-}
diff --git a/vendor/composer/xdebug-handler/CHANGELOG.md b/vendor/composer/xdebug-handler/CHANGELOG.md
deleted file mode 100644
index c5b5bcf4..00000000
--- a/vendor/composer/xdebug-handler/CHANGELOG.md
+++ /dev/null
@@ -1,134 +0,0 @@
-## [Unreleased]
-
-## [3.0.3] - 2022-02-25
- * Added: support for composer/pcre versions 2 and 3.
-
-## [3.0.2] - 2022-02-24
- * Fixed: regression in 3.0.1 affecting Xdebug 2
-
-## [3.0.1] - 2022-01-04
- * Fixed: error when calling `isXdebugActive` before class instantiation.
-
-## [3.0.0] - 2021-12-23
- * Removed: support for legacy PHP versions (< PHP 7.2.5).
- * Added: type declarations to arguments and return values.
- * Added: strict typing to all classes.
-
-## [2.0.3] - 2021-12-08
- * Added: support, type annotations and refactoring for stricter PHPStan analysis.
-
-## [2.0.2] - 2021-07-31
- * Added: support for `xdebug_info('mode')` in Xdebug 3.1.
- * Added: support for Psr\Log versions 2 and 3.
- * Fixed: remove ini directives from non-cli HOST/PATH sections.
-
-## [2.0.1] - 2021-05-05
- * Fixed: don't restart if the cwd is a UNC path and cmd.exe will be invoked.
-
-## [2.0.0] - 2021-04-09
- * Break: this is a major release, see [UPGRADE.md](UPGRADE.md) for more information.
- * Break: removed optional `$colorOption` constructor param and passthru fallback.
- * Break: renamed `requiresRestart` param from `$isLoaded` to `$default`.
- * Break: changed `restart` param `$command` from a string to an array.
- * Added: support for Xdebug3 to only restart if Xdebug is not running with `xdebug.mode=off`.
- * Added: `isXdebugActive()` method to determine if Xdebug is still running in the restart.
- * Added: feature to bypass the shell in PHP-7.4+ by giving `proc_open` an array of arguments.
- * Added: Process utility class to the API.
-
-## [1.4.6] - 2021-03-25
- * Fixed: fail restart if `proc_open` has been disabled in `disable_functions`.
- * Fixed: enable Windows CTRL event handling in the restarted process.
-
-## [1.4.5] - 2020-11-13
- * Fixed: use `proc_open` when available for correct FD forwarding to the restarted process.
-
-## [1.4.4] - 2020-10-24
- * Fixed: exception if 'pcntl_signal' is disabled.
-
-## [1.4.3] - 2020-08-19
- * Fixed: restore SIGINT to default handler in restarted process if no other handler exists.
-
-## [1.4.2] - 2020-06-04
- * Fixed: ignore SIGINTs to let the restarted process handle them.
-
-## [1.4.1] - 2020-03-01
- * Fixed: restart fails if an ini file is empty.
-
-## [1.4.0] - 2019-11-06
- * Added: support for `NO_COLOR` environment variable: https://no-color.org
- * Added: color support for Hyper terminal: https://github.com/zeit/hyper
- * Fixed: correct capitalization of Xdebug (apparently).
- * Fixed: improved handling for uopz extension.
-
-## [1.3.3] - 2019-05-27
- * Fixed: add environment changes to `$_ENV` if it is being used.
-
-## [1.3.2] - 2019-01-28
- * Fixed: exit call being blocked by uopz extension, resulting in application code running twice.
-
-## [1.3.1] - 2018-11-29
- * Fixed: fail restart if `passthru` has been disabled in `disable_functions`.
- * Fixed: fail restart if an ini file cannot be opened, otherwise settings will be missing.
-
-## [1.3.0] - 2018-08-31
- * Added: `setPersistent` method to use environment variables for the restart.
- * Fixed: improved debugging by writing output to stderr.
- * Fixed: no restart when `php_ini_scanned_files` is not functional and is needed.
-
-## [1.2.1] - 2018-08-23
- * Fixed: fatal error with apc, when using `apc.mmap_file_mask`.
-
-## [1.2.0] - 2018-08-16
- * Added: debug information using `XDEBUG_HANDLER_DEBUG`.
- * Added: fluent interface for setters.
- * Added: `PhpConfig` helper class for calling PHP sub-processes.
- * Added: `PHPRC` original value to restart stettings, for use in a restarted process.
- * Changed: internal procedure to disable ini-scanning, using `-n` command-line option.
- * Fixed: replaced `escapeshellarg` usage to avoid locale problems.
- * Fixed: improved color-option handling to respect double-dash delimiter.
- * Fixed: color-option handling regression from main script changes.
- * Fixed: improved handling when checking main script.
- * Fixed: handling for standard input, that never actually did anything.
- * Fixed: fatal error when ctype extension is not available.
-
-## [1.1.0] - 2018-04-11
- * Added: `getRestartSettings` method for calling PHP processes in a restarted process.
- * Added: API definition and @internal class annotations.
- * Added: protected `requiresRestart` method for extending classes.
- * Added: `setMainScript` method for applications that change the working directory.
- * Changed: private `tmpIni` variable to protected for extending classes.
- * Fixed: environment variables not available in $_SERVER when restored in the restart.
- * Fixed: relative path problems caused by Phar::interceptFileFuncs.
- * Fixed: incorrect handling when script file cannot be found.
-
-## [1.0.0] - 2018-03-08
- * Added: PSR3 logging for optional status output.
- * Added: existing ini settings are merged to catch command-line overrides.
- * Added: code, tests and other artefacts to decouple from Composer.
- * Break: the following class was renamed:
- - `Composer\XdebugHandler` -> `Composer\XdebugHandler\XdebugHandler`
-
-[Unreleased]: https://github.com/composer/xdebug-handler/compare/3.0.3...HEAD
-[3.0.2]: https://github.com/composer/xdebug-handler/compare/3.0.2...3.0.3
-[3.0.2]: https://github.com/composer/xdebug-handler/compare/3.0.1...3.0.2
-[3.0.1]: https://github.com/composer/xdebug-handler/compare/3.0.0...3.0.1
-[3.0.0]: https://github.com/composer/xdebug-handler/compare/2.0.3...3.0.0
-[2.0.3]: https://github.com/composer/xdebug-handler/compare/2.0.2...2.0.3
-[2.0.2]: https://github.com/composer/xdebug-handler/compare/2.0.1...2.0.2
-[2.0.1]: https://github.com/composer/xdebug-handler/compare/2.0.0...2.0.1
-[2.0.0]: https://github.com/composer/xdebug-handler/compare/1.4.6...2.0.0
-[1.4.6]: https://github.com/composer/xdebug-handler/compare/1.4.5...1.4.6
-[1.4.5]: https://github.com/composer/xdebug-handler/compare/1.4.4...1.4.5
-[1.4.4]: https://github.com/composer/xdebug-handler/compare/1.4.3...1.4.4
-[1.4.3]: https://github.com/composer/xdebug-handler/compare/1.4.2...1.4.3
-[1.4.2]: https://github.com/composer/xdebug-handler/compare/1.4.1...1.4.2
-[1.4.1]: https://github.com/composer/xdebug-handler/compare/1.4.0...1.4.1
-[1.4.0]: https://github.com/composer/xdebug-handler/compare/1.3.3...1.4.0
-[1.3.3]: https://github.com/composer/xdebug-handler/compare/1.3.2...1.3.3
-[1.3.2]: https://github.com/composer/xdebug-handler/compare/1.3.1...1.3.2
-[1.3.1]: https://github.com/composer/xdebug-handler/compare/1.3.0...1.3.1
-[1.3.0]: https://github.com/composer/xdebug-handler/compare/1.2.1...1.3.0
-[1.2.1]: https://github.com/composer/xdebug-handler/compare/1.2.0...1.2.1
-[1.2.0]: https://github.com/composer/xdebug-handler/compare/1.1.0...1.2.0
-[1.1.0]: https://github.com/composer/xdebug-handler/compare/1.0.0...1.1.0
-[1.0.0]: https://github.com/composer/xdebug-handler/compare/d66f0d15cb57...1.0.0
diff --git a/vendor/composer/xdebug-handler/LICENSE b/vendor/composer/xdebug-handler/LICENSE
deleted file mode 100644
index 963618a1..00000000
--- a/vendor/composer/xdebug-handler/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2017 Composer
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/composer/xdebug-handler/README.md b/vendor/composer/xdebug-handler/README.md
deleted file mode 100644
index 56618fc1..00000000
--- a/vendor/composer/xdebug-handler/README.md
+++ /dev/null
@@ -1,298 +0,0 @@
-# composer/xdebug-handler
-
-[](https://packagist.org/packages/composer/xdebug-handler)
-[](https://github.com/composer/xdebug-handler/actions?query=branch:main)
-
-
-
-Restart a CLI process without loading the Xdebug extension, unless `xdebug.mode=off`.
-
-Originally written as part of [composer/composer](https://github.com/composer/composer),
-now extracted and made available as a stand-alone library.
-
-### Version 3
-
-Removed support for legacy PHP versions and added type declarations.
-
-Long term support for version 2 (PHP 5.3.2 - 7.2.4) follows [Composer 2.2 LTS](https://blog.packagist.com/composer-2-2/) policy.
-
-## Installation
-
-Install the latest version with:
-
-```bash
-$ composer require composer/xdebug-handler
-```
-
-## Requirements
-
-* PHP 7.2.5 minimum, although using the latest PHP version is highly recommended.
-
-## Basic Usage
-```php
-use Composer\XdebugHandler\XdebugHandler;
-
-$xdebug = new XdebugHandler('myapp');
-$xdebug->check();
-unset($xdebug);
-```
-
-The constructor takes a single parameter, `$envPrefix`, which is upper-cased and prepended to default base values to create two distinct environment variables. The above example enables the use of:
-
-- `MYAPP_ALLOW_XDEBUG=1` to override automatic restart and allow Xdebug
-- `MYAPP_ORIGINAL_INIS` to obtain ini file locations in a restarted process
-
-## Advanced Usage
-
-* [How it works](#how-it-works)
-* [Limitations](#limitations)
-* [Helper methods](#helper-methods)
-* [Setter methods](#setter-methods)
-* [Process configuration](#process-configuration)
-* [Troubleshooting](#troubleshooting)
-* [Extending the library](#extending-the-library)
-
-### How it works
-
-A temporary ini file is created from the loaded (and scanned) ini files, with any references to the Xdebug extension commented out. Current ini settings are merged, so that most ini settings made on the command-line or by the application are included (see [Limitations](#limitations))
-
-* `MYAPP_ALLOW_XDEBUG` is set with internal data to flag and use in the restart.
-* The command-line and environment are [configured](#process-configuration) for the restart.
-* The application is restarted in a new process.
- * The restart settings are stored in the environment.
- * `MYAPP_ALLOW_XDEBUG` is unset.
- * The application runs and exits.
-* The main process exits with the exit code from the restarted process.
-
-#### Signal handling
-Asynchronous signal handling is automatically enabled if the pcntl extension is loaded. `SIGINT` is set to `SIG_IGN` in the parent
-process and restored to `SIG_DFL` in the restarted process (if no other handler has been set).
-
-From PHP 7.4 on Windows, `CTRL+C` and `CTRL+BREAK` handling is automatically enabled in the restarted process and ignored in the parent process.
-
-### Limitations
-There are a few things to be aware of when running inside a restarted process.
-
-* Extensions set on the command-line will not be loaded.
-* Ini file locations will be reported as per the restart - see [getAllIniFiles()](#getallinifiles).
-* Php sub-processes may be loaded with Xdebug enabled - see [Process configuration](#process-configuration).
-
-### Helper methods
-These static methods provide information from the current process, regardless of whether it has been restarted or not.
-
-#### _getAllIniFiles(): array_
-Returns an array of the original ini file locations. Use this instead of calling `php_ini_loaded_file` and `php_ini_scanned_files`, which will report the wrong values in a restarted process.
-
-```php
-use Composer\XdebugHandler\XdebugHandler;
-
-$files = XdebugHandler::getAllIniFiles();
-
-# $files[0] always exists, it could be an empty string
-$loadedIni = array_shift($files);
-$scannedInis = $files;
-```
-
-These locations are also available in the `MYAPP_ORIGINAL_INIS` environment variable. This is a path-separated string comprising the location returned from `php_ini_loaded_file`, which could be empty, followed by locations parsed from calling `php_ini_scanned_files`.
-
-#### _getRestartSettings(): ?array_
-Returns an array of settings that can be used with PHP [sub-processes](#sub-processes), or null if the process was not restarted.
-
-```php
-use Composer\XdebugHandler\XdebugHandler;
-
-$settings = XdebugHandler::getRestartSettings();
-/**
- * $settings: array (if the current process was restarted,
- * or called with the settings from a previous restart), or null
- *
- * 'tmpIni' => the temporary ini file used in the restart (string)
- * 'scannedInis' => if there were any scanned inis (bool)
- * 'scanDir' => the original PHP_INI_SCAN_DIR value (false|string)
- * 'phprc' => the original PHPRC value (false|string)
- * 'inis' => the original inis from getAllIniFiles (array)
- * 'skipped' => the skipped version from getSkippedVersion (string)
- */
-```
-
-#### _getSkippedVersion(): string_
-Returns the Xdebug version string that was skipped by the restart, or an empty string if there was no restart (or Xdebug is still loaded, perhaps by an extending class restarting for a reason other than removing Xdebug).
-
-```php
-use Composer\XdebugHandler\XdebugHandler;
-
-$version = XdebugHandler::getSkippedVersion();
-# $version: '3.1.1' (for example), or an empty string
-```
-
-#### _isXdebugActive(): bool_
-Returns true if Xdebug is loaded and is running in an active mode (if it supports modes). Returns false if Xdebug is not loaded, or it is running with `xdebug.mode=off`.
-
-### Setter methods
-These methods implement a fluent interface and must be called before the main `check()` method.
-
-#### _setLogger(LoggerInterface $logger): self_
-Enables the output of status messages to an external PSR3 logger. All messages are reported with either `DEBUG` or `WARNING` log levels. For example (showing the level and message):
-
-```
-// No restart
-DEBUG Checking MYAPP_ALLOW_XDEBUG
-DEBUG The Xdebug extension is loaded (3.1.1) xdebug.mode=off
-DEBUG No restart (APP_ALLOW_XDEBUG=0) Allowed by xdebug.mode
-
-// Restart overridden
-DEBUG Checking MYAPP_ALLOW_XDEBUG
-DEBUG The Xdebug extension is loaded (3.1.1) xdebug.mode=coverage,debug,develop
-DEBUG No restart (MYAPP_ALLOW_XDEBUG=1)
-
-// Failed restart
-DEBUG Checking MYAPP_ALLOW_XDEBUG
-DEBUG The Xdebug extension is loaded (3.1.0)
-WARNING No restart (Unable to create temp ini file at: ...)
-```
-
-Status messages can also be output with `XDEBUG_HANDLER_DEBUG`. See [Troubleshooting](#troubleshooting).
-
-#### _setMainScript(string $script): self_
-Sets the location of the main script to run in the restart. This is only needed in more esoteric use-cases, or if the `argv[0]` location is inaccessible. The script name `--` is supported for standard input.
-
-#### _setPersistent(): self_
-Configures the restart using [persistent settings](#persistent-settings), so that Xdebug is not loaded in any sub-process.
-
-Use this method if your application invokes one or more PHP sub-process and the Xdebug extension is not needed. This avoids the overhead of implementing specific [sub-process](#sub-processes) strategies.
-
-Alternatively, this method can be used to set up a default _Xdebug-free_ environment which can be changed if a sub-process requires Xdebug, then restored afterwards:
-
-```php
-function SubProcessWithXdebug()
-{
- $phpConfig = new Composer\XdebugHandler\PhpConfig();
-
- # Set the environment to the original configuration
- $phpConfig->useOriginal();
-
- # run the process with Xdebug loaded
- ...
-
- # Restore Xdebug-free environment
- $phpConfig->usePersistent();
-}
-```
-
-### Process configuration
-The library offers two strategies to invoke a new PHP process without loading Xdebug, using either _standard_ or _persistent_ settings. Note that this is only important if the application calls a PHP sub-process.
-
-#### Standard settings
-Uses command-line options to remove Xdebug from the new process only.
-
-* The -n option is added to the command-line. This tells PHP not to scan for additional inis.
-* The temporary ini is added to the command-line with the -c option.
-
->_If the new process calls a PHP sub-process, Xdebug will be loaded in that sub-process (unless it implements xdebug-handler, in which case there will be another restart)._
-
-This is the default strategy used in the restart.
-
-#### Persistent settings
-Uses environment variables to remove Xdebug from the new process and persist these settings to any sub-process.
-
-* `PHP_INI_SCAN_DIR` is set to an empty string. This tells PHP not to scan for additional inis.
-* `PHPRC` is set to the temporary ini.
-
->_If the new process calls a PHP sub-process, Xdebug will not be loaded in that sub-process._
-
-This strategy can be used in the restart by calling [setPersistent()](#setpersistent).
-
-#### Sub-processes
-The `PhpConfig` helper class makes it easy to invoke a PHP sub-process (with or without Xdebug loaded), regardless of whether there has been a restart.
-
-Each of its methods returns an array of PHP options (to add to the command-line) and sets up the environment for the required strategy. The [getRestartSettings()](#getrestartsettings) method is used internally.
-
-* `useOriginal()` - Xdebug will be loaded in the new process.
-* `useStandard()` - Xdebug will **not** be loaded in the new process - see [standard settings](#standard-settings).
-* `userPersistent()` - Xdebug will **not** be loaded in the new process - see [persistent settings](#persistent-settings)
-
-If there was no restart, an empty options array is returned and the environment is not changed.
-
-```php
-use Composer\XdebugHandler\PhpConfig;
-
-$config = new PhpConfig;
-
-$options = $config->useOriginal();
-# $options: empty array
-# environment: PHPRC and PHP_INI_SCAN_DIR set to original values
-
-$options = $config->useStandard();
-# $options: [-n, -c, tmpIni]
-# environment: PHPRC and PHP_INI_SCAN_DIR set to original values
-
-$options = $config->usePersistent();
-# $options: empty array
-# environment: PHPRC=tmpIni, PHP_INI_SCAN_DIR=''
-```
-
-### Troubleshooting
-The following environment settings can be used to troubleshoot unexpected behavior:
-
-* `XDEBUG_HANDLER_DEBUG=1` Outputs status messages to `STDERR`, if it is defined, irrespective of any PSR3 logger. Each message is prefixed `xdebug-handler[pid]`, where pid is the process identifier.
-
-* `XDEBUG_HANDLER_DEBUG=2` As above, but additionally saves the temporary ini file and reports its location in a status message.
-
-### Extending the library
-The API is defined by classes and their accessible elements that are not annotated as @internal. The main class has two protected methods that can be overridden to provide additional functionality:
-
-#### _requiresRestart(bool $default): bool_
-By default the process will restart if Xdebug is loaded and not running with `xdebug.mode=off`. Extending this method allows an application to decide, by returning a boolean (or equivalent) value.
-It is only called if `MYAPP_ALLOW_XDEBUG` is empty, so it will not be called in the restarted process (where this variable contains internal data), or if the restart has been overridden.
-
-Note that the [setMainScript()](#setmainscriptscript) and [setPersistent()](#setpersistent) setters can be used here, if required.
-
-#### _restart(array $command): void_
-An application can extend this to modify the temporary ini file, its location given in the `tmpIni` property. New settings can be safely appended to the end of the data, which is `PHP_EOL` terminated.
-
-The `$command` parameter is an array of unescaped command-line arguments that will be used for the new process.
-
-Remember to finish with `parent::restart($command)`.
-
-#### Example
-This example demonstrates two ways to extend basic functionality:
-
-* To avoid the overhead of spinning up a new process, the restart is skipped if a simple help command is requested.
-
-* The application needs write-access to phar files, so it will force a restart if `phar.readonly` is set (regardless of whether Xdebug is loaded) and change this value in the temporary ini file.
-
-```php
-use Composer\XdebugHandler\XdebugHandler;
-use MyApp\Command;
-
-class MyRestarter extends XdebugHandler
-{
- private $required;
-
- protected function requiresRestart(bool $default): bool
- {
- if (Command::isHelp()) {
- # No need to disable Xdebug for this
- return false;
- }
-
- $this->required = (bool) ini_get('phar.readonly');
- return $this->required || $default;
- }
-
- protected function restart(array $command): void
- {
- if ($this->required) {
- # Add required ini setting to tmpIni
- $content = file_get_contents($this->tmpIni);
- $content .= 'phar.readonly=0'.PHP_EOL;
- file_put_contents($this->tmpIni, $content);
- }
-
- parent::restart($command);
- }
-}
-```
-
-## License
-composer/xdebug-handler is licensed under the MIT License, see the LICENSE file for details.
diff --git a/vendor/composer/xdebug-handler/composer.json b/vendor/composer/xdebug-handler/composer.json
deleted file mode 100644
index 6b649dab..00000000
--- a/vendor/composer/xdebug-handler/composer.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "composer/xdebug-handler",
- "description": "Restarts a process without Xdebug.",
- "type": "library",
- "license": "MIT",
- "keywords": [
- "xdebug",
- "performance"
- ],
- "authors": [
- {
- "name": "John Stevenson",
- "email": "john-stevenson@blueyonder.co.uk"
- }
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/xdebug-handler/issues"
- },
- "require": {
- "php": "^7.2.5 || ^8.0",
- "psr/log": "^1 || ^2 || ^3",
- "composer/pcre": "^1 || ^2 || ^3"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "^6.0",
- "phpstan/phpstan": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.1"
- },
- "autoload": {
- "psr-4": {
- "Composer\\XdebugHandler\\": "src"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "Composer\\XdebugHandler\\Tests\\": "tests"
- }
- },
- "scripts": {
- "test": "@php vendor/bin/simple-phpunit",
- "phpstan": "@php vendor/bin/phpstan analyse"
- }
-}
diff --git a/vendor/composer/xdebug-handler/src/PhpConfig.php b/vendor/composer/xdebug-handler/src/PhpConfig.php
deleted file mode 100644
index 7edac888..00000000
--- a/vendor/composer/xdebug-handler/src/PhpConfig.php
+++ /dev/null
@@ -1,91 +0,0 @@
-
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\XdebugHandler;
-
-/**
- * @author John Stevenson
- *
- * @phpstan-type restartData array{tmpIni: string, scannedInis: bool, scanDir: false|string, phprc: false|string, inis: string[], skipped: string}
- */
-class PhpConfig
-{
- /**
- * Use the original PHP configuration
- *
- * @return string[] Empty array of PHP cli options
- */
- public function useOriginal(): array
- {
- $this->getDataAndReset();
- return [];
- }
-
- /**
- * Use standard restart settings
- *
- * @return string[] PHP cli options
- */
- public function useStandard(): array
- {
- $data = $this->getDataAndReset();
- if ($data !== null) {
- return ['-n', '-c', $data['tmpIni']];
- }
-
- return [];
- }
-
- /**
- * Use environment variables to persist settings
- *
- * @return string[] Empty array of PHP cli options
- */
- public function usePersistent(): array
- {
- $data = $this->getDataAndReset();
- if ($data !== null) {
- $this->updateEnv('PHPRC', $data['tmpIni']);
- $this->updateEnv('PHP_INI_SCAN_DIR', '');
- }
-
- return [];
- }
-
- /**
- * Returns restart data if available and resets the environment
- *
- * @phpstan-return restartData|null
- */
- private function getDataAndReset(): ?array
- {
- $data = XdebugHandler::getRestartSettings();
- if ($data !== null) {
- $this->updateEnv('PHPRC', $data['phprc']);
- $this->updateEnv('PHP_INI_SCAN_DIR', $data['scanDir']);
- }
-
- return $data;
- }
-
- /**
- * Updates a restart settings value in the environment
- *
- * @param string $name
- * @param string|false $value
- */
- private function updateEnv(string $name, $value): void
- {
- Process::setEnv($name, false !== $value ? $value : null);
- }
-}
diff --git a/vendor/composer/xdebug-handler/src/Process.php b/vendor/composer/xdebug-handler/src/Process.php
deleted file mode 100644
index c612200b..00000000
--- a/vendor/composer/xdebug-handler/src/Process.php
+++ /dev/null
@@ -1,118 +0,0 @@
-
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Composer\XdebugHandler;
-
-use Composer\Pcre\Preg;
-
-/**
- * Process utility functions
- *
- * @author John Stevenson
- */
-class Process
-{
- /**
- * Escapes a string to be used as a shell argument.
- *
- * From https://github.com/johnstevenson/winbox-args
- * MIT Licensed (c) John Stevenson
- *
- * @param string $arg The argument to be escaped
- * @param bool $meta Additionally escape cmd.exe meta characters
- * @param bool $module The argument is the module to invoke
- */
- public static function escape(string $arg, bool $meta = true, bool $module = false): string
- {
- if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
- return "'".str_replace("'", "'\\''", $arg)."'";
- }
-
- $quote = strpbrk($arg, " \t") !== false || $arg === '';
-
- $arg = Preg::replace('/(\\\\*)"/', '$1$1\\"', $arg, -1, $dquotes);
-
- if ($meta) {
- $meta = $dquotes || Preg::isMatch('/%[^%]+%/', $arg);
-
- if (!$meta) {
- $quote = $quote || strpbrk($arg, '^&|<>()') !== false;
- } elseif ($module && !$dquotes && $quote) {
- $meta = false;
- }
- }
-
- if ($quote) {
- $arg = '"'.(Preg::replace('/(\\\\*)$/', '$1$1', $arg)).'"';
- }
-
- if ($meta) {
- $arg = Preg::replace('/(["^&|<>()%])/', '^$1', $arg);
- }
-
- return $arg;
- }
-
- /**
- * Escapes an array of arguments that make up a shell command
- *
- * @param string[] $args Argument list, with the module name first
- */
- public static function escapeShellCommand(array $args): string
- {
- $command = '';
- $module = array_shift($args);
-
- if ($module !== null) {
- $command = self::escape($module, true, true);
-
- foreach ($args as $arg) {
- $command .= ' '.self::escape($arg);
- }
- }
-
- return $command;
- }
-
- /**
- * Makes putenv environment changes available in $_SERVER and $_ENV
- *
- * @param string $name
- * @param ?string $value A null value unsets the variable
- */
- public static function setEnv(string $name, ?string $value = null): bool
- {
- $unset = null === $value;
-
- if (!putenv($unset ? $name : $name.'='.$value)) {
- return false;
- }
-
- if ($unset) {
- unset($_SERVER[$name]);
- } else {
- $_SERVER[$name] = $value;
- }
-
- // Update $_ENV if it is being used
- if (false !== stripos((string) ini_get('variables_order'), 'E')) {
- if ($unset) {
- unset($_ENV[$name]);
- } else {
- $_ENV[$name] = $value;
- }
- }
-
- return true;
- }
-}
diff --git a/vendor/composer/xdebug-handler/src/Status.php b/vendor/composer/xdebug-handler/src/Status.php
deleted file mode 100644
index b434f859..00000000
--- a/vendor/composer/xdebug-handler/src/Status.php
+++ /dev/null
@@ -1,203 +0,0 @@
-
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Composer\XdebugHandler;
-
-use Psr\Log\LoggerInterface;
-use Psr\Log\LogLevel;
-
-/**
- * @author John Stevenson
- * @internal
- */
-class Status
-{
- const ENV_RESTART = 'XDEBUG_HANDLER_RESTART';
- const CHECK = 'Check';
- const ERROR = 'Error';
- const INFO = 'Info';
- const NORESTART = 'NoRestart';
- const RESTART = 'Restart';
- const RESTARTING = 'Restarting';
- const RESTARTED = 'Restarted';
-
- /** @var bool */
- private $debug;
-
- /** @var string */
- private $envAllowXdebug;
-
- /** @var string|null */
- private $loaded;
-
- /** @var LoggerInterface|null */
- private $logger;
-
- /** @var bool */
- private $modeOff;
-
- /** @var float */
- private $time;
-
- /**
- * @param string $envAllowXdebug Prefixed _ALLOW_XDEBUG name
- * @param bool $debug Whether debug output is required
- */
- public function __construct(string $envAllowXdebug, bool $debug)
- {
- $start = getenv(self::ENV_RESTART);
- Process::setEnv(self::ENV_RESTART);
- $this->time = is_numeric($start) ? round((microtime(true) - $start) * 1000) : 0;
-
- $this->envAllowXdebug = $envAllowXdebug;
- $this->debug = $debug && defined('STDERR');
- $this->modeOff = false;
- }
-
- /**
- * Activates status message output to a PSR3 logger
- *
- * @return void
- */
- public function setLogger(LoggerInterface $logger): void
- {
- $this->logger = $logger;
- }
-
- /**
- * Calls a handler method to report a message
- *
- * @throws \InvalidArgumentException If $op is not known
- */
- public function report(string $op, ?string $data): void
- {
- if ($this->logger !== null || $this->debug) {
- $callable = [$this, 'report'.$op];
-
- if (!is_callable($callable)) {
- throw new \InvalidArgumentException('Unknown op handler: '.$op);
- }
-
- $params = $data !== null ? [$data] : [];
- call_user_func_array($callable, $params);
- }
- }
-
- /**
- * Outputs a status message
- */
- private function output(string $text, ?string $level = null): void
- {
- if ($this->logger !== null) {
- $this->logger->log($level !== null ? $level: LogLevel::DEBUG, $text);
- }
-
- if ($this->debug) {
- fwrite(STDERR, sprintf('xdebug-handler[%d] %s', getmypid(), $text.PHP_EOL));
- }
- }
-
- /**
- * Checking status message
- */
- private function reportCheck(string $loaded): void
- {
- list($version, $mode) = explode('|', $loaded);
-
- if ($version !== '') {
- $this->loaded = '('.$version.')'.($mode !== '' ? ' xdebug.mode='.$mode : '');
- }
- $this->modeOff = $mode === 'off';
- $this->output('Checking '.$this->envAllowXdebug);
- }
-
- /**
- * Error status message
- */
- private function reportError(string $error): void
- {
- $this->output(sprintf('No restart (%s)', $error), LogLevel::WARNING);
- }
-
- /**
- * Info status message
- */
- private function reportInfo(string $info): void
- {
- $this->output($info);
- }
-
- /**
- * No restart status message
- */
- private function reportNoRestart(): void
- {
- $this->output($this->getLoadedMessage());
-
- if ($this->loaded !== null) {
- $text = sprintf('No restart (%s)', $this->getEnvAllow());
- if (!((bool) getenv($this->envAllowXdebug))) {
- $text .= ' Allowed by '.($this->modeOff ? 'xdebug.mode' : 'application');
- }
- $this->output($text);
- }
- }
-
- /**
- * Restart status message
- */
- private function reportRestart(): void
- {
- $this->output($this->getLoadedMessage());
- Process::setEnv(self::ENV_RESTART, (string) microtime(true));
- }
-
- /**
- * Restarted status message
- */
- private function reportRestarted(): void
- {
- $loaded = $this->getLoadedMessage();
- $text = sprintf('Restarted (%d ms). %s', $this->time, $loaded);
- $level = $this->loaded !== null ? LogLevel::WARNING : null;
- $this->output($text, $level);
- }
-
- /**
- * Restarting status message
- */
- private function reportRestarting(string $command): void
- {
- $text = sprintf('Process restarting (%s)', $this->getEnvAllow());
- $this->output($text);
- $text = 'Running '.$command;
- $this->output($text);
- }
-
- /**
- * Returns the _ALLOW_XDEBUG environment variable as name=value
- */
- private function getEnvAllow(): string
- {
- return $this->envAllowXdebug.'='.getenv($this->envAllowXdebug);
- }
-
- /**
- * Returns the Xdebug status and version
- */
- private function getLoadedMessage(): string
- {
- $loaded = $this->loaded !== null ? sprintf('loaded %s', $this->loaded) : 'not loaded';
- return 'The Xdebug extension is '.$loaded;
- }
-}
diff --git a/vendor/composer/xdebug-handler/src/XdebugHandler.php b/vendor/composer/xdebug-handler/src/XdebugHandler.php
deleted file mode 100644
index 9052bfa4..00000000
--- a/vendor/composer/xdebug-handler/src/XdebugHandler.php
+++ /dev/null
@@ -1,668 +0,0 @@
-
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Composer\XdebugHandler;
-
-use Composer\Pcre\Preg;
-use Psr\Log\LoggerInterface;
-
-/**
- * @author John Stevenson
- *
- * @phpstan-import-type restartData from PhpConfig
- */
-class XdebugHandler
-{
- const SUFFIX_ALLOW = '_ALLOW_XDEBUG';
- const SUFFIX_INIS = '_ORIGINAL_INIS';
- const RESTART_ID = 'internal';
- const RESTART_SETTINGS = 'XDEBUG_HANDLER_SETTINGS';
- const DEBUG = 'XDEBUG_HANDLER_DEBUG';
-
- /** @var string|null */
- protected $tmpIni;
-
- /** @var bool */
- private static $inRestart;
-
- /** @var string */
- private static $name;
-
- /** @var string|null */
- private static $skipped;
-
- /** @var bool */
- private static $xdebugActive;
-
- /** @var string|null */
- private static $xdebugMode;
-
- /** @var string|null */
- private static $xdebugVersion;
-
- /** @var bool */
- private $cli;
-
- /** @var string|null */
- private $debug;
-
- /** @var string */
- private $envAllowXdebug;
-
- /** @var string */
- private $envOriginalInis;
-
- /** @var bool */
- private $persistent;
-
- /** @var string|null */
- private $script;
-
- /** @var Status */
- private $statusWriter;
-
- /**
- * Constructor
- *
- * The $envPrefix is used to create distinct environment variables. It is
- * uppercased and prepended to the default base values. For example 'myapp'
- * would result in MYAPP_ALLOW_XDEBUG and MYAPP_ORIGINAL_INIS.
- *
- * @param string $envPrefix Value used in environment variables
- * @throws \RuntimeException If the parameter is invalid
- */
- public function __construct(string $envPrefix)
- {
- if ($envPrefix === '') {
- throw new \RuntimeException('Invalid constructor parameter');
- }
-
- self::$name = strtoupper($envPrefix);
- $this->envAllowXdebug = self::$name.self::SUFFIX_ALLOW;
- $this->envOriginalInis = self::$name.self::SUFFIX_INIS;
-
- self::setXdebugDetails();
- self::$inRestart = false;
-
- if ($this->cli = PHP_SAPI === 'cli') {
- $this->debug = (string) getenv(self::DEBUG);
- }
-
- $this->statusWriter = new Status($this->envAllowXdebug, (bool) $this->debug);
- }
-
- /**
- * Activates status message output to a PSR3 logger
- */
- public function setLogger(LoggerInterface $logger): self
- {
- $this->statusWriter->setLogger($logger);
- return $this;
- }
-
- /**
- * Sets the main script location if it cannot be called from argv
- */
- public function setMainScript(string $script): self
- {
- $this->script = $script;
- return $this;
- }
-
- /**
- * Persist the settings to keep Xdebug out of sub-processes
- */
- public function setPersistent(): self
- {
- $this->persistent = true;
- return $this;
- }
-
- /**
- * Checks if Xdebug is loaded and the process needs to be restarted
- *
- * This behaviour can be disabled by setting the MYAPP_ALLOW_XDEBUG
- * environment variable to 1. This variable is used internally so that
- * the restarted process is created only once.
- */
- public function check(): void
- {
- $this->notify(Status::CHECK, self::$xdebugVersion.'|'.self::$xdebugMode);
- $envArgs = explode('|', (string) getenv($this->envAllowXdebug));
-
- if (!((bool) $envArgs[0]) && $this->requiresRestart(self::$xdebugActive)) {
- // Restart required
- $this->notify(Status::RESTART);
-
- if ($this->prepareRestart()) {
- $command = $this->getCommand();
- $this->restart($command);
- }
- return;
- }
-
- if (self::RESTART_ID === $envArgs[0] && count($envArgs) === 5) {
- // Restarted, so unset environment variable and use saved values
- $this->notify(Status::RESTARTED);
-
- Process::setEnv($this->envAllowXdebug);
- self::$inRestart = true;
-
- if (self::$xdebugVersion === null) {
- // Skipped version is only set if Xdebug is not loaded
- self::$skipped = $envArgs[1];
- }
-
- $this->tryEnableSignals();
-
- // Put restart settings in the environment
- $this->setEnvRestartSettings($envArgs);
- return;
- }
-
- $this->notify(Status::NORESTART);
- $settings = self::getRestartSettings();
-
- if ($settings !== null) {
- // Called with existing settings, so sync our settings
- $this->syncSettings($settings);
- }
- }
-
- /**
- * Returns an array of php.ini locations with at least one entry
- *
- * The equivalent of calling php_ini_loaded_file then php_ini_scanned_files.
- * The loaded ini location is the first entry and may be empty.
- *
- * @return string[]
- */
- public static function getAllIniFiles(): array
- {
- if (self::$name !== null) {
- $env = getenv(self::$name.self::SUFFIX_INIS);
-
- if (false !== $env) {
- return explode(PATH_SEPARATOR, $env);
- }
- }
-
- $paths = [(string) php_ini_loaded_file()];
- $scanned = php_ini_scanned_files();
-
- if ($scanned !== false) {
- $paths = array_merge($paths, array_map('trim', explode(',', $scanned)));
- }
-
- return $paths;
- }
-
- /**
- * Returns an array of restart settings or null
- *
- * Settings will be available if the current process was restarted, or
- * called with the settings from an existing restart.
- *
- * @phpstan-return restartData|null
- */
- public static function getRestartSettings(): ?array
- {
- $envArgs = explode('|', (string) getenv(self::RESTART_SETTINGS));
-
- if (count($envArgs) !== 6
- || (!self::$inRestart && php_ini_loaded_file() !== $envArgs[0])) {
- return null;
- }
-
- return [
- 'tmpIni' => $envArgs[0],
- 'scannedInis' => (bool) $envArgs[1],
- 'scanDir' => '*' === $envArgs[2] ? false : $envArgs[2],
- 'phprc' => '*' === $envArgs[3] ? false : $envArgs[3],
- 'inis' => explode(PATH_SEPARATOR, $envArgs[4]),
- 'skipped' => $envArgs[5],
- ];
- }
-
- /**
- * Returns the Xdebug version that triggered a successful restart
- */
- public static function getSkippedVersion(): string
- {
- return (string) self::$skipped;
- }
-
- /**
- * Returns whether Xdebug is loaded and active
- *
- * true: if Xdebug is loaded and is running in an active mode.
- * false: if Xdebug is not loaded, or it is running with xdebug.mode=off.
- */
- public static function isXdebugActive(): bool
- {
- self::setXdebugDetails();
- return self::$xdebugActive;
- }
-
- /**
- * Allows an extending class to decide if there should be a restart
- *
- * The default is to restart if Xdebug is loaded and its mode is not "off".
- */
- protected function requiresRestart(bool $default): bool
- {
- return $default;
- }
-
- /**
- * Allows an extending class to access the tmpIni
- *
- * @param string[] $command *
- */
- protected function restart(array $command): void
- {
- $this->doRestart($command);
- }
-
- /**
- * Executes the restarted command then deletes the tmp ini
- *
- * @param string[] $command
- * @phpstan-return never
- */
- private function doRestart(array $command): void
- {
- $this->tryEnableSignals();
- $this->notify(Status::RESTARTING, implode(' ', $command));
-
- if (PHP_VERSION_ID >= 70400) {
- $cmd = $command;
- } else {
- $cmd = Process::escapeShellCommand($command);
- if (defined('PHP_WINDOWS_VERSION_BUILD')) {
- // Outer quotes required on cmd string below PHP 8
- $cmd = '"'.$cmd.'"';
- }
- }
-
- $process = proc_open($cmd, [], $pipes);
- if (is_resource($process)) {
- $exitCode = proc_close($process);
- }
-
- if (!isset($exitCode)) {
- // Unlikely that php or the default shell cannot be invoked
- $this->notify(Status::ERROR, 'Unable to restart process');
- $exitCode = -1;
- } else {
- $this->notify(Status::INFO, 'Restarted process exited '.$exitCode);
- }
-
- if ($this->debug === '2') {
- $this->notify(Status::INFO, 'Temp ini saved: '.$this->tmpIni);
- } else {
- @unlink((string) $this->tmpIni);
- }
-
- exit($exitCode);
- }
-
- /**
- * Returns true if everything was written for the restart
- *
- * If any of the following fails (however unlikely) we must return false to
- * stop potential recursion:
- * - tmp ini file creation
- * - environment variable creation
- */
- private function prepareRestart(): bool
- {
- $error = null;
- $iniFiles = self::getAllIniFiles();
- $scannedInis = count($iniFiles) > 1;
- $tmpDir = sys_get_temp_dir();
-
- if (!$this->cli) {
- $error = 'Unsupported SAPI: '.PHP_SAPI;
- } elseif (!$this->checkConfiguration($info)) {
- $error = $info;
- } elseif (!$this->checkMainScript()) {
- $error = 'Unable to access main script: '.$this->script;
- } elseif (!$this->writeTmpIni($iniFiles, $tmpDir, $error)) {
- $error = $error !== null ? $error : 'Unable to create temp ini file at: '.$tmpDir;
- } elseif (!$this->setEnvironment($scannedInis, $iniFiles)) {
- $error = 'Unable to set environment variables';
- }
-
- if ($error !== null) {
- $this->notify(Status::ERROR, $error);
- }
-
- return $error === null;
- }
-
- /**
- * Returns true if the tmp ini file was written
- *
- * @param string[] $iniFiles All ini files used in the current process
- */
- private function writeTmpIni(array $iniFiles, string $tmpDir, ?string &$error): bool
- {
- if (($tmpfile = @tempnam($tmpDir, '')) === false) {
- return false;
- }
-
- $this->tmpIni = $tmpfile;
-
- // $iniFiles has at least one item and it may be empty
- if ($iniFiles[0] === '') {
- array_shift($iniFiles);
- }
-
- $content = '';
- $sectionRegex = '/^\s*\[(?:PATH|HOST)\s*=/mi';
- $xdebugRegex = '/^\s*(zend_extension\s*=.*xdebug.*)$/mi';
-
- foreach ($iniFiles as $file) {
- // Check for inaccessible ini files
- if (($data = @file_get_contents($file)) === false) {
- $error = 'Unable to read ini: '.$file;
- return false;
- }
- // Check and remove directives after HOST and PATH sections
- if (Preg::isMatchWithOffsets($sectionRegex, $data, $matches, PREG_OFFSET_CAPTURE)) {
- $data = substr($data, 0, $matches[0][1]);
- }
- $content .= Preg::replace($xdebugRegex, ';$1', $data).PHP_EOL;
- }
-
- // Merge loaded settings into our ini content, if it is valid
- $config = parse_ini_string($content);
- $loaded = ini_get_all(null, false);
-
- if (false === $config || false === $loaded) {
- $error = 'Unable to parse ini data';
- return false;
- }
-
- $content .= $this->mergeLoadedConfig($loaded, $config);
-
- // Work-around for https://bugs.php.net/bug.php?id=75932
- $content .= 'opcache.enable_cli=0'.PHP_EOL;
-
- return (bool) @file_put_contents($this->tmpIni, $content);
- }
-
- /**
- * Returns the command line arguments for the restart
- *
- * @return string[]
- */
- private function getCommand(): array
- {
- $php = [PHP_BINARY];
- $args = array_slice($_SERVER['argv'], 1);
-
- if (!$this->persistent) {
- // Use command-line options
- array_push($php, '-n', '-c', $this->tmpIni);
- }
-
- return array_merge($php, [$this->script], $args);
- }
-
- /**
- * Returns true if the restart environment variables were set
- *
- * No need to update $_SERVER since this is set in the restarted process.
- *
- * @param string[] $iniFiles All ini files used in the current process
- */
- private function setEnvironment(bool $scannedInis, array $iniFiles): bool
- {
- $scanDir = getenv('PHP_INI_SCAN_DIR');
- $phprc = getenv('PHPRC');
-
- // Make original inis available to restarted process
- if (!putenv($this->envOriginalInis.'='.implode(PATH_SEPARATOR, $iniFiles))) {
- return false;
- }
-
- if ($this->persistent) {
- // Use the environment to persist the settings
- if (!putenv('PHP_INI_SCAN_DIR=') || !putenv('PHPRC='.$this->tmpIni)) {
- return false;
- }
- }
-
- // Flag restarted process and save values for it to use
- $envArgs = [
- self::RESTART_ID,
- self::$xdebugVersion,
- (int) $scannedInis,
- false === $scanDir ? '*' : $scanDir,
- false === $phprc ? '*' : $phprc,
- ];
-
- return putenv($this->envAllowXdebug.'='.implode('|', $envArgs));
- }
-
- /**
- * Logs status messages
- */
- private function notify(string $op, ?string $data = null): void
- {
- $this->statusWriter->report($op, $data);
- }
-
- /**
- * Returns default, changed and command-line ini settings
- *
- * @param mixed[] $loadedConfig All current ini settings
- * @param mixed[] $iniConfig Settings from user ini files
- *
- */
- private function mergeLoadedConfig(array $loadedConfig, array $iniConfig): string
- {
- $content = '';
-
- foreach ($loadedConfig as $name => $value) {
- // Value will either be null, string or array (HHVM only)
- if (!is_string($value)
- || strpos($name, 'xdebug') === 0
- || $name === 'apc.mmap_file_mask') {
- continue;
- }
-
- if (!isset($iniConfig[$name]) || $iniConfig[$name] !== $value) {
- // Double-quote escape each value
- $content .= $name.'="'.addcslashes($value, '\\"').'"'.PHP_EOL;
- }
- }
-
- return $content;
- }
-
- /**
- * Returns true if the script name can be used
- */
- private function checkMainScript(): bool
- {
- if ($this->script !== null) {
- // Allow an application to set -- for standard input
- return file_exists($this->script) || '--' === $this->script;
- }
-
- if (file_exists($this->script = $_SERVER['argv'][0])) {
- return true;
- }
-
- // Use a backtrace to resolve Phar and chdir issues.
- $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
- $main = end($trace);
-
- if ($main !== false && isset($main['file'])) {
- return file_exists($this->script = $main['file']);
- }
-
- return false;
- }
-
- /**
- * Adds restart settings to the environment
- *
- * @param string[] $envArgs
- */
- private function setEnvRestartSettings(array $envArgs): void
- {
- $settings = [
- php_ini_loaded_file(),
- $envArgs[2],
- $envArgs[3],
- $envArgs[4],
- getenv($this->envOriginalInis),
- self::$skipped,
- ];
-
- Process::setEnv(self::RESTART_SETTINGS, implode('|', $settings));
- }
-
- /**
- * Syncs settings and the environment if called with existing settings
- *
- * @phpstan-param restartData $settings
- */
- private function syncSettings(array $settings): void
- {
- if (false === getenv($this->envOriginalInis)) {
- // Called by another app, so make original inis available
- Process::setEnv($this->envOriginalInis, implode(PATH_SEPARATOR, $settings['inis']));
- }
-
- self::$skipped = $settings['skipped'];
- $this->notify(Status::INFO, 'Process called with existing restart settings');
- }
-
- /**
- * Returns true if there are no known configuration issues
- */
- private function checkConfiguration(?string &$info): bool
- {
- if (!function_exists('proc_open')) {
- $info = 'proc_open function is disabled';
- return false;
- }
-
- if (extension_loaded('uopz') && !((bool) ini_get('uopz.disable'))) {
- // uopz works at opcode level and disables exit calls
- if (function_exists('uopz_allow_exit')) {
- @uopz_allow_exit(true);
- } else {
- $info = 'uopz extension is not compatible';
- return false;
- }
- }
-
- // Check UNC paths when using cmd.exe
- if (defined('PHP_WINDOWS_VERSION_BUILD') && PHP_VERSION_ID < 70400) {
- $workingDir = getcwd();
-
- if ($workingDir === false) {
- $info = 'unable to determine working directory';
- return false;
- }
-
- if (0 === strpos($workingDir, '\\\\')) {
- $info = 'cmd.exe does not support UNC paths: '.$workingDir;
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Enables async signals and control interrupts in the restarted process
- *
- * Available on Unix PHP 7.1+ with the pcntl extension and Windows PHP 7.4+.
- */
- private function tryEnableSignals(): void
- {
- if (function_exists('pcntl_async_signals') && function_exists('pcntl_signal')) {
- pcntl_async_signals(true);
- $message = 'Async signals enabled';
-
- if (!self::$inRestart) {
- // Restarting, so ignore SIGINT in parent
- pcntl_signal(SIGINT, SIG_IGN);
- } elseif (is_int(pcntl_signal_get_handler(SIGINT))) {
- // Restarted, no handler set so force default action
- pcntl_signal(SIGINT, SIG_DFL);
- }
- }
-
- if (!self::$inRestart && function_exists('sapi_windows_set_ctrl_handler')) {
- // Restarting, so set a handler to ignore CTRL events in the parent.
- // This ensures that CTRL+C events will be available in the child
- // process without having to enable them there, which is unreliable.
- sapi_windows_set_ctrl_handler(function ($evt) {});
- }
- }
-
- /**
- * Sets static properties $xdebugActive, $xdebugVersion and $xdebugMode
- */
- private static function setXdebugDetails(): void
- {
- if (self::$xdebugActive !== null) {
- return;
- }
-
- self::$xdebugActive = false;
- if (!extension_loaded('xdebug')) {
- return;
- }
-
- $version = phpversion('xdebug');
- self::$xdebugVersion = $version !== false ? $version : 'unknown';
-
- if (version_compare(self::$xdebugVersion, '3.1', '>=')) {
- $modes = xdebug_info('mode');
- self::$xdebugMode = count($modes) === 0 ? 'off' : implode(',', $modes);
- self::$xdebugActive = self::$xdebugMode !== 'off';
- return;
- }
-
- // See if xdebug.mode is supported in this version
- $iniMode = ini_get('xdebug.mode');
- if ($iniMode === false) {
- self::$xdebugActive = true;
- return;
- }
-
- // Environment value wins but cannot be empty
- $envMode = (string) getenv('XDEBUG_MODE');
- if ($envMode !== '') {
- self::$xdebugMode = $envMode;
- } else {
- self::$xdebugMode = $iniMode !== '' ? $iniMode : 'off';
- }
-
- // An empty comma-separated list is treated as mode 'off'
- if (Preg::isMatch('/^,+$/', str_replace(' ', '', self::$xdebugMode))) {
- self::$xdebugMode = 'off';
- }
-
- self::$xdebugActive = self::$xdebugMode !== 'off';
- }
-}
diff --git a/vendor/dnoegel/php-xdg-base-dir/LICENSE b/vendor/dnoegel/php-xdg-base-dir/LICENSE
deleted file mode 100644
index 029a00ab..00000000
--- a/vendor/dnoegel/php-xdg-base-dir/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2014 Daniel Nögel
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/vendor/dnoegel/php-xdg-base-dir/README.md b/vendor/dnoegel/php-xdg-base-dir/README.md
deleted file mode 100644
index ee06b2d6..00000000
--- a/vendor/dnoegel/php-xdg-base-dir/README.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# XDG Base Directory
-
-[](https://packagist.org/packages/dnoegel/php-xdg-base-dir)
-[](https://packagist.org/packages/dnoegel/php-xdg-base-dir)
-[](LICENSE.md)
-[](https://travis-ci.org/dnoegel/php-xdg-base-dir)
-
-Implementation of XDG Base Directory specification for php
-
-## Install
-
-Via Composer
-
-``` bash
-$ composer require dnoegel/php-xdg-base-dir
-```
-
-## Usage
-
-``` php
-$xdg = new \XdgBaseDir\Xdg();
-
-echo $xdg->getHomeDir();
-echo $xdg->getHomeConfigDir();
-echo $xdg->getHomeDataDir();
-echo $xdg->getHomeCacheDir();
-echo $xdg->getRuntimeDir();
-
-print_r($xdg->getDataDirs()); // returns array
-print_r($xdg->getConfigDirs()); // returns array
-```
-
-## Testing
-
-``` bash
-$ phpunit
-```
-
-## License
-
-The MIT License (MIT). Please see [License File](https://github.com/dnoegel/php-xdg-base-dir/blob/master/LICENSE) for more information.
diff --git a/vendor/dnoegel/php-xdg-base-dir/composer.json b/vendor/dnoegel/php-xdg-base-dir/composer.json
deleted file mode 100644
index 94c46374..00000000
--- a/vendor/dnoegel/php-xdg-base-dir/composer.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "name": "dnoegel/php-xdg-base-dir",
- "description": "implementation of xdg base directory specification for php",
- "type": "library",
- "license": "MIT",
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
- },
- "autoload": {
- "psr-4": {
- "XdgBaseDir\\": "src/"
- }
- }
-}
diff --git a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php b/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
deleted file mode 100644
index 2dd314d0..00000000
--- a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
+++ /dev/null
@@ -1,132 +0,0 @@
-getHomeDir();
-
- $path = DIRECTORY_SEPARATOR === $homeDir ? $homeDir.'.config' : $homeDir . DIRECTORY_SEPARATOR . '.config';
-
- return $path;
- }
-
- /**
- * @return string
- */
- public function getHomeDataDir()
- {
- $path = getenv('XDG_DATA_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.local' . DIRECTORY_SEPARATOR . 'share';
-
- return $path;
- }
-
- /**
- * @return array
- */
- public function getConfigDirs()
- {
- $configDirs = getenv('XDG_CONFIG_DIRS') ? explode(':', getenv('XDG_CONFIG_DIRS')) : array('/etc/xdg');
-
- $paths = array_merge(array($this->getHomeConfigDir()), $configDirs);
-
- return $paths;
- }
-
- /**
- * @return array
- */
- public function getDataDirs()
- {
- $dataDirs = getenv('XDG_DATA_DIRS') ? explode(':', getenv('XDG_DATA_DIRS')) : array('/usr/local/share', '/usr/share');
-
- $paths = array_merge(array($this->getHomeDataDir()), $dataDirs);
-
- return $paths;
- }
-
- /**
- * @return string
- */
- public function getHomeCacheDir()
- {
- $path = getenv('XDG_CACHE_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.cache';
-
- return $path;
-
- }
-
- public function getRuntimeDir($strict=true)
- {
- if ($runtimeDir = getenv('XDG_RUNTIME_DIR')) {
- return $runtimeDir;
- }
-
- if ($strict) {
- throw new \RuntimeException('XDG_RUNTIME_DIR was not set');
- }
-
- $fallback = sys_get_temp_dir() . DIRECTORY_SEPARATOR . self::RUNTIME_DIR_FALLBACK . getenv('USER');
-
- $create = false;
-
- if (!is_dir($fallback)) {
- mkdir($fallback, 0700, true);
- }
-
- $st = lstat($fallback);
-
- # The fallback must be a directory
- if (!$st['mode'] & self::S_IFDIR) {
- rmdir($fallback);
- $create = true;
- } elseif ($st['uid'] != $this->getUid() ||
- $st['mode'] & (self::S_IRWXG | self::S_IRWXO)
- ) {
- rmdir($fallback);
- $create = true;
- }
-
- if ($create) {
- mkdir($fallback, 0700, true);
- }
-
- return $fallback;
- }
-
- private function getUid()
- {
- if (function_exists('posix_getuid')) {
- return posix_getuid();
- }
-
- return getmyuid();
- }
-}
diff --git a/vendor/doctrine/deprecations/LICENSE b/vendor/doctrine/deprecations/LICENSE
deleted file mode 100644
index 156905cd..00000000
--- a/vendor/doctrine/deprecations/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2020-2021 Doctrine Project
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/doctrine/deprecations/README.md b/vendor/doctrine/deprecations/README.md
deleted file mode 100644
index 93caf83f..00000000
--- a/vendor/doctrine/deprecations/README.md
+++ /dev/null
@@ -1,157 +0,0 @@
-# Doctrine Deprecations
-
-A small (side-effect free by default) layer on top of
-`trigger_error(E_USER_DEPRECATED)` or PSR-3 logging.
-
-- no side-effects by default, making it a perfect fit for libraries that don't know how the error handler works they operate under
-- options to avoid having to rely on error handlers global state by using PSR-3 logging
-- deduplicate deprecation messages to avoid excessive triggering and reduce overhead
-
-We recommend to collect Deprecations using a PSR logger instead of relying on
-the global error handler.
-
-## Usage from consumer perspective:
-
-Enable Doctrine deprecations to be sent to a PSR3 logger:
-
-```php
-\Doctrine\Deprecations\Deprecation::enableWithPsrLogger($logger);
-```
-
-Enable Doctrine deprecations to be sent as `@trigger_error($message, E_USER_DEPRECATED)`
-messages by setting the `DOCTRINE_DEPRECATIONS` environment variable to `trigger`.
-Alternatively, call:
-
-```php
-\Doctrine\Deprecations\Deprecation::enableWithTriggerError();
-```
-
-If you only want to enable deprecation tracking, without logging or calling `trigger_error`
-then set the `DOCTRINE_DEPRECATIONS` environment variable to `track`.
-Alternatively, call:
-
-```php
-\Doctrine\Deprecations\Deprecation::enableTrackingDeprecations();
-```
-
-Tracking is enabled with all three modes and provides access to all triggered
-deprecations and their individual count:
-
-```php
-$deprecations = \Doctrine\Deprecations\Deprecation::getTriggeredDeprecations();
-
-foreach ($deprecations as $identifier => $count) {
- echo $identifier . " was triggered " . $count . " times\n";
-}
-```
-
-### Suppressing Specific Deprecations
-
-Disable triggering about specific deprecations:
-
-```php
-\Doctrine\Deprecations\Deprecation::ignoreDeprecations("https://link/to/deprecations-description-identifier");
-```
-
-Disable all deprecations from a package
-
-```php
-\Doctrine\Deprecations\Deprecation::ignorePackage("doctrine/orm");
-```
-
-### Other Operations
-
-When used within PHPUnit or other tools that could collect multiple instances of the same deprecations
-the deduplication can be disabled:
-
-```php
-\Doctrine\Deprecations\Deprecation::withoutDeduplication();
-```
-
-Disable deprecation tracking again:
-
-```php
-\Doctrine\Deprecations\Deprecation::disable();
-```
-
-## Usage from a library/producer perspective:
-
-When you want to unconditionally trigger a deprecation even when called
-from the library itself then the `trigger` method is the way to go:
-
-```php
-\Doctrine\Deprecations\Deprecation::trigger(
- "doctrine/orm",
- "https://link/to/deprecations-description",
- "message"
-);
-```
-
-If variable arguments are provided at the end, they are used with `sprintf` on
-the message.
-
-```php
-\Doctrine\Deprecations\Deprecation::trigger(
- "doctrine/orm",
- "https://github.com/doctrine/orm/issue/1234",
- "message %s %d",
- "foo",
- 1234
-);
-```
-
-When you want to trigger a deprecation only when it is called by a function
-outside of the current package, but not trigger when the package itself is the cause,
-then use:
-
-```php
-\Doctrine\Deprecations\Deprecation::triggerIfCalledFromOutside(
- "doctrine/orm",
- "https://link/to/deprecations-description",
- "message"
-);
-```
-
-Based on the issue link each deprecation message is only triggered once per
-request.
-
-A limited stacktrace is included in the deprecation message to find the
-offending location.
-
-Note: A producer/library should never call `Deprecation::enableWith` methods
-and leave the decision how to handle deprecations to application and
-frameworks.
-
-## Usage in PHPUnit tests
-
-There is a `VerifyDeprecations` trait that you can use to make assertions on
-the occurrence of deprecations within a test.
-
-```php
-use Doctrine\Deprecations\PHPUnit\VerifyDeprecations;
-
-class MyTest extends TestCase
-{
- use VerifyDeprecations;
-
- public function testSomethingDeprecation()
- {
- $this->expectDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234');
-
- triggerTheCodeWithDeprecation();
- }
-
- public function testSomethingDeprecationFixed()
- {
- $this->expectNoDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234');
-
- triggerTheCodeWithoutDeprecation();
- }
-}
-```
-
-## What is a deprecation identifier?
-
-An identifier for deprecations is just a link to any resource, most often a
-Github Issue or Pull Request explaining the deprecation and potentially its
-alternative.
diff --git a/vendor/doctrine/deprecations/composer.json b/vendor/doctrine/deprecations/composer.json
deleted file mode 100644
index f8319f9a..00000000
--- a/vendor/doctrine/deprecations/composer.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "doctrine/deprecations",
- "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
- "license": "MIT",
- "type": "library",
- "homepage": "https://www.doctrine-project.org/",
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9",
- "phpstan/phpstan": "1.4.10 || 1.10.15",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "psalm/plugin-phpunit": "0.18.4",
- "psr/log": "^1 || ^2 || ^3",
- "vimeo/psalm": "4.30.0 || 5.12.0"
- },
- "suggest": {
- "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "DeprecationTests\\": "test_fixtures/src",
- "Doctrine\\Foo\\": "test_fixtures/vendor/doctrine/foo"
- }
- },
- "config": {
- "allow-plugins": {
- "dealerdirect/phpcodesniffer-composer-installer": true
- }
- }
-}
diff --git a/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php b/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php
deleted file mode 100644
index bad5070a..00000000
--- a/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php
+++ /dev/null
@@ -1,313 +0,0 @@
-|null */
- private static $type;
-
- /** @var LoggerInterface|null */
- private static $logger;
-
- /** @var array */
- private static $ignoredPackages = [];
-
- /** @var array */
- private static $triggeredDeprecations = [];
-
- /** @var array */
- private static $ignoredLinks = [];
-
- /** @var bool */
- private static $deduplication = true;
-
- /**
- * Trigger a deprecation for the given package and identfier.
- *
- * The link should point to a Github issue or Wiki entry detailing the
- * deprecation. It is additionally used to de-duplicate the trigger of the
- * same deprecation during a request.
- *
- * @param float|int|string $args
- */
- public static function trigger(string $package, string $link, string $message, ...$args): void
- {
- $type = self::$type ?? self::getTypeFromEnv();
-
- if ($type === self::TYPE_NONE) {
- return;
- }
-
- if (isset(self::$ignoredLinks[$link])) {
- return;
- }
-
- if (array_key_exists($link, self::$triggeredDeprecations)) {
- self::$triggeredDeprecations[$link]++;
- } else {
- self::$triggeredDeprecations[$link] = 1;
- }
-
- if (self::$deduplication === true && self::$triggeredDeprecations[$link] > 1) {
- return;
- }
-
- if (isset(self::$ignoredPackages[$package])) {
- return;
- }
-
- $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-
- $message = sprintf($message, ...$args);
-
- self::delegateTriggerToBackend($message, $backtrace, $link, $package);
- }
-
- /**
- * Trigger a deprecation for the given package and identifier when called from outside.
- *
- * "Outside" means we assume that $package is currently installed as a
- * dependency and the caller is not a file in that package. When $package
- * is installed as a root package then deprecations triggered from the
- * tests folder are also considered "outside".
- *
- * This deprecation method assumes that you are using Composer to install
- * the dependency and are using the default /vendor/ folder and not a
- * Composer plugin to change the install location. The assumption is also
- * that $package is the exact composer packge name.
- *
- * Compared to {@link trigger()} this method causes some overhead when
- * deprecation tracking is enabled even during deduplication, because it
- * needs to call {@link debug_backtrace()}
- *
- * @param float|int|string $args
- */
- public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args): void
- {
- $type = self::$type ?? self::getTypeFromEnv();
-
- if ($type === self::TYPE_NONE) {
- return;
- }
-
- $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-
- // first check that the caller is not from a tests folder, in which case we always let deprecations pass
- if (isset($backtrace[1]['file'], $backtrace[0]['file']) && strpos($backtrace[1]['file'], DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === false) {
- $path = DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $package) . DIRECTORY_SEPARATOR;
-
- if (strpos($backtrace[0]['file'], $path) === false) {
- return;
- }
-
- if (strpos($backtrace[1]['file'], $path) !== false) {
- return;
- }
- }
-
- if (isset(self::$ignoredLinks[$link])) {
- return;
- }
-
- if (array_key_exists($link, self::$triggeredDeprecations)) {
- self::$triggeredDeprecations[$link]++;
- } else {
- self::$triggeredDeprecations[$link] = 1;
- }
-
- if (self::$deduplication === true && self::$triggeredDeprecations[$link] > 1) {
- return;
- }
-
- if (isset(self::$ignoredPackages[$package])) {
- return;
- }
-
- $message = sprintf($message, ...$args);
-
- self::delegateTriggerToBackend($message, $backtrace, $link, $package);
- }
-
- /**
- * @param list $backtrace
- */
- private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package): void
- {
- $type = self::$type ?? self::getTypeFromEnv();
-
- if (($type & self::TYPE_PSR_LOGGER) > 0) {
- $context = [
- 'file' => $backtrace[0]['file'] ?? null,
- 'line' => $backtrace[0]['line'] ?? null,
- 'package' => $package,
- 'link' => $link,
- ];
-
- assert(self::$logger !== null);
-
- self::$logger->notice($message, $context);
- }
-
- if (! (($type & self::TYPE_TRIGGER_ERROR) > 0)) {
- return;
- }
-
- $message .= sprintf(
- ' (%s:%d called by %s:%d, %s, package %s)',
- self::basename($backtrace[0]['file'] ?? 'native code'),
- $backtrace[0]['line'] ?? 0,
- self::basename($backtrace[1]['file'] ?? 'native code'),
- $backtrace[1]['line'] ?? 0,
- $link,
- $package
- );
-
- @trigger_error($message, E_USER_DEPRECATED);
- }
-
- /**
- * A non-local-aware version of PHPs basename function.
- */
- private static function basename(string $filename): string
- {
- $pos = strrpos($filename, DIRECTORY_SEPARATOR);
-
- if ($pos === false) {
- return $filename;
- }
-
- return substr($filename, $pos + 1);
- }
-
- public static function enableTrackingDeprecations(): void
- {
- self::$type = self::$type ?? 0;
- self::$type |= self::TYPE_TRACK_DEPRECATIONS;
- }
-
- public static function enableWithTriggerError(): void
- {
- self::$type = self::$type ?? 0;
- self::$type |= self::TYPE_TRIGGER_ERROR;
- }
-
- public static function enableWithPsrLogger(LoggerInterface $logger): void
- {
- self::$type = self::$type ?? 0;
- self::$type |= self::TYPE_PSR_LOGGER;
- self::$logger = $logger;
- }
-
- public static function withoutDeduplication(): void
- {
- self::$deduplication = false;
- }
-
- public static function disable(): void
- {
- self::$type = self::TYPE_NONE;
- self::$logger = null;
- self::$deduplication = true;
- self::$ignoredLinks = [];
-
- foreach (self::$triggeredDeprecations as $link => $count) {
- self::$triggeredDeprecations[$link] = 0;
- }
- }
-
- public static function ignorePackage(string $packageName): void
- {
- self::$ignoredPackages[$packageName] = true;
- }
-
- public static function ignoreDeprecations(string ...$links): void
- {
- foreach ($links as $link) {
- self::$ignoredLinks[$link] = true;
- }
- }
-
- public static function getUniqueTriggeredDeprecationsCount(): int
- {
- return array_reduce(self::$triggeredDeprecations, static function (int $carry, int $count) {
- return $carry + $count;
- }, 0);
- }
-
- /**
- * Returns each triggered deprecation link identifier and the amount of occurrences.
- *
- * @return array
- */
- public static function getTriggeredDeprecations(): array
- {
- return self::$triggeredDeprecations;
- }
-
- /**
- * @return int-mask-of
- */
- private static function getTypeFromEnv(): int
- {
- switch ($_SERVER['DOCTRINE_DEPRECATIONS'] ?? $_ENV['DOCTRINE_DEPRECATIONS'] ?? null) {
- case 'trigger':
- self::$type = self::TYPE_TRIGGER_ERROR;
- break;
-
- case 'track':
- self::$type = self::TYPE_TRACK_DEPRECATIONS;
- break;
-
- default:
- self::$type = self::TYPE_NONE;
- break;
- }
-
- return self::$type;
- }
-}
diff --git a/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php b/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php
deleted file mode 100644
index 4c3366a9..00000000
--- a/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php
+++ /dev/null
@@ -1,66 +0,0 @@
- */
- private $doctrineDeprecationsExpectations = [];
-
- /** @var array */
- private $doctrineNoDeprecationsExpectations = [];
-
- public function expectDeprecationWithIdentifier(string $identifier): void
- {
- $this->doctrineDeprecationsExpectations[$identifier] = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0;
- }
-
- public function expectNoDeprecationWithIdentifier(string $identifier): void
- {
- $this->doctrineNoDeprecationsExpectations[$identifier] = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0;
- }
-
- /**
- * @before
- */
- public function enableDeprecationTracking(): void
- {
- Deprecation::enableTrackingDeprecations();
- }
-
- /**
- * @after
- */
- public function verifyDeprecationsAreTriggered(): void
- {
- foreach ($this->doctrineDeprecationsExpectations as $identifier => $expectation) {
- $actualCount = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0;
-
- $this->assertTrue(
- $actualCount > $expectation,
- sprintf(
- "Expected deprecation with identifier '%s' was not triggered by code executed in test.",
- $identifier
- )
- );
- }
-
- foreach ($this->doctrineNoDeprecationsExpectations as $identifier => $expectation) {
- $actualCount = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0;
-
- $this->assertTrue(
- $actualCount === $expectation,
- sprintf(
- "Expected deprecation with identifier '%s' was triggered by code executed in test, but expected not to.",
- $identifier
- )
- );
- }
- }
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/.github/workflows/build.yml b/vendor/felixfbecker/advanced-json-rpc/.github/workflows/build.yml
deleted file mode 100644
index 4b0bd562..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/.github/workflows/build.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-name: build
-
-on: [push, pull_request]
-
-env:
- FORCE_COLOR: 1
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
-jobs:
- test:
- strategy:
- matrix:
- php:
- - 7.1
- - 7.2
- - 7.3
- - 7.4
- - 8.0
- deps:
- - lowest
- - highest
- include:
- - php: 8.1
- deps: highest
- composer-options: --ignore-platform-reqs
- exclude:
- # that config currently breaks as older PHPUnit cannot generate coverage on PHP 8
- - php: 8
- deps: lowest
-
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
-
- - name: Setup PHP
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php }}
-
- - uses: ramsey/composer-install@v1
- with:
- dependency-versions: ${{ matrix.deps }}
- composer-options: ${{ matrix.composer-options }}
-
- - run: vendor/bin/phpunit --coverage-clover=coverage.xml --whitelist lib --bootstrap vendor/autoload.php tests
-
- - uses: codecov/codecov-action@v1
-
- release:
- needs: test
- if: github.repository_owner == 'felixfbecker' && github.event_name == 'push' && github.ref == 'refs/heads/master'
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
-
- - name: Setup Node.js
- uses: actions/setup-node@v2
-
- - name: Install npm dependencies
- run: npm ci
-
- - name: Release
- run: npm run semantic-release
diff --git a/vendor/felixfbecker/advanced-json-rpc/LICENSE b/vendor/felixfbecker/advanced-json-rpc/LICENSE
deleted file mode 100644
index fc354170..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-ISC License
-
-Copyright (c) 2016, Felix Frederick Becker
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/vendor/felixfbecker/advanced-json-rpc/composer.json b/vendor/felixfbecker/advanced-json-rpc/composer.json
deleted file mode 100644
index c4d5739e..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/composer.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "felixfbecker/advanced-json-rpc",
- "description": "A more advanced JSONRPC implementation",
- "type": "library",
- "license": "ISC",
- "authors": [
- {
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
- }
- ],
- "autoload": {
- "psr-4": {
- "AdvancedJsonRpc\\": "lib/"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "AdvancedJsonRpc\\Tests\\": "tests/"
- }
- },
- "require": {
- "php": "^7.1 || ^8.0",
- "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
- "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.0 || ^8.0"
- },
- "minimum-stability": "dev",
- "prefer-stable": true
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php b/vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php
deleted file mode 100644
index 5f045df6..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php
+++ /dev/null
@@ -1,171 +0,0 @@
- ReflectionMethod[]
- *
- * @var ReflectionMethod
- */
- private $methods;
-
- /**
- * @var \phpDocumentor\Reflection\DocBlockFactory
- */
- private $docBlockFactory;
-
- /**
- * @var \phpDocumentor\Reflection\Types\ContextFactory
- */
- private $contextFactory;
-
- /**
- * @param object $target The target object that should receive the method calls
- * @param string $delimiter A delimiter for method calls on properties, for example someProperty->someMethod
- */
- public function __construct($target, $delimiter = '->')
- {
- $this->target = $target;
- $this->delimiter = $delimiter;
- $this->docBlockFactory = DocBlockFactory::createInstance();
- $this->contextFactory = new Types\ContextFactory();
- $this->mapper = new JsonMapper();
- }
-
- /**
- * Calls the appropriate method handler for an incoming Message
- *
- * @param string|object $msg The incoming message
- * @return mixed
- */
- public function dispatch($msg)
- {
- if (is_string($msg)) {
- $msg = json_decode($msg);
- if (json_last_error() !== JSON_ERROR_NONE) {
- throw new Error(json_last_error_msg(), ErrorCode::PARSE_ERROR);
- }
- }
- // Find out the object and function that should be called
- $obj = $this->target;
- $parts = explode($this->delimiter, $msg->method);
- // The function to call is always the last part of the method
- $fn = array_pop($parts);
- // For namespaced methods like textDocument/didOpen, call the didOpen method on the $textDocument property
- // For simple methods like initialize, shutdown, exit, this loop will simply not be entered and $obj will be
- // the target
- foreach ($parts as $part) {
- if (!isset($obj->$part)) {
- throw new Error("Method {$msg->method} is not implemented", ErrorCode::METHOD_NOT_FOUND);
- }
- $obj = $obj->$part;
- }
- if (!isset($this->methods[$msg->method])) {
- try {
- $method = new ReflectionMethod($obj, $fn);
- $this->methods[$msg->method] = $method;
- } catch (ReflectionException $e) {
- throw new Error($e->getMessage(), ErrorCode::METHOD_NOT_FOUND, null, $e);
- }
- }
- $method = $this->methods[$msg->method];
- $parameters = $method->getParameters();
- if ($method->getDocComment()) {
- $docBlock = $this->docBlockFactory->create(
- $method->getDocComment(),
- $this->contextFactory->createFromReflector($method->getDeclaringClass())
- );
- $paramTags = $docBlock->getTagsByName('param');
- }
- $args = [];
- if (isset($msg->params)) {
- // Find out the position
- if (is_array($msg->params)) {
- $args = $msg->params;
- } else if (is_object($msg->params)) {
- foreach ($parameters as $pos => $parameter) {
- $value = null;
- foreach(get_object_vars($msg->params) as $key => $val) {
- if ($parameter->name === $key) {
- $value = $val;
- break;
- }
- }
- $args[$pos] = $value;
- }
- } else {
- throw new Error('Params must be structured or omitted', ErrorCode::INVALID_REQUEST);
- }
- foreach ($args as $position => $value) {
- try {
- // If the type is structured (array or object), map it with JsonMapper
- if (is_object($value)) {
- // Does the parameter have a type hint?
- $param = $parameters[$position];
- if ($param->hasType()) {
- $paramType = $param->getType();
- if ($paramType instanceof ReflectionNamedType) {
- // We have object data to map and want the class name.
- // This should not include the `?` if the type was nullable.
- $class = $paramType->getName();
- } else {
- // Fallback for php 7.0, which is still supported (and doesn't have nullable).
- $class = (string)$paramType;
- }
- $value = $this->mapper->map($value, new $class());
- }
- } else if (is_array($value) && isset($docBlock)) {
- // Get the array type from the DocBlock
- $type = $paramTags[$position]->getType();
- // For union types, use the first one that is a class array (often it is SomeClass[]|null)
- if ($type instanceof Types\Compound) {
- for ($i = 0; $t = $type->get($i); $i++) {
- if (
- $t instanceof Types\Array_
- && $t->getValueType() instanceof Types\Object_
- && (string)$t->getValueType() !== 'object'
- ) {
- $class = (string)$t->getValueType()->getFqsen();
- $value = $this->mapper->mapArray($value, [], $class);
- break;
- }
- }
- } else if ($type instanceof Types\Array_) {
- $class = (string)$type->getValueType()->getFqsen();
- $value = $this->mapper->mapArray($value, [], $class);
- } else {
- throw new Error('Type is not matching @param tag', ErrorCode::INVALID_PARAMS);
- }
- }
- } catch (JsonMapper_Exception $e) {
- throw new Error($e->getMessage(), ErrorCode::INVALID_PARAMS, null, $e);
- }
- $args[$position] = $value;
- }
- }
- ksort($args);
- $result = $obj->$fn(...$args);
- return $result;
- }
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/Error.php b/vendor/felixfbecker/advanced-json-rpc/lib/Error.php
deleted file mode 100644
index b2801918..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/lib/Error.php
+++ /dev/null
@@ -1,38 +0,0 @@
-data = $data;
- }
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/ErrorCode.php b/vendor/felixfbecker/advanced-json-rpc/lib/ErrorCode.php
deleted file mode 100644
index f0ef4792..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/lib/ErrorCode.php
+++ /dev/null
@@ -1,48 +0,0 @@
-id) && isset($msg->error);
- }
-
- /**
- * @param int|string $id
- * @param \AdvancedJsonRpc\Error $error
- */
- public function __construct($id, Error $error)
- {
- parent::__construct($id);
- $this->error = $error;
- }
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/Message.php b/vendor/felixfbecker/advanced-json-rpc/lib/Message.php
deleted file mode 100644
index e2231dc5..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/lib/Message.php
+++ /dev/null
@@ -1,52 +0,0 @@
-method, $decoded->params ?? null);
- } else if (Request::isRequest($decoded)) {
- $obj = new Request($decoded->id, $decoded->method, $decoded->params ?? null);
- } else if (SuccessResponse::isSuccessResponse($decoded)) {
- $obj = new SuccessResponse($decoded->id, $decoded->result);
- } else if (ErrorResponse::isErrorResponse($decoded)) {
- $obj = new ErrorResponse($decoded->id, new Error($decoded->error->message, $decoded->error->code, $decoded->error->data ?? null));
- } else {
- throw new Error('Invalid message', ErrorCode::INVALID_REQUEST);
- }
- return $obj;
- }
-
- public function __toString(): string
- {
- $encoded = json_encode($this);
- if ($encoded === false) {
- throw new Error(json_last_error_msg(), ErrorCode::INTERNAL_ERROR);
- }
- return $encoded;
- }
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/Notification.php b/vendor/felixfbecker/advanced-json-rpc/lib/Notification.php
deleted file mode 100644
index 3440164d..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/lib/Notification.php
+++ /dev/null
@@ -1,56 +0,0 @@
-method);
- }
-
- /**
- * @param string $method
- * @param mixed $params
- */
- public function __construct(string $method, $params = null)
- {
- $this->method = $method;
- $this->params = $params;
- }
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/Request.php b/vendor/felixfbecker/advanced-json-rpc/lib/Request.php
deleted file mode 100644
index 14290082..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/lib/Request.php
+++ /dev/null
@@ -1,63 +0,0 @@
-method);
- }
-
- /**
- * @param string|int $id
- * @param string $method
- * @param object|array $params
- */
- public function __construct($id, string $method, $params = null)
- {
- $this->id = $id;
- $this->method = $method;
- $this->params = $params;
- }
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/Response.php b/vendor/felixfbecker/advanced-json-rpc/lib/Response.php
deleted file mode 100644
index a871eeac..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/lib/Response.php
+++ /dev/null
@@ -1,40 +0,0 @@
-error));
- }
-
- /**
- * @param int|string $id
- * @param mixed $result
- * @param ResponseError $error
- */
- public function __construct($id)
- {
- $this->id = $id;
- }
-}
diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/SuccessResponse.php b/vendor/felixfbecker/advanced-json-rpc/lib/SuccessResponse.php
deleted file mode 100644
index 222fd46e..00000000
--- a/vendor/felixfbecker/advanced-json-rpc/lib/SuccessResponse.php
+++ /dev/null
@@ -1,40 +0,0 @@
-result = $result;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/.editorconfig b/vendor/felixfbecker/language-server-protocol/.editorconfig
deleted file mode 100644
index b5f0c5df..00000000
--- a/vendor/felixfbecker/language-server-protocol/.editorconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-
-[*]
-insert_final_newline = true
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-indent_style = space
-indent_size = 4
-
-[*.{json,yml}]
-indent_size = 2
-
-[composer.json]
-indent_size = 4
-
-[*.md]
-trim_trailing_whitespace = false
diff --git a/vendor/felixfbecker/language-server-protocol/.github/workflows/build.yml b/vendor/felixfbecker/language-server-protocol/.github/workflows/build.yml
deleted file mode 100644
index 5a9a2a4d..00000000
--- a/vendor/felixfbecker/language-server-protocol/.github/workflows/build.yml
+++ /dev/null
@@ -1,67 +0,0 @@
-name: build
-
-on: [push, pull_request]
-
-env:
- FORCE_COLOR: 3
-
-jobs:
- test:
- if: github.event_name == 'pull_request' || github.ref == 'refs/heads/master'
- runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- include:
- - php: '7.4'
- os: ubuntu-18.04
- - php: '8.0'
- os: ubuntu-18.04
- - php: '8.1'
- os: ubuntu-18.04
- steps:
- - uses: actions/checkout@v2
- - name: Setup Node.js
- uses: actions/setup-node@v2
- with:
- node-version: '14.15.3' # renovate:keep-up-to-date
- - name: Install npm dependencies
- run: npm ci
- - name: Setup PHP
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php }}
- extensions: ${{ matrix.xdebug }}, ast
- tools: composer
- - name: Composer Install
- run: COMPOSER_ROOT_VERSION=dev-master composer install --prefer-dist --no-interaction
- - name: phpcs
- run: ./vendor/bin/phpcs -n
- - name: phpstan
- run: ./vendor/bin/phpstan
- - name: psalm
- run: ./vendor/bin/psalm
-# - name: phan
-# run: ./vendor/bin/phan
-# - name: phpunit
-# run: vendor/bin/phpunit --coverage-clover=coverage.xml --colors=always
-# - name: Upload coverage to Codecov
-# uses: codecov/codecov-action@v2
-# release:
-# runs-on: ubuntu-18.04
-# needs: test
-# if: github.repository_owner == 'xdebug' && github.event_name == 'push' && github.ref == 'refs/heads/main'
-# steps:
-# - uses: actions/checkout@v2
-# - name: Setup Node.js
-# uses: actions/setup-node@v2
-# with:
-# node-version: '14.15.3' # renovate:keep-up-to-date
-# - name: Install npm dependencies
-# run: npm ci
-# - name: Build VS Code extension
-# run: npm run build
-# - name: Release
-# env:
-# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-# VSCE_TOKEN: ${{ secrets.VSCE_TOKEN }}
-# run: npm run semantic-release
diff --git a/vendor/felixfbecker/language-server-protocol/LICENSE b/vendor/felixfbecker/language-server-protocol/LICENSE
deleted file mode 100644
index fc354170..00000000
--- a/vendor/felixfbecker/language-server-protocol/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-ISC License
-
-Copyright (c) 2016, Felix Frederick Becker
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/vendor/felixfbecker/language-server-protocol/README.md b/vendor/felixfbecker/language-server-protocol/README.md
deleted file mode 100644
index 1e169d1e..00000000
--- a/vendor/felixfbecker/language-server-protocol/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Language Server Protocol for PHP
-
-[](https://packagist.org/packages/felixfbecker/language-server-protocol)
-[](https://travis-ci.org/felixfbecker/php-language-server-protocol)
-[](https://php.net/)
-[](https://github.com/felixfbecker/php-language-server-protocol/blob/master/LICENSE)
-
-Protocol classes for the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) in PHP
-
-## Installation
-
-```
-composer require felixfbecker/language-server-protocol
-```
-
-## Releases
-
-Releases are done automatically in CI by analyzing commit messages.
-Make sure to follow the [Conventional Commits Convention](https://www.conventionalcommits.org/en/v1.0.0-beta.2/).
diff --git a/vendor/felixfbecker/language-server-protocol/composer.json b/vendor/felixfbecker/language-server-protocol/composer.json
deleted file mode 100644
index 4d653b4a..00000000
--- a/vendor/felixfbecker/language-server-protocol/composer.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "felixfbecker/language-server-protocol",
- "description": "PHP classes for the Language Server Protocol",
- "license": "ISC",
- "keywords": [
- "php",
- "language",
- "server",
- "microsoft"
- ],
- "authors": [
- {
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
- }
- ],
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "phpstan/phpstan": "*",
- "squizlabs/php_codesniffer": "^3.1",
- "vimeo/psalm": "^4.0"
- },
- "autoload": {
- "psr-4": {
- "LanguageServerProtocol\\": "src/"
- }
- },
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "minimum-stability": "dev",
- "prefer-stable": true,
- "scripts":
- {
- "phpstan": "phpstan analyse -c phpstan.neon --ansi --level=7 -vvv src",
- "psalm": "psalm",
- "phpcs": "phpcs",
- "phpcbf": "phpcbf"
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/package-lock.json b/vendor/felixfbecker/language-server-protocol/package-lock.json
deleted file mode 100644
index 7fcdd3b4..00000000
--- a/vendor/felixfbecker/language-server-protocol/package-lock.json
+++ /dev/null
@@ -1,6489 +0,0 @@
-{
- "name": "php-language-server-protocol",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@mrmlnc/readdir-enhanced": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
- "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
- "dev": true,
- "requires": {
- "call-me-maybe": "^1.0.1",
- "glob-to-regexp": "^0.3.0"
- }
- },
- "@nodelib/fs.stat": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz",
- "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==",
- "dev": true
- },
- "@octokit/rest": {
- "version": "15.12.0",
- "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-15.12.0.tgz",
- "integrity": "sha512-5wRag4kHRkp0JDo++L9x9FkDlHEALbLnbSede16D8u+a2/t+gX32uhDs8cukVLyyrZR79nmh1lNpxZmffwoNoQ==",
- "dev": true,
- "requires": {
- "before-after-hook": "^1.1.0",
- "btoa-lite": "^1.0.0",
- "debug": "^3.1.0",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.0",
- "lodash": "^4.17.4",
- "node-fetch": "^2.1.1",
- "universal-user-agent": "^2.0.0",
- "url-template": "^2.0.8"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
- "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@semantic-release/commit-analyzer": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-6.0.1.tgz",
- "integrity": "sha512-ENCRn1tm1D08CCBnIPsID8GjboWT6E97s0Lk3XrpAh+IMx615uAU1X2FoXyOGGc6zmqp9Ff4s8KECd/GjMcodQ==",
- "dev": true,
- "requires": {
- "conventional-changelog-angular": "^5.0.0",
- "conventional-commits-filter": "^2.0.0",
- "conventional-commits-parser": "^3.0.0",
- "debug": "^4.0.0",
- "import-from": "^2.1.0",
- "lodash": "^4.17.4"
- }
- },
- "@semantic-release/error": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz",
- "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==",
- "dev": true
- },
- "@semantic-release/github": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-5.0.5.tgz",
- "integrity": "sha512-Hdt6b8ST2pg6pl151PlcsnTcdsC2UJhA5FdbmunbZG/TVmlnKCZ4WUzpji7YqJtDLjbQTuFm/vhM6atW3XjMWg==",
- "dev": true,
- "requires": {
- "@octokit/rest": "^15.2.0",
- "@semantic-release/error": "^2.2.0",
- "aggregate-error": "^1.0.0",
- "bottleneck": "^2.0.1",
- "debug": "^4.0.0",
- "dir-glob": "^2.0.0",
- "fs-extra": "^7.0.0",
- "globby": "^8.0.0",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.1",
- "issue-parser": "^3.0.0",
- "lodash": "^4.17.4",
- "mime": "^2.0.3",
- "p-filter": "^1.0.0",
- "p-retry": "^2.0.0",
- "parse-github-url": "^1.0.1",
- "url-join": "^4.0.0"
- }
- },
- "@semantic-release/npm": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-5.0.4.tgz",
- "integrity": "sha512-ExGXP9GnM2hqUIgTnp6sXKB1G0Yh+fuLftmIopq5KHBWj34Wd2YbM/3iLkXXnAP1YZ9YCp7hsAdsR014ctbwHg==",
- "dev": true,
- "requires": {
- "@semantic-release/error": "^2.2.0",
- "aggregate-error": "^1.0.0",
- "detect-indent": "^5.0.0",
- "detect-newline": "^2.1.0",
- "execa": "^1.0.0",
- "fs-extra": "^7.0.0",
- "lodash": "^4.17.4",
- "nerf-dart": "^1.0.0",
- "normalize-url": "^3.0.0",
- "npm": "^6.3.0",
- "parse-json": "^4.0.0",
- "rc": "^1.2.8",
- "read-pkg": "^4.0.0",
- "registry-auth-token": "^3.3.1"
- },
- "dependencies": {
- "read-pkg": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
- "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
- "dev": true,
- "requires": {
- "normalize-package-data": "^2.3.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0"
- }
- }
- }
- },
- "@semantic-release/release-notes-generator": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-7.0.2.tgz",
- "integrity": "sha512-fomHrGq/gfZIAQYZk0MLRwfQ8d+DbTcI3kuO1hU2L0fDJYKHZHuPmKnsfVa5KoNdVVPHx878D/ojgyStRqhc9g==",
- "dev": true,
- "requires": {
- "conventional-changelog-angular": "^5.0.0",
- "conventional-changelog-writer": "^4.0.0",
- "conventional-commits-filter": "^2.0.0",
- "conventional-commits-parser": "^3.0.0",
- "debug": "^4.0.0",
- "get-stream": "^4.0.0",
- "git-url-parse": "^10.0.1",
- "import-from": "^2.1.0",
- "into-stream": "^3.1.0",
- "lodash": "^4.17.4"
- }
- },
- "JSONStream": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz",
- "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==",
- "dev": true,
- "requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- }
- },
- "agent-base": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
- "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
- "dev": true,
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- },
- "aggregate-error": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-1.0.0.tgz",
- "integrity": "sha1-iINE2tAiCnLjr1CQYRf0h3GSX6w=",
- "dev": true,
- "requires": {
- "clean-stack": "^1.0.0",
- "indent-string": "^3.0.0"
- }
- },
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "ansicolors": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
- "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "argv-formatter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz",
- "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=",
- "dev": true
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
- },
- "array-ify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
- "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
- "dev": true
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.10"
- }
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "before-after-hook": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.1.0.tgz",
- "integrity": "sha512-VOMDtYPwLbIncTxNoSzRyvaMxtXmLWLUqr8k5AfC1BzLk34HvBXaQX8snOwQZ4c0aX8aSERqtJSiI9/m2u5kuA==",
- "dev": true
- },
- "bottleneck": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.11.0.tgz",
- "integrity": "sha512-DvKiYR1kG1qRVoLBUtPlmJffktoBZIz3qtdUbINlwzQXDhlhZdF8gWesPjwp05xqr5QZ7wXA2k1w78/COCweTg==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "btoa-lite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
- "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=",
- "dev": true
- },
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "call-me-maybe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
- "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
- "dev": true
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- }
- },
- "cardinal": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
- "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=",
- "dev": true,
- "requires": {
- "ansicolors": "~0.3.2",
- "redeyed": "~2.1.0"
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "clean-stack": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz",
- "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=",
- "dev": true
- },
- "cli-table": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz",
- "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=",
- "dev": true,
- "requires": {
- "colors": "1.0.3"
- }
- },
- "cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
- "dev": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "colors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
- "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
- "dev": true
- },
- "commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
- "dev": true,
- "optional": true
- },
- "compare-func": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
- "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
- "dev": true,
- "requires": {
- "array-ify": "^1.0.0",
- "dot-prop": "^3.0.0"
- }
- },
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "conventional-changelog-angular": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.1.tgz",
- "integrity": "sha512-q4ylJ68fWZDdrFC9z4zKcf97HW6hp7Mo2YlqD4owfXhecFKy/PJCU/1oVFF4TqochchChqmZ0Vb0e0g8/MKNlA==",
- "dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "q": "^1.5.1"
- }
- },
- "conventional-changelog-writer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.0.tgz",
- "integrity": "sha512-hMZPe0AQ6Bi05epeK/7hz80xxk59nPA5z/b63TOHq2wigM0/akreOc8N4Jam5b9nFgKWX1e9PdPv2ewgW6bcfg==",
- "dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "conventional-commits-filter": "^2.0.0",
- "dateformat": "^3.0.0",
- "handlebars": "^4.0.2",
- "json-stringify-safe": "^5.0.1",
- "lodash": "^4.2.1",
- "meow": "^4.0.0",
- "semver": "^5.5.0",
- "split": "^1.0.0",
- "through2": "^2.0.0"
- }
- },
- "conventional-commits-filter": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.0.tgz",
- "integrity": "sha512-Cfl0j1/NquB/TMVx7Wrmyq7uRM+/rPQbtVVGwzfkhZ6/yH6fcMmP0Q/9044TBZPTNdGzm46vXFXL14wbET0/Mg==",
- "dev": true,
- "requires": {
- "is-subset": "^0.1.1",
- "modify-values": "^1.0.0"
- }
- },
- "conventional-commits-parser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.0.tgz",
- "integrity": "sha512-GWh71U26BLWgMykCp+VghZ4s64wVbtseECcKQ/PvcPZR2cUnz+FUc2J9KjxNl7/ZbCxST8R03c9fc+Vi0umS9Q==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.4",
- "is-text-path": "^1.0.0",
- "lodash": "^4.2.1",
- "meow": "^4.0.0",
- "split2": "^2.0.0",
- "through2": "^2.0.0",
- "trim-off-newlines": "^1.0.0"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "cosmiconfig": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz",
- "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==",
- "dev": true,
- "requires": {
- "is-directory": "^0.3.1",
- "js-yaml": "^3.9.0",
- "parse-json": "^4.0.0"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
- "dateformat": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
- "dev": true
- },
- "debug": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.0.1.tgz",
- "integrity": "sha512-K23FHJ/Mt404FSlp6gSZCevIbTMLX0j3fmHhUEhQ3Wq0FMODW3+cUSoLdy1Gx4polAf4t/lphhmHH35BB8cLYw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
- "dev": true,
- "requires": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- },
- "dependencies": {
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- }
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "detect-indent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
- "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
- "dev": true
- },
- "detect-newline": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
- "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
- "dev": true
- },
- "dir-glob": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
- "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "path-type": "^3.0.0"
- }
- },
- "dot-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
- "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
- "dev": true,
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
- "duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.2"
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "env-ci": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-3.0.0.tgz",
- "integrity": "sha512-3Xt4Cfjdy9MTTrg/eWTnJNQIrtU1DDV0KyuWOGlrR2oa9dOdzoOMbQBFbfrTiv+GypdiWWIw5HdmtakZO+rzWA==",
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "java-properties": "^0.2.9"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es6-promise": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
- "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==",
- "dev": true
- },
- "es6-promisify": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
- "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
- "dev": true,
- "requires": {
- "es6-promise": "^4.0.3"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "fast-glob": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz",
- "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==",
- "dev": true,
- "requires": {
- "@mrmlnc/readdir-enhanced": "^2.2.1",
- "@nodelib/fs.stat": "^1.0.1",
- "glob-parent": "^3.1.0",
- "is-glob": "^4.0.0",
- "merge2": "^1.2.1",
- "micromatch": "^3.1.10"
- }
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "find-versions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-2.0.0.tgz",
- "integrity": "sha1-KtkNSQ9oKMGqQCks9wmsMxghDDw=",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.0",
- "semver-regex": "^1.0.0"
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "fs-extra": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz",
- "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
- },
- "get-stream": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.0.0.tgz",
- "integrity": "sha512-FneLKMENeOR7wOK0/ZXCh+lwqtnPwkeunJjRN28LPqzGvNAhYvrTAhXv6xDm4vsJ0M7lcRbIYHQudKsSy2RtSQ==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "git-log-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz",
- "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=",
- "dev": true,
- "requires": {
- "argv-formatter": "~1.0.0",
- "spawn-error-forwarder": "~1.0.0",
- "split2": "~1.0.0",
- "stream-combiner2": "~1.1.1",
- "through2": "~2.0.0",
- "traverse": "~0.6.6"
- },
- "dependencies": {
- "split2": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz",
- "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=",
- "dev": true,
- "requires": {
- "through2": "~2.0.0"
- }
- }
- }
- },
- "git-up": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.0.10.tgz",
- "integrity": "sha512-2v4UN3qV2RGypD9QpmUjpk+4+RlYpW8GFuiZqQnKmvei08HsFPd0RfbDvEhnE4wBvnYs8ORVtYpOFuuCEmBVBw==",
- "dev": true,
- "requires": {
- "is-ssh": "^1.3.0",
- "parse-url": "^1.3.0"
- }
- },
- "git-url-parse": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-10.0.1.tgz",
- "integrity": "sha512-Tq2u8UPXc/FawC/dO8bvh8jcck0Lkor5OhuZvmVSeyJGRucDBfw9y2zy/GNCx28lMYh1N12IzPwDexjUNFyAeg==",
- "dev": true,
- "requires": {
- "git-up": "^2.0.0"
- }
- },
- "glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "glob-to-regexp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
- "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
- "dev": true
- },
- "globby": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
- "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "dir-glob": "^2.0.0",
- "fast-glob": "^2.0.2",
- "glob": "^7.1.2",
- "ignore": "^3.3.5",
- "pify": "^3.0.0",
- "slash": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
- "dev": true
- },
- "handlebars": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
- "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
- "dev": true,
- "requires": {
- "async": "^2.5.0",
- "optimist": "^0.6.1",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hook-std": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-1.1.0.tgz",
- "integrity": "sha512-aIyBZbZl3NS8XoSwIDQ+ZaiBuPOhhPWoBFA3QX0Q8hOMO8Tx4xGRTDnn/nl/LAtZWdieXzFC9ohAtTSnWrlHCQ==",
- "dev": true
- },
- "hosted-git-info": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
- "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
- "dev": true
- },
- "http-proxy-agent": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
- "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
- "dev": true,
- "requires": {
- "agent-base": "4",
- "debug": "3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "https-proxy-agent": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
- "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
- "dev": true,
- "requires": {
- "agent-base": "^4.1.0",
- "debug": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
- "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "ignore": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
- "dev": true
- },
- "import-from": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
- "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
- "dev": true,
- "requires": {
- "resolve-from": "^3.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- }
- }
- },
- "indent-string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
- },
- "into-stream": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
- "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
- "dev": true,
- "requires": {
- "from2": "^2.1.1",
- "p-is-promise": "^1.1.0"
- }
- },
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
- "dev": true,
- "requires": {
- "builtin-modules": "^1.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "is-directory": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
- "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-obj": {
- "version": "1.0.1",
- "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-ssh": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.0.tgz",
- "integrity": "sha1-6+oRaaJhTaOSpjdANmw84EnY3/Y=",
- "dev": true,
- "requires": {
- "protocols": "^1.1.0"
- }
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
- "is-subset": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
- "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
- "dev": true
- },
- "is-text-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
- "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
- "dev": true,
- "requires": {
- "text-extensions": "^1.0.0"
- }
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "issue-parser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-3.0.0.tgz",
- "integrity": "sha512-VWIhBdy0eOhlvpxOOMecBCHMpjx7lWVZcYpSzjD4dSdxptzI9TBR/cQEh057HL8+7jQKTLs+uCtezY/9VoveCA==",
- "dev": true,
- "requires": {
- "lodash.capitalize": "^4.2.1",
- "lodash.escaperegexp": "^4.1.2",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.uniqby": "^4.7.0"
- }
- },
- "java-properties": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-0.2.10.tgz",
- "integrity": "sha512-CpKJh9VRNhS+XqZtg1UMejETGEiqwCGDC/uwPEEQwc2nfdbSm73SIE29TplG2gLYuBOOTNDqxzG6A9NtEPLt0w==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- },
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
- "dev": true,
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "dependencies": {
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- }
- }
- },
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
- },
- "lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
- "dev": true
- },
- "lodash.capitalize": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz",
- "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=",
- "dev": true
- },
- "lodash.escaperegexp": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
- "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=",
- "dev": true
- },
- "lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
- "dev": true
- },
- "lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
- "dev": true
- },
- "lodash.toarray": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
- "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
- "dev": true
- },
- "lodash.uniqby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
- "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=",
- "dev": true
- },
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "dev": true,
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- }
- },
- "macos-release": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-1.1.0.tgz",
- "integrity": "sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA==",
- "dev": true
- },
- "map-age-cleaner": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz",
- "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==",
- "dev": true,
- "requires": {
- "p-defer": "^1.0.0"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "marked": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.0.tgz",
- "integrity": "sha512-UhjmkCWKu1SS/BIePL2a59BMJ7V42EYtTfksodPRXzPEGEph3Inp5dylseqt+KbU9Jglsx8xcMKmlumfJMBXAA==",
- "dev": true
- },
- "marked-terminal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.1.1.tgz",
- "integrity": "sha512-7UBFww1rdx0w9HehLMCVYa8/AxXaiDigDfMsJcj82/wgLQG9cj+oiMAVlJpeWD57VFJY2OYY+bKeEVIjIlxi+w==",
- "dev": true,
- "requires": {
- "cardinal": "^2.1.1",
- "chalk": "^2.4.1",
- "cli-table": "^0.3.1",
- "lodash.assign": "^4.2.0",
- "node-emoji": "^1.4.1"
- }
- },
- "mem": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
- "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^1.0.0",
- "p-is-promise": "^1.1.0"
- }
- },
- "meow": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
- "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
- "dev": true,
- "requires": {
- "camelcase-keys": "^4.0.0",
- "decamelize-keys": "^1.0.0",
- "loud-rejection": "^1.0.0",
- "minimist": "^1.1.3",
- "minimist-options": "^3.0.1",
- "normalize-package-data": "^2.3.4",
- "read-pkg-up": "^3.0.0",
- "redent": "^2.0.0",
- "trim-newlines": "^2.0.0"
- },
- "dependencies": {
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- }
- }
- },
- "merge2": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz",
- "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "mime": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz",
- "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==",
- "dev": true
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "minimist-options": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
- "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0"
- }
- },
- "mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "modify-values": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
- "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
- "dev": true
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "nerf-dart": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz",
- "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node-emoji": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.8.1.tgz",
- "integrity": "sha512-+ktMAh1Jwas+TnGodfCfjUbJKoANqPaJFN0z0iqh41eqD8dvguNzcitVSBSVK1pidz0AqGbLKcoVuVLRVZ/aVg==",
- "dev": true,
- "requires": {
- "lodash.toarray": "^4.4.0"
- }
- },
- "node-fetch": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz",
- "integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA==",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "normalize-url": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
- "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
- "dev": true
- },
- "npm": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.4.1.tgz",
- "integrity": "sha512-mXJL1NTVU136PtuopXCUQaNWuHlXCTp4McwlSW8S9/Aj8OEPAlSBgo8og7kJ01MjCDrkmqFQTvN5tTEhBMhXQg==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.3.4",
- "abbrev": "~1.1.1",
- "ansicolors": "~0.3.2",
- "ansistyles": "~0.1.3",
- "aproba": "~1.2.0",
- "archy": "~1.0.0",
- "bin-links": "^1.1.2",
- "bluebird": "~3.5.1",
- "byte-size": "^4.0.3",
- "cacache": "^11.2.0",
- "call-limit": "~1.1.0",
- "chownr": "~1.0.1",
- "ci-info": "^1.4.0",
- "cli-columns": "^3.1.2",
- "cli-table3": "^0.5.0",
- "cmd-shim": "~2.0.2",
- "columnify": "~1.5.4",
- "config-chain": "~1.1.11",
- "debuglog": "*",
- "detect-indent": "~5.0.0",
- "detect-newline": "^2.1.0",
- "dezalgo": "~1.0.3",
- "editor": "~1.0.0",
- "figgy-pudding": "^3.4.1",
- "find-npm-prefix": "^1.0.2",
- "fs-vacuum": "~1.2.10",
- "fs-write-stream-atomic": "~1.0.10",
- "gentle-fs": "^2.0.1",
- "glob": "~7.1.2",
- "graceful-fs": "~4.1.11",
- "has-unicode": "~2.0.1",
- "hosted-git-info": "^2.7.1",
- "iferr": "^1.0.2",
- "imurmurhash": "*",
- "inflight": "~1.0.6",
- "inherits": "~2.0.3",
- "ini": "^1.3.5",
- "init-package-json": "^1.10.3",
- "is-cidr": "^2.0.6",
- "json-parse-better-errors": "^1.0.2",
- "lazy-property": "~1.0.0",
- "libcipm": "^2.0.2",
- "libnpmhook": "^4.0.1",
- "libnpx": "^10.2.0",
- "lock-verify": "^2.0.2",
- "lockfile": "^1.0.4",
- "lodash._baseindexof": "*",
- "lodash._baseuniq": "~4.6.0",
- "lodash._bindcallback": "*",
- "lodash._cacheindexof": "*",
- "lodash._createcache": "*",
- "lodash._getnative": "*",
- "lodash.clonedeep": "~4.5.0",
- "lodash.restparam": "*",
- "lodash.union": "~4.6.0",
- "lodash.uniq": "~4.5.0",
- "lodash.without": "~4.4.0",
- "lru-cache": "^4.1.3",
- "meant": "~1.0.1",
- "mississippi": "^3.0.0",
- "mkdirp": "~0.5.1",
- "move-concurrently": "^1.0.1",
- "node-gyp": "^3.8.0",
- "nopt": "~4.0.1",
- "normalize-package-data": "~2.4.0",
- "npm-audit-report": "^1.3.1",
- "npm-cache-filename": "~1.0.2",
- "npm-install-checks": "~3.0.0",
- "npm-lifecycle": "^2.1.0",
- "npm-package-arg": "^6.1.0",
- "npm-packlist": "^1.1.11",
- "npm-pick-manifest": "^2.1.0",
- "npm-profile": "^3.0.2",
- "npm-registry-client": "^8.6.0",
- "npm-registry-fetch": "^1.1.0",
- "npm-user-validate": "~1.0.0",
- "npmlog": "~4.1.2",
- "once": "~1.4.0",
- "opener": "^1.5.0",
- "osenv": "^0.1.5",
- "pacote": "^8.1.6",
- "path-is-inside": "~1.0.2",
- "promise-inflight": "~1.0.1",
- "qrcode-terminal": "^0.12.0",
- "query-string": "^6.1.0",
- "qw": "~1.0.1",
- "read": "~1.0.7",
- "read-cmd-shim": "~1.0.1",
- "read-installed": "~4.0.3",
- "read-package-json": "^2.0.13",
- "read-package-tree": "^5.2.1",
- "readable-stream": "^2.3.6",
- "readdir-scoped-modules": "*",
- "request": "^2.88.0",
- "retry": "^0.12.0",
- "rimraf": "~2.6.2",
- "safe-buffer": "^5.1.2",
- "semver": "^5.5.0",
- "sha": "~2.0.1",
- "slide": "~1.1.6",
- "sorted-object": "~2.0.1",
- "sorted-union-stream": "~2.1.3",
- "ssri": "^6.0.0",
- "stringify-package": "^1.0.0",
- "tar": "^4.4.6",
- "text-table": "~0.2.0",
- "tiny-relative-date": "^1.3.0",
- "uid-number": "0.0.6",
- "umask": "~1.1.0",
- "unique-filename": "~1.1.0",
- "unpipe": "~1.0.0",
- "update-notifier": "^2.5.0",
- "uuid": "^3.3.2",
- "validate-npm-package-license": "^3.0.4",
- "validate-npm-package-name": "~3.0.0",
- "which": "^1.3.1",
- "worker-farm": "^1.6.0",
- "write-file-atomic": "^2.3.0"
- },
- "dependencies": {
- "JSONStream": {
- "version": "1.3.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- }
- },
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true
- },
- "agent-base": {
- "version": "4.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- },
- "agentkeepalive": {
- "version": "3.4.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "humanize-ms": "^1.2.1"
- }
- },
- "ajv": {
- "version": "5.5.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
- "ansi-align": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^2.0.0"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "ansicolors": {
- "version": "0.3.2",
- "bundled": true,
- "dev": true
- },
- "ansistyles": {
- "version": "0.1.3",
- "bundled": true,
- "dev": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true
- },
- "archy": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "asap": {
- "version": "2.0.6",
- "bundled": true,
- "dev": true
- },
- "asn1": {
- "version": "0.2.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "bundled": true,
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "bundled": true,
- "dev": true
- },
- "aws4": {
- "version": "1.8.0",
- "bundled": true,
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "bin-links": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "bluebird": "^3.5.0",
- "cmd-shim": "^2.0.2",
- "gentle-fs": "^2.0.0",
- "graceful-fs": "^4.1.11",
- "write-file-atomic": "^2.3.0"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "~2.0.0"
- }
- },
- "bluebird": {
- "version": "3.5.1",
- "bundled": true,
- "dev": true
- },
- "boxen": {
- "version": "1.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "buffer-from": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "builtin-modules": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true
- },
- "builtins": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true
- },
- "byline": {
- "version": "5.0.0",
- "bundled": true,
- "dev": true
- },
- "byte-size": {
- "version": "4.0.3",
- "bundled": true,
- "dev": true
- },
- "cacache": {
- "version": "11.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "figgy-pudding": "^3.1.0",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.3",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.2",
- "ssri": "^6.0.0",
- "unique-filename": "^1.1.0",
- "y18n": "^4.0.0"
- }
- },
- "call-limit": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "camelcase": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true
- },
- "capture-stack-trace": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "bundled": true,
- "dev": true
- },
- "chalk": {
- "version": "2.4.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "ci-info": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true
- },
- "cidr-regex": {
- "version": "2.0.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "ip-regex": "^2.1.0"
- }
- },
- "cli-boxes": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "cli-columns": {
- "version": "3.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^2.0.0",
- "strip-ansi": "^3.0.1"
- }
- },
- "cli-table3": {
- "version": "0.5.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "colors": "^1.1.2",
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
- }
- },
- "cliui": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "clone": {
- "version": "1.0.4",
- "bundled": true,
- "dev": true
- },
- "cmd-shim": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "~0.5.0"
- }
- },
- "co": {
- "version": "4.6.0",
- "bundled": true,
- "dev": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "color-convert": {
- "version": "1.9.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-name": "^1.1.1"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true
- },
- "colors": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "columnify": {
- "version": "1.5.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "strip-ansi": "^3.0.0",
- "wcwidth": "^1.0.0"
- }
- },
- "combined-stream": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "config-chain": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "configstore": {
- "version": "3.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "dot-prop": "^4.1.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- },
- "dependencies": {
- "iferr": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true
- }
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "create-error-class": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "capture-stack-trace": "^1.0.0"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "crypto-random-string": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "cyclist": {
- "version": "0.2.2",
- "bundled": true,
- "dev": true
- },
- "dashdash": {
- "version": "1.14.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- }
- }
- },
- "debuglog": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "decamelize": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "bundled": true,
- "dev": true
- },
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true
- },
- "defaults": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "clone": "^1.0.2"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "detect-indent": {
- "version": "5.0.0",
- "bundled": true,
- "dev": true
- },
- "detect-newline": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true
- },
- "dezalgo": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "dot-prop": {
- "version": "4.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
- "dotenv": {
- "version": "5.0.1",
- "bundled": true,
- "dev": true
- },
- "duplexer3": {
- "version": "0.1.4",
- "bundled": true,
- "dev": true
- },
- "duplexify": {
- "version": "3.6.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "editor": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "encoding": {
- "version": "0.1.12",
- "bundled": true,
- "dev": true,
- "requires": {
- "iconv-lite": "~0.4.13"
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "err-code": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true
- },
- "errno": {
- "version": "0.1.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "es6-promise": {
- "version": "4.2.4",
- "bundled": true,
- "dev": true
- },
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "es6-promise": "^4.0.3"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true
- },
- "execa": {
- "version": "0.7.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "extend": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- },
- "extsprintf": {
- "version": "1.3.0",
- "bundled": true,
- "dev": true
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "figgy-pudding": {
- "version": "3.4.1",
- "bundled": true,
- "dev": true
- },
- "find-npm-prefix": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "find-up": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "flush-write-stream": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true
- },
- "form-data": {
- "version": "2.3.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "from2": {
- "version": "2.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs-vacuum": {
- "version": "1.2.10",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "path-is-inside": "^1.0.1",
- "rimraf": "^2.5.2"
- }
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- },
- "dependencies": {
- "iferr": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "fstream": {
- "version": "1.0.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "genfun": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true
- },
- "gentle-fs": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "aproba": "^1.1.2",
- "fs-vacuum": "^1.2.10",
- "graceful-fs": "^4.1.11",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "path-is-inside": "^1.0.2",
- "read-cmd-shim": "^1.0.1",
- "slide": "^1.1.6"
- },
- "dependencies": {
- "iferr": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true
- }
- }
- },
- "get-caller-file": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "get-stream": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "getpass": {
- "version": "0.1.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "global-dirs": {
- "version": "0.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ini": "^1.3.4"
- }
- },
- "got": {
- "version": "6.7.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "bundled": true,
- "dev": true
- },
- "har-schema": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "har-validator": {
- "version": "5.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ajv": "^5.3.0",
- "har-schema": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true
- },
- "hosted-git-info": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true
- },
- "http-cache-semantics": {
- "version": "3.8.1",
- "bundled": true,
- "dev": true
- },
- "http-proxy-agent": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "agent-base": "4",
- "debug": "3.1.0"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "https-proxy-agent": {
- "version": "2.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "agent-base": "^4.1.0",
- "debug": "^3.1.0"
- }
- },
- "humanize-ms": {
- "version": "1.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ms": "^2.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.23",
- "bundled": true,
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "iferr": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "import-lazy": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "bundled": true,
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true
- },
- "init-package-json": {
- "version": "1.10.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "glob": "^7.1.1",
- "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
- "promzard": "^0.3.0",
- "read": "~1.0.1",
- "read-package-json": "1 || 2",
- "semver": "2.x || 3.x || 4 || 5",
- "validate-npm-package-license": "^3.0.1",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "ip": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true
- },
- "ip-regex": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true
- },
- "is-builtin-module": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "builtin-modules": "^1.0.0"
- }
- },
- "is-ci": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ci-info": "^1.0.0"
- }
- },
- "is-cidr": {
- "version": "2.0.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "cidr-regex": "^2.0.8"
- }
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- }
- },
- "is-npm": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "is-obj": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "is-path-inside": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
- "is-redirect": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "is-retry-allowed": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "bundled": true,
- "dev": true
- },
- "jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "bundled": true,
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "bundled": true,
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "bundled": true,
- "dev": true
- },
- "jsonparse": {
- "version": "1.3.1",
- "bundled": true,
- "dev": true
- },
- "jsprim": {
- "version": "1.4.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "latest-version": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "package-json": "^4.0.0"
- }
- },
- "lazy-property": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "lcid": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "libcipm": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "graceful-fs": "^4.1.11",
- "lock-verify": "^2.0.2",
- "mkdirp": "^0.5.1",
- "npm-lifecycle": "^2.0.3",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "pacote": "^8.1.6",
- "protoduck": "^5.0.0",
- "read-package-json": "^2.0.13",
- "rimraf": "^2.6.2",
- "worker-farm": "^1.6.0"
- }
- },
- "libnpmhook": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.1.0",
- "npm-registry-fetch": "^3.0.0"
- },
- "dependencies": {
- "npm-registry-fetch": {
- "version": "3.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.1.0",
- "lru-cache": "^4.1.2",
- "make-fetch-happen": "^4.0.0",
- "npm-package-arg": "^6.0.0"
- }
- }
- }
- },
- "libnpx": {
- "version": "10.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "dotenv": "^5.0.1",
- "npm-package-arg": "^6.0.0",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.0",
- "update-notifier": "^2.3.0",
- "which": "^1.3.0",
- "y18n": "^4.0.0",
- "yargs": "^11.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lock-verify": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "npm-package-arg": "^5.1.2 || 6",
- "semver": "^5.4.1"
- }
- },
- "lockfile": {
- "version": "1.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "signal-exit": "^3.0.2"
- }
- },
- "lodash._baseindexof": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true
- },
- "lodash._baseuniq": {
- "version": "4.6.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "lodash._createset": "~4.0.0",
- "lodash._root": "~3.0.0"
- }
- },
- "lodash._bindcallback": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true
- },
- "lodash._cacheindexof": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- },
- "lodash._createcache": {
- "version": "3.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "lodash._getnative": "^3.0.0"
- }
- },
- "lodash._createset": {
- "version": "4.0.3",
- "bundled": true,
- "dev": true
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "bundled": true,
- "dev": true
- },
- "lodash._root": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "bundled": true,
- "dev": true
- },
- "lodash.restparam": {
- "version": "3.6.1",
- "bundled": true,
- "dev": true
- },
- "lodash.union": {
- "version": "4.6.0",
- "bundled": true,
- "dev": true
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "bundled": true,
- "dev": true
- },
- "lodash.without": {
- "version": "4.4.0",
- "bundled": true,
- "dev": true
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "lru-cache": {
- "version": "4.1.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "make-dir": {
- "version": "1.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "make-fetch-happen": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "agentkeepalive": "^3.4.1",
- "cacache": "^11.0.1",
- "http-cache-semantics": "^3.8.1",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.1",
- "lru-cache": "^4.1.2",
- "mississippi": "^3.0.0",
- "node-fetch-npm": "^2.0.2",
- "promise-retry": "^1.1.1",
- "socks-proxy-agent": "^4.0.0",
- "ssri": "^6.0.0"
- }
- },
- "meant": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "mem": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "mime-db": {
- "version": "1.35.0",
- "bundled": true,
- "dev": true
- },
- "mime-types": {
- "version": "2.1.19",
- "bundled": true,
- "dev": true,
- "requires": {
- "mime-db": "~1.35.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true
- },
- "minipass": {
- "version": "2.3.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- }
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mississippi": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "move-concurrently": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- }
- },
- "ms": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "bundled": true,
- "dev": true
- },
- "node-fetch-npm": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "encoding": "^0.1.11",
- "json-parse-better-errors": "^1.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "node-gyp": {
- "version": "3.8.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
- },
- "dependencies": {
- "nopt": {
- "version": "3.0.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "semver": {
- "version": "5.3.0",
- "bundled": true,
- "dev": true
- },
- "tar": {
- "version": "2.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "block-stream": "*",
- "fstream": "^1.0.2",
- "inherits": "2"
- }
- }
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "normalize-package-data": {
- "version": "2.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "npm-audit-report": {
- "version": "1.3.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "cli-table3": "^0.5.0",
- "console-control-strings": "^1.1.0"
- }
- },
- "npm-bundled": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true
- },
- "npm-cache-filename": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "npm-install-checks": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "semver": "^2.3.0 || 3.x || 4 || 5"
- }
- },
- "npm-lifecycle": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "byline": "^5.0.0",
- "graceful-fs": "^4.1.11",
- "node-gyp": "^3.8.0",
- "resolve-from": "^4.0.0",
- "slide": "^1.1.6",
- "uid-number": "0.0.6",
- "umask": "^1.1.0",
- "which": "^1.3.1"
- }
- },
- "npm-logical-tree": {
- "version": "1.2.1",
- "bundled": true,
- "dev": true
- },
- "npm-package-arg": {
- "version": "6.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.6.0",
- "osenv": "^0.1.5",
- "semver": "^5.5.0",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "npm-packlist": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npm-pick-manifest": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "npm-package-arg": "^6.0.0",
- "semver": "^5.4.1"
- }
- },
- "npm-profile": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "aproba": "^1.1.2 || 2",
- "make-fetch-happen": "^2.5.0 || 3 || 4"
- }
- },
- "npm-registry-client": {
- "version": "8.6.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.2",
- "graceful-fs": "^4.1.6",
- "normalize-package-data": "~1.0.1 || ^2.0.0",
- "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
- "npmlog": "2 || ^3.1.0 || ^4.0.0",
- "once": "^1.3.3",
- "request": "^2.74.0",
- "retry": "^0.10.0",
- "safe-buffer": "^5.1.1",
- "semver": "2 >=2.2.1 || 3.x || 4 || 5",
- "slide": "^1.1.3",
- "ssri": "^5.2.4"
- },
- "dependencies": {
- "retry": {
- "version": "0.10.1",
- "bundled": true,
- "dev": true
- },
- "ssri": {
- "version": "5.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- }
- }
- },
- "npm-registry-fetch": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "bluebird": "^3.5.1",
- "figgy-pudding": "^2.0.1",
- "lru-cache": "^4.1.2",
- "make-fetch-happen": "^3.0.0",
- "npm-package-arg": "^6.0.0",
- "safe-buffer": "^5.1.1"
- },
- "dependencies": {
- "cacache": {
- "version": "10.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.1",
- "mississippi": "^2.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.2",
- "ssri": "^5.2.4",
- "unique-filename": "^1.1.0",
- "y18n": "^4.0.0"
- },
- "dependencies": {
- "mississippi": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^2.0.1",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- }
- }
- },
- "figgy-pudding": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true
- },
- "make-fetch-happen": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "agentkeepalive": "^3.4.1",
- "cacache": "^10.0.4",
- "http-cache-semantics": "^3.8.1",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.0",
- "lru-cache": "^4.1.2",
- "mississippi": "^3.0.0",
- "node-fetch-npm": "^2.0.2",
- "promise-retry": "^1.1.1",
- "socks-proxy-agent": "^3.0.1",
- "ssri": "^5.2.4"
- }
- },
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "smart-buffer": {
- "version": "1.1.15",
- "bundled": true,
- "dev": true
- },
- "socks": {
- "version": "1.1.10",
- "bundled": true,
- "dev": true,
- "requires": {
- "ip": "^1.1.4",
- "smart-buffer": "^1.0.13"
- }
- },
- "socks-proxy-agent": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "agent-base": "^4.1.0",
- "socks": "^1.1.10"
- }
- },
- "ssri": {
- "version": "5.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- }
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "npm-user-validate": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "bundled": true,
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "opener": {
- "version": "1.5.0",
- "bundled": true,
- "dev": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "os-locale": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "p-limit": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "package-json": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
- }
- },
- "pacote": {
- "version": "8.1.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "bluebird": "^3.5.1",
- "cacache": "^11.0.2",
- "get-stream": "^3.0.0",
- "glob": "^7.1.2",
- "lru-cache": "^4.1.3",
- "make-fetch-happen": "^4.0.1",
- "minimatch": "^3.0.4",
- "minipass": "^2.3.3",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "normalize-package-data": "^2.4.0",
- "npm-package-arg": "^6.1.0",
- "npm-packlist": "^1.1.10",
- "npm-pick-manifest": "^2.1.0",
- "osenv": "^0.1.5",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^1.1.1",
- "protoduck": "^5.0.0",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.2",
- "semver": "^5.5.0",
- "ssri": "^6.0.0",
- "tar": "^4.4.3",
- "unique-filename": "^1.1.0",
- "which": "^1.3.0"
- }
- },
- "parallel-transform": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "cyclist": "~0.2.2",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true
- },
- "pify": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "bundled": true,
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "promise-inflight": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "promise-retry": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "err-code": "^1.0.0",
- "retry": "^0.10.0"
- },
- "dependencies": {
- "retry": {
- "version": "0.10.1",
- "bundled": true,
- "dev": true
- }
- }
- },
- "promzard": {
- "version": "0.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "read": "1"
- }
- },
- "proto-list": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true
- },
- "protoduck": {
- "version": "5.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "genfun": "^4.0.1"
- }
- },
- "prr": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "psl": {
- "version": "1.1.29",
- "bundled": true,
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "punycode": {
- "version": "1.4.1",
- "bundled": true,
- "dev": true
- },
- "qrcode-terminal": {
- "version": "0.12.0",
- "bundled": true,
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "bundled": true,
- "dev": true
- },
- "query-string": {
- "version": "6.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "decode-uri-component": "^0.2.0",
- "strict-uri-encode": "^2.0.0"
- }
- },
- "qw": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true
- }
- }
- },
- "read": {
- "version": "1.0.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "mute-stream": "~0.0.4"
- }
- },
- "read-cmd-shim": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2"
- }
- },
- "read-installed": {
- "version": "4.0.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "debuglog": "^1.0.1",
- "graceful-fs": "^4.1.2",
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "slide": "~1.1.3",
- "util-extend": "^1.0.1"
- }
- },
- "read-package-json": {
- "version": "2.0.13",
- "bundled": true,
- "dev": true,
- "requires": {
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.2",
- "json-parse-better-errors": "^1.0.1",
- "normalize-package-data": "^2.0.0",
- "slash": "^1.0.0"
- }
- },
- "read-package-tree": {
- "version": "5.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "debuglog": "^1.0.1",
- "dezalgo": "^1.0.0",
- "once": "^1.3.0",
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0"
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdir-scoped-modules": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "debuglog": "^1.0.1",
- "dezalgo": "^1.0.0",
- "graceful-fs": "^4.1.2",
- "once": "^1.3.0"
- }
- },
- "registry-auth-token": {
- "version": "3.3.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "registry-url": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "rc": "^1.0.1"
- }
- },
- "request": {
- "version": "2.88.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "retry": {
- "version": "0.12.0",
- "bundled": true,
- "dev": true
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "glob": "^7.0.5"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "aproba": "^1.1.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true,
- "dev": true
- },
- "semver-diff": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "semver": "^5.0.3"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "sha": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "readable-stream": "^2.0.2"
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- },
- "slash": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "slide": {
- "version": "1.1.6",
- "bundled": true,
- "dev": true
- },
- "smart-buffer": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true
- },
- "socks": {
- "version": "2.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ip": "^1.1.5",
- "smart-buffer": "^4.0.1"
- }
- },
- "socks-proxy-agent": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "agent-base": "~4.2.0",
- "socks": "~2.2.0"
- }
- },
- "sorted-object": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true
- },
- "sorted-union-stream": {
- "version": "2.1.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "from2": "^1.3.0",
- "stream-iterate": "^1.1.0"
- },
- "dependencies": {
- "from2": {
- "version": "1.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "~1.1.10"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "bundled": true,
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "bundled": true,
- "dev": true
- }
- }
- },
- "spdx-correct": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "sshpk": {
- "version": "1.14.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "ssri": {
- "version": "6.0.0",
- "bundled": true,
- "dev": true
- },
- "stream-each": {
- "version": "1.2.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "stream-iterate": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "stream-shift": "^1.0.0"
- }
- },
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "strict-uri-encode": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "stringify-package": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-eof": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true
- },
- "supports-color": {
- "version": "5.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tar": {
- "version": "4.4.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.3.3",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.2"
- },
- "dependencies": {
- "yallist": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- }
- }
- },
- "term-size": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "execa": "^0.7.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "bundled": true,
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "bundled": true,
- "dev": true
- },
- "through2": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true
- },
- "tiny-relative-date": {
- "version": "1.3.0",
- "bundled": true,
- "dev": true
- },
- "tough-cookie": {
- "version": "2.4.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "typedarray": {
- "version": "0.0.6",
- "bundled": true,
- "dev": true
- },
- "uid-number": {
- "version": "0.0.6",
- "bundled": true,
- "dev": true
- },
- "umask": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "unique-filename": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
- "unique-string": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "crypto-random-string": "^1.0.0"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "unzip-response": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true
- },
- "update-notifier": {
- "version": "2.5.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "prepend-http": "^1.0.1"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "util-extend": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true
- },
- "uuid": {
- "version": "3.3.2",
- "bundled": true,
- "dev": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "validate-npm-package-name": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "builtins": "^1.0.3"
- }
- },
- "verror": {
- "version": "1.10.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "wcwidth": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "defaults": "^1.0.3"
- }
- },
- "which": {
- "version": "1.3.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^1.0.2"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "widest-line": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^2.1.1"
- }
- },
- "worker-farm": {
- "version": "1.6.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "write-file-atomic": {
- "version": "2.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "xtend": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true
- },
- "y18n": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true
- },
- "yargs": {
- "version": "11.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^9.0.2"
- },
- "dependencies": {
- "y18n": {
- "version": "3.2.1",
- "bundled": true,
- "dev": true
- }
- }
- },
- "yargs-parser": {
- "version": "9.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0"
- }
- }
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "dev": true,
- "requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
- "dev": true
- }
- }
- },
- "os-locale": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz",
- "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==",
- "dev": true,
- "requires": {
- "execa": "^0.10.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- },
- "dependencies": {
- "execa": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
- "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- }
- }
- },
- "os-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/os-name/-/os-name-2.0.1.tgz",
- "integrity": "sha1-uaOGNhwXrjohc27wWZQFyajF3F4=",
- "dev": true,
- "requires": {
- "macos-release": "^1.0.0",
- "win-release": "^1.0.0"
- }
- },
- "p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
- "dev": true
- },
- "p-filter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-1.0.0.tgz",
- "integrity": "sha1-Yp0xcVAgnI/VCLoTdxPvS7kg6ds=",
- "dev": true,
- "requires": {
- "p-map": "^1.0.0"
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
- },
- "p-is-promise": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
- "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
- "dev": true
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- },
- "dependencies": {
- "p-limit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
- "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
- "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
- "dev": true
- }
- }
- },
- "p-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
- "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
- "dev": true
- },
- "p-reduce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
- "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
- "dev": true
- },
- "p-retry": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-2.0.0.tgz",
- "integrity": "sha512-ZbCuzAmiwJ45q4evp/IG9D+5MUllGSUeCWwPt3j/tdYSi1KPkSD+46uqmAA1LhccDhOXv8kYZKNb8x78VflzfA==",
- "dev": true,
- "requires": {
- "retry": "^0.12.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "parse-github-url": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
- "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
- "dev": true
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "parse-url": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz",
- "integrity": "sha1-V8FUKKuKiSsfQ4aWRccR0OFEtVQ=",
- "dev": true,
- "requires": {
- "is-ssh": "^1.3.0",
- "protocols": "^1.4.0"
- }
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "pkg-conf": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
- "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "load-json-file": "^4.0.0"
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
- "dev": true
- },
- "protocols": {
- "version": "1.4.6",
- "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.6.tgz",
- "integrity": "sha1-+LsmPqG1/Xp2BNJri+Ob13Z4v4o=",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
- "dev": true
- },
- "quick-lru": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
- "dev": true
- },
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
- "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0",
- "read-pkg": "^3.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
- "dev": true,
- "requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
- }
- },
- "redeyed": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
- "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=",
- "dev": true,
- "requires": {
- "esprima": "~4.0.0"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "registry-auth-token": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
- "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
- "dev": true,
- "requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "semantic-release": {
- "version": "15.9.16",
- "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-15.9.16.tgz",
- "integrity": "sha512-5RWqMFwDBXzIaNGUdnJxI4aCd4DtKtdc+5ZNjNWXABEmkimZVuuzZhMaTVNhHYfSuVUqWG9GuATEKhjlVoTzfQ==",
- "dev": true,
- "requires": {
- "@semantic-release/commit-analyzer": "^6.0.0",
- "@semantic-release/error": "^2.2.0",
- "@semantic-release/github": "^5.0.0",
- "@semantic-release/npm": "^5.0.1",
- "@semantic-release/release-notes-generator": "^7.0.0",
- "aggregate-error": "^1.0.0",
- "cosmiconfig": "^5.0.1",
- "debug": "^4.0.0",
- "env-ci": "^3.0.0",
- "execa": "^1.0.0",
- "figures": "^2.0.0",
- "find-versions": "^2.0.0",
- "get-stream": "^4.0.0",
- "git-log-parser": "^1.2.0",
- "git-url-parse": "^10.0.1",
- "hook-std": "^1.1.0",
- "hosted-git-info": "^2.7.1",
- "lodash": "^4.17.4",
- "marked": "^0.5.0",
- "marked-terminal": "^3.0.0",
- "p-locate": "^3.0.0",
- "p-reduce": "^1.0.0",
- "read-pkg-up": "^4.0.0",
- "resolve-from": "^4.0.0",
- "semver": "^5.4.1",
- "signale": "^1.2.1",
- "yargs": "^12.0.0"
- }
- },
- "semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
- "dev": true
- },
- "semver-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
- "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=",
- "dev": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
- },
- "signale": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/signale/-/signale-1.3.0.tgz",
- "integrity": "sha512-TyFhsQ9wZDYDfsPqWMyjCxsDoMwfpsT0130Mce7wDiVCSDdtWSg83dOqoj8aGpGCs3n1YPcam6sT1OFPuGT/OQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.3.2",
- "figures": "^2.0.0",
- "pkg-conf": "^2.1.0"
- }
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
- "dev": true,
- "requires": {
- "atob": "^2.1.1",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "spawn-error-forwarder": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz",
- "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
- "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
- "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz",
- "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==",
- "dev": true
- },
- "split": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
- "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
- "dev": true,
- "requires": {
- "through": "2"
- }
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "split2": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
- "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
- "dev": true,
- "requires": {
- "through2": "^2.0.2"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "stream-combiner2": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
- "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
- "dev": true,
- "requires": {
- "duplexer2": "~0.1.0",
- "readable-stream": "^2.0.2"
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
- },
- "strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
- "dev": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "text-extensions": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.8.0.tgz",
- "integrity": "sha512-mVzjRxuWnDKs/qH1rbOJEVHLlSX9kty9lpi7lMvLgU9S74mQ8/Ozg9UPcKxShh0qG2NZ+NyPOPpcZU4C1Eld9A==",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "traverse": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
- "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
- "dev": true
- },
- "trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
- "dev": true
- },
- "trim-off-newlines": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
- "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
- "dev": true
- },
- "uglify-js": {
- "version": "3.4.9",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
- "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
- "dev": true,
- "optional": true,
- "requires": {
- "commander": "~2.17.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true
- }
- }
- },
- "union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^0.4.3"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "set-value": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.1",
- "to-object-path": "^0.3.0"
- }
- }
- }
- },
- "universal-user-agent": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.0.1.tgz",
- "integrity": "sha512-vz+heWVydO0iyYAa65VHD7WZkYzhl7BeNVy4i54p4TF8OMiLSXdbuQe4hm+fmWAsL+rVibaQHXfhvkw3c1Ws2w==",
- "dev": true,
- "requires": {
- "os-name": "^2.0.1"
- }
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- }
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url-join": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz",
- "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=",
- "dev": true
- },
- "url-template": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
- "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=",
- "dev": true
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "win-release": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz",
- "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=",
- "dev": true,
- "requires": {
- "semver": "^5.0.1"
- }
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "xregexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
- "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==",
- "dev": true
- },
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
- "dev": true
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "dev": true
- },
- "yargs": {
- "version": "12.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz",
- "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==",
- "dev": true,
- "requires": {
- "cliui": "^4.0.0",
- "decamelize": "^2.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^10.1.0"
- },
- "dependencies": {
- "decamelize": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
- "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
- "dev": true,
- "requires": {
- "xregexp": "4.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
- "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0"
- }
- }
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/package.json b/vendor/felixfbecker/language-server-protocol/package.json
deleted file mode 100644
index 314301e0..00000000
--- a/vendor/felixfbecker/language-server-protocol/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "private": true,
- "repository": {
- "type": "git",
- "url": "https://github.com/felixfbecker/php-language-server-protocol"
- },
- "release": {
- "verifyConditions": "@semantic-release/github",
- "prepare": [],
- "publish": "@semantic-release/github"
- },
- "devDependencies": {
- "semantic-release": "^15.9.16"
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/psalm-baseline.xml b/vendor/felixfbecker/language-server-protocol/psalm-baseline.xml
deleted file mode 100644
index ca496853..00000000
--- a/vendor/felixfbecker/language-server-protocol/psalm-baseline.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-
-
- $range
-
-
-
-
- $triggerKind
-
-
-
-
- $label
-
-
-
-
- $text
-
-
-
-
- $message
-
-
-
-
- $range
-
-
-
-
- $firstTriggerCharacter
-
-
-
-
- $insertSpaces
- $tabSize
-
-
-
-
- $contents
-
-
-
-
- $range
- $uri
-
-
-
-
- $language
- $value
-
-
-
-
- $kind
- $value
-
-
-
-
- $title
-
-
-
-
- $name
-
-
-
-
- $character
- $line
-
-
-
-
- $end
- $start
-
-
-
-
- $includeDeclaration
-
-
-
-
- $reference
- $symbol
-
-
-
-
- $fqsen
-
-
-
-
- $kind
- $location
- $name
-
-
-
-
- $symbol
-
-
-
-
- $text
-
-
-
-
- $uri
-
-
-
-
- $languageId
- $text
- $uri
- $version
-
-
-
-
- $newText
- $range
-
-
-
-
- $version
-
-
-
diff --git a/vendor/felixfbecker/language-server-protocol/psalm.xml b/vendor/felixfbecker/language-server-protocol/psalm.xml
deleted file mode 100644
index 378f26fa..00000000
--- a/vendor/felixfbecker/language-server-protocol/psalm.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/vendor/felixfbecker/language-server-protocol/src/CallHierarchyClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/CallHierarchyClientCapabilities.php
deleted file mode 100644
index 4062ada7..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CallHierarchyClientCapabilities.php
+++ /dev/null
@@ -1,22 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ChangeAnnotation.php b/vendor/felixfbecker/language-server-protocol/src/ChangeAnnotation.php
deleted file mode 100644
index 39868e53..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ChangeAnnotation.php
+++ /dev/null
@@ -1,39 +0,0 @@
-label = $label;
- $this->needsConfirmation = $needsConfirmation;
- $this->description = $description;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/ClientCapabilities.php
deleted file mode 100644
index c706dce7..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ClientCapabilities.php
+++ /dev/null
@@ -1,97 +0,0 @@
-workspace = $workspace;
- $this->textDocument = $textDocument;
- $this->window = $window;
- $this->general = $general;
- $this->experimental = $experimental;
- $this->xfilesProvider = $xfilesProvider;
- $this->xcontentProvider = $xcontentProvider;
- $this->xcacheProvider = $xcacheProvider;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesGeneral.php b/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesGeneral.php
deleted file mode 100644
index 70463d07..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesGeneral.php
+++ /dev/null
@@ -1,33 +0,0 @@
-regularExpressions = $regularExpressions;
- $this->markdown = $markdown;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWindow.php b/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWindow.php
deleted file mode 100644
index 8d6551f5..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWindow.php
+++ /dev/null
@@ -1,47 +0,0 @@
-workDoneProgress = $workDoneProgress;
- $this->showMessage = $showMessage;
- $this->showDocument = $showDocument;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWorkspace.php b/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWorkspace.php
deleted file mode 100644
index 00e92475..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWorkspace.php
+++ /dev/null
@@ -1,99 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->didCreate = $didCreate;
- $this->willCreate = $willCreate;
- $this->didRename = $didRename;
- $this->willRename = $willRename;
- $this->didDelete = $didDelete;
- $this->willDelete = $willDelete;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ClientInfo.php b/vendor/felixfbecker/language-server-protocol/src/ClientInfo.php
deleted file mode 100644
index 5903a0c8..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ClientInfo.php
+++ /dev/null
@@ -1,29 +0,0 @@
-name = $name;
- $this->version = $version;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeAction.php b/vendor/felixfbecker/language-server-protocol/src/CodeAction.php
deleted file mode 100644
index 90133465..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeAction.php
+++ /dev/null
@@ -1,146 +0,0 @@
-title = $title;
- $this->kind = $kind;
- $this->diagnostics = $diagnostics;
- $this->isPreferred = $isPreferred;
- $this->disabled = $disabled;
- $this->edit = $edit;
- $this->command = $command;
- $this->data = $data;
- }
-
- /**
- * This is needed because VSCode Does not like nulls
- * meaning if a null is sent then this will not compute
- *
- * @return mixed
- */
- #[\ReturnTypeWillChange]
- public function jsonSerialize()
- {
- return array_filter(get_object_vars($this));
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilities.php
deleted file mode 100644
index 8abb115e..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilities.php
+++ /dev/null
@@ -1,95 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->codeActionLiteralSupport = $codeActionLiteralSupport;
- $this->isPreferredSupport = $isPreferredSupport;
- $this->disabledSupport = $disabledSupport;
- $this->dataSupport = $dataSupport;
- $this->resolveSupport = $resolveSupport;
- $this->honorsChangeAnnotations = $honorsChangeAnnotations;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupport.php b/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupport.php
deleted file mode 100644
index ea3583f3..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupport.php
+++ /dev/null
@@ -1,20 +0,0 @@
-codeActionKind = $codeActionKind;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupportcodeActionKind.php b/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupportcodeActionKind.php
deleted file mode 100644
index 3d510737..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupportcodeActionKind.php
+++ /dev/null
@@ -1,28 +0,0 @@
-valueSet = $valueSet;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesResolveSupport.php b/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesResolveSupport.php
deleted file mode 100644
index 89118ec1..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesResolveSupport.php
+++ /dev/null
@@ -1,21 +0,0 @@
-properties = $properties;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeActionContext.php b/vendor/felixfbecker/language-server-protocol/src/CodeActionContext.php
deleted file mode 100644
index 3766334a..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeActionContext.php
+++ /dev/null
@@ -1,51 +0,0 @@
-diagnostics = $diagnostics;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeActionDisabled.php b/vendor/felixfbecker/language-server-protocol/src/CodeActionDisabled.php
deleted file mode 100644
index a16d9642..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeActionDisabled.php
+++ /dev/null
@@ -1,21 +0,0 @@
-reason = $reason;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeActionKind.php b/vendor/felixfbecker/language-server-protocol/src/CodeActionKind.php
deleted file mode 100644
index b1329b16..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeActionKind.php
+++ /dev/null
@@ -1,87 +0,0 @@
-href = $href;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeLens.php b/vendor/felixfbecker/language-server-protocol/src/CodeLens.php
deleted file mode 100644
index 25998e3c..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeLens.php
+++ /dev/null
@@ -1,46 +0,0 @@
-range = $range;
- $this->command = $command;
- $this->data = $data;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeLensClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/CodeLensClientCapabilities.php
deleted file mode 100644
index 706733e5..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeLensClientCapabilities.php
+++ /dev/null
@@ -1,20 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeLensOptions.php b/vendor/felixfbecker/language-server-protocol/src/CodeLensOptions.php
deleted file mode 100644
index 7db0d4df..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeLensOptions.php
+++ /dev/null
@@ -1,21 +0,0 @@
-resolveProvider = $resolveProvider;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CodeLensWorkspaceClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/CodeLensWorkspaceClientCapabilities.php
deleted file mode 100644
index e97a8b1d..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CodeLensWorkspaceClientCapabilities.php
+++ /dev/null
@@ -1,25 +0,0 @@
-refreshSupport = $refreshSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/Command.php b/vendor/felixfbecker/language-server-protocol/src/Command.php
deleted file mode 100644
index 97e0f0cb..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/Command.php
+++ /dev/null
@@ -1,42 +0,0 @@
-title = $title;
- $this->command = $command;
- $this->arguments = $arguments;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilities.php
deleted file mode 100644
index 2f1ad4a6..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilities.php
+++ /dev/null
@@ -1,65 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->completionItem = $completionItem;
- $this->contextSupport = $contextSupport;
- $this->insertTextMode = $insertTextMode;
- $this->completionList = $completionList;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItem.php b/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItem.php
deleted file mode 100644
index d1c1eb7f..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItem.php
+++ /dev/null
@@ -1,140 +0,0 @@
-snippetSupport = $snippetSupport;
- $this->commitCharactersSupport = $commitCharactersSupport;
- $this->documentationFormat = $documentationFormat;
- $this->deprecatedSupport = $deprecatedSupport;
- $this->preselectSupport = $preselectSupport;
- $this->tagSupport = $tagSupport;
- $this->insertReplaceSupport = $insertReplaceSupport;
- $this->resolveSupport = $resolveSupport;
- $this->insertTextModeSupport = $insertTextModeSupport;
- $this->labelDetailsSupport = $labelDetailsSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemInsertTextModeSupport.php b/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemInsertTextModeSupport.php
deleted file mode 100644
index 68d4ead8..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemInsertTextModeSupport.php
+++ /dev/null
@@ -1,24 +0,0 @@
-valueSet = $valueSet;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemResolveSupport.php b/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemResolveSupport.php
deleted file mode 100644
index 9afadfcd..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemResolveSupport.php
+++ /dev/null
@@ -1,24 +0,0 @@
-properties = $properties;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemTagSupport.php b/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemTagSupport.php
deleted file mode 100644
index b80a4152..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemTagSupport.php
+++ /dev/null
@@ -1,24 +0,0 @@
-valueSet = $valueSet;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionList.php b/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionList.php
deleted file mode 100644
index 2a23ed93..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionList.php
+++ /dev/null
@@ -1,30 +0,0 @@
-itemDefaults = $itemDefaults;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionContext.php b/vendor/felixfbecker/language-server-protocol/src/CompletionContext.php
deleted file mode 100644
index 1c6d43fb..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionContext.php
+++ /dev/null
@@ -1,31 +0,0 @@
-triggerKind = $triggerKind;
- $this->triggerCharacter = $triggerCharacter;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionItem.php b/vendor/felixfbecker/language-server-protocol/src/CompletionItem.php
deleted file mode 100644
index ec8e4122..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionItem.php
+++ /dev/null
@@ -1,248 +0,0 @@
-` and a completion item with an `insertText` of
- * `console` is provided it will only insert `sole`. Therefore it is
- * recommended to use `textEdit` instead since it avoids additional client
- * side interpretation.
- *
- * @var string|null
- */
- public $insertText;
-
- /**
- * The format of the insert text. The format applies to both the
- * `insertText` property and the `newText` property of a provided
- * `textEdit`. If omitted defaults to `InsertTextFormat.PlainText`.
- *
- * Please note that the insertTextFormat doesn't apply to
- * `additionalTextEdits`.
- *
- * @var int|null
- * @see InsertTextFormat
- */
- public $insertTextFormat;
-
- /**
- * How whitespace and indentation is handled during completion
- * item insertion. If not provided the client's default value depends on
- * the `textDocument.completion.insertTextMode` client capability.
- *
- * @since 3.16.0
- * @since 3.17.0 - support for `textDocument.completion.insertTextMode`
- *
- * @var int|null
- * @see InsertTextMode
- */
- public $insertTextMode;
-
- /**
- * An edit which is applied to a document when selecting this completion.
- * When an edit is provided the value of `insertText` is ignored.
- *
- * *Note:* The range of the edit must be a single line range and it must
- * contain the position at which completion has been requested.
- *
- * Most editors support two different operations when accepting a completion
- * item. One is to insert a completion text and the other is to replace an
- * existing text with a completion text. Since this can usually not be
- * predetermined by a server it can report both ranges. Clients need to
- * signal support for `InsertReplaceEdit`s via the
- * `textDocument.completion.completionItem.insertReplaceSupport` client
- * capability property.
- *
- * *Note 1:* The text edit's range as well as both ranges from an insert
- * replace edit must be a [single line] and they must contain the position
- * at which completion has been requested.
- * *Note 2:* If an `InsertReplaceEdit` is returned the edit's insert range
- * must be a prefix of the edit's replace range, that means it must be
- * contained and starting at the same position.
- *
- * @since 3.16.0 additional type `InsertReplaceEdit`
- *
- * @var TextEdit|null
- */
- public $textEdit;
-
- /**
- * An optional array of additional text edits that are applied when
- * selecting this completion. Edits must not overlap (including the same
- * insert position) with the main edit nor with themselves.
- *
- * Additional text edits should be used to change text unrelated to the
- * current cursor position (for example adding an import statement at the
- * top of the file if the completion item will insert an unqualified type).
- *
- * @var TextEdit[]|null
- */
- public $additionalTextEdits;
-
- /**
- * An optional set of characters that when pressed while this completion is
- * active will accept it first and then type that character. *Note* that all
- * commit characters should have `length=1` and that superfluous characters
- * will be ignored.
- *
- * @var string[]|null
- */
- public $commitCharacters;
-
- /**
- * An optional command that is executed *after* inserting this completion. *Note* that
- * additional modifications to the current document should be described with the
- * additionalTextEdits-property.
- *
- * @var Command|null
- */
- public $command;
-
- /**
- * An data entry field that is preserved on a completion item between
- * a completion and a completion resolve request.
- *
- * @var mixed
- */
- public $data;
-
- /**
- * @param string $label
- * @param int|null $kind
- * @param string|null $detail
- * @param string|null $documentation
- * @param string|null $sortText
- * @param string|null $filterText
- * @param string|null $insertText
- * @param TextEdit|null $textEdit
- * @param TextEdit[]|null $additionalTextEdits
- * @param Command|null $command
- * @param mixed|null $data
- * @param int|null $insertTextFormat
- */
- public function __construct(
- string $label = null,
- int $kind = null,
- string $detail = null,
- string $documentation = null,
- string $sortText = null,
- string $filterText = null,
- string $insertText = null,
- TextEdit $textEdit = null,
- array $additionalTextEdits = null,
- Command $command = null,
- $data = null,
- int $insertTextFormat = null
- ) {
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->label = $label;
- $this->kind = $kind;
- $this->detail = $detail;
- $this->documentation = $documentation;
- $this->sortText = $sortText;
- $this->filterText = $filterText;
- $this->insertText = $insertText;
- $this->textEdit = $textEdit;
- $this->additionalTextEdits = $additionalTextEdits;
- $this->command = $command;
- $this->data = $data;
- $this->insertTextFormat = $insertTextFormat;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionItemKind.php b/vendor/felixfbecker/language-server-protocol/src/CompletionItemKind.php
deleted file mode 100644
index f2897f9b..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionItemKind.php
+++ /dev/null
@@ -1,71 +0,0 @@
-detail = $detail;
- $this->description = $description;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionItemTag.php b/vendor/felixfbecker/language-server-protocol/src/CompletionItemTag.php
deleted file mode 100644
index e88af50c..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionItemTag.php
+++ /dev/null
@@ -1,11 +0,0 @@
-items = $items;
- $this->isIncomplete = $isIncomplete;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionOptions.php b/vendor/felixfbecker/language-server-protocol/src/CompletionOptions.php
deleted file mode 100644
index f0c60f96..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionOptions.php
+++ /dev/null
@@ -1,33 +0,0 @@
-resolveProvider = $resolveProvider;
- $this->triggerCharacters = $triggerCharacters;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/CompletionTriggerKind.php b/vendor/felixfbecker/language-server-protocol/src/CompletionTriggerKind.php
deleted file mode 100644
index f84c48b5..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/CompletionTriggerKind.php
+++ /dev/null
@@ -1,16 +0,0 @@
-range = $range;
- $this->rangeLength = $rangeLength;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->text = $text;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DeclarationClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DeclarationClientCapabilities.php
deleted file mode 100644
index bab0442e..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DeclarationClientCapabilities.php
+++ /dev/null
@@ -1,31 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->linkSupport = $linkSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DefinitionClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DefinitionClientCapabilities.php
deleted file mode 100644
index bc01efda..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DefinitionClientCapabilities.php
+++ /dev/null
@@ -1,29 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->linkSupport = $linkSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DependencyReference.php b/vendor/felixfbecker/language-server-protocol/src/DependencyReference.php
deleted file mode 100644
index afb6d30d..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DependencyReference.php
+++ /dev/null
@@ -1,27 +0,0 @@
-attributes = $attributes ?? new \stdClass;
- $this->hints = $hints;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/Diagnostic.php b/vendor/felixfbecker/language-server-protocol/src/Diagnostic.php
deleted file mode 100644
index 657bf0fe..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/Diagnostic.php
+++ /dev/null
@@ -1,121 +0,0 @@
-message = $message;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->range = $range;
- $this->code = $code;
- $this->severity = $severity;
- $this->source = $source;
- $this->codeDescription = $codeDescription;
- $this->tags = $tags;
- $this->relatedInformation = $relatedInformation;
- $this->data = $data;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DiagnosticRelatedInformation.php b/vendor/felixfbecker/language-server-protocol/src/DiagnosticRelatedInformation.php
deleted file mode 100644
index 78e2b9b4..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DiagnosticRelatedInformation.php
+++ /dev/null
@@ -1,31 +0,0 @@
-location = $location;
- $this->message = $message;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DiagnosticSeverity.php b/vendor/felixfbecker/language-server-protocol/src/DiagnosticSeverity.php
deleted file mode 100644
index d11ed95d..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DiagnosticSeverity.php
+++ /dev/null
@@ -1,26 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DidChangeWatchedFilesClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DidChangeWatchedFilesClientCapabilities.php
deleted file mode 100644
index e82b1841..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DidChangeWatchedFilesClientCapabilities.php
+++ /dev/null
@@ -1,21 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentColorClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DocumentColorClientCapabilities.php
deleted file mode 100644
index 93f55150..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentColorClientCapabilities.php
+++ /dev/null
@@ -1,20 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentFormattingClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DocumentFormattingClientCapabilities.php
deleted file mode 100644
index 97261175..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentFormattingClientCapabilities.php
+++ /dev/null
@@ -1,20 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentHighlight.php b/vendor/felixfbecker/language-server-protocol/src/DocumentHighlight.php
deleted file mode 100644
index 4c329fce..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentHighlight.php
+++ /dev/null
@@ -1,32 +0,0 @@
-range = $range;
- $this->kind = $kind;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentHighlightClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DocumentHighlightClientCapabilities.php
deleted file mode 100644
index f7fe47b0..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentHighlightClientCapabilities.php
+++ /dev/null
@@ -1,18 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentHighlightKind.php b/vendor/felixfbecker/language-server-protocol/src/DocumentHighlightKind.php
deleted file mode 100644
index 21c5001e..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentHighlightKind.php
+++ /dev/null
@@ -1,24 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->tooltipSupport = $tooltipSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingClientCapabilities.php
deleted file mode 100644
index 0101fc13..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingClientCapabilities.php
+++ /dev/null
@@ -1,20 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingOptions.php b/vendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingOptions.php
deleted file mode 100644
index 149ea36c..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingOptions.php
+++ /dev/null
@@ -1,33 +0,0 @@
-firstTriggerCharacter = $firstTriggerCharacter;
- $this->moreTriggerCharacter = $moreTriggerCharacter;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentRangeFormattingClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DocumentRangeFormattingClientCapabilities.php
deleted file mode 100644
index 5edca75b..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentRangeFormattingClientCapabilities.php
+++ /dev/null
@@ -1,20 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilities.php
deleted file mode 100644
index eaa10a4f..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilities.php
+++ /dev/null
@@ -1,64 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->symbolKind = $symbolKind;
- $this->hierarchicalDocumentSymbolSupport = $hierarchicalDocumentSymbolSupport;
- $this->tagSupport = $tagSupport;
- $this->labelSupport = $labelSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesSymbolKind.php b/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesSymbolKind.php
deleted file mode 100644
index 536e5e9c..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesSymbolKind.php
+++ /dev/null
@@ -1,37 +0,0 @@
-valueSet = $valueSet;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesTagSupport.php b/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesTagSupport.php
deleted file mode 100644
index f423a1a6..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesTagSupport.php
+++ /dev/null
@@ -1,32 +0,0 @@
-valueSet = $valueSet;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ErrorCode.php b/vendor/felixfbecker/language-server-protocol/src/ErrorCode.php
deleted file mode 100644
index ffbc0755..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ErrorCode.php
+++ /dev/null
@@ -1,17 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ExecuteCommandOptions.php b/vendor/felixfbecker/language-server-protocol/src/ExecuteCommandOptions.php
deleted file mode 100644
index 0f77b607..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ExecuteCommandOptions.php
+++ /dev/null
@@ -1,23 +0,0 @@
-commands = $commands;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/FailureHandlingKind.php b/vendor/felixfbecker/language-server-protocol/src/FailureHandlingKind.php
deleted file mode 100644
index c0c48db2..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/FailureHandlingKind.php
+++ /dev/null
@@ -1,36 +0,0 @@
-uri = $uri;
- $this->type = $type;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/FoldingRangeClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/FoldingRangeClientCapabilities.php
deleted file mode 100644
index 4efe925b..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/FoldingRangeClientCapabilities.php
+++ /dev/null
@@ -1,42 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->rangeLimit = $rangeLimit;
- $this->lineFoldingOnly = $lineFoldingOnly;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/FormattingOptions.php b/vendor/felixfbecker/language-server-protocol/src/FormattingOptions.php
deleted file mode 100644
index 1d9c1327..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/FormattingOptions.php
+++ /dev/null
@@ -1,33 +0,0 @@
-tabSize = $tabSize;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->insertSpaces = $insertSpaces;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/Hover.php b/vendor/felixfbecker/language-server-protocol/src/Hover.php
deleted file mode 100644
index 8c39c97d..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/Hover.php
+++ /dev/null
@@ -1,34 +0,0 @@
-contents = $contents;
- $this->range = $range;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/HoverClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/HoverClientCapabilities.php
deleted file mode 100644
index 2ba234cb..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/HoverClientCapabilities.php
+++ /dev/null
@@ -1,36 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->contentFormat = $contentFormat;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ImplementationClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/ImplementationClientCapabilities.php
deleted file mode 100644
index 9caef5dd..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ImplementationClientCapabilities.php
+++ /dev/null
@@ -1,32 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->linkSupport = $linkSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/InitializeResult.php b/vendor/felixfbecker/language-server-protocol/src/InitializeResult.php
deleted file mode 100644
index 59333eae..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/InitializeResult.php
+++ /dev/null
@@ -1,29 +0,0 @@
-capabilities = $capabilities;
- $this->serverInfo = $serverInfo;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/InitializeResultServerInfo.php b/vendor/felixfbecker/language-server-protocol/src/InitializeResultServerInfo.php
deleted file mode 100644
index 040b5839..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/InitializeResultServerInfo.php
+++ /dev/null
@@ -1,26 +0,0 @@
-name = $name;
- $this->version = $version;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/InsertTextFormat.php b/vendor/felixfbecker/language-server-protocol/src/InsertTextFormat.php
deleted file mode 100644
index 459904f5..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/InsertTextFormat.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<3tabs>foo. Accepting a
- * multi line completion item is indented using 2 tabs and all
- * following lines inserted will be indented using 2 tabs as well.
- */
- const ADJUST_INDENTATION = 2;
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/LinkedEditingRangeClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/LinkedEditingRangeClientCapabilities.php
deleted file mode 100644
index 05c51086..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/LinkedEditingRangeClientCapabilities.php
+++ /dev/null
@@ -1,23 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/Location.php b/vendor/felixfbecker/language-server-protocol/src/Location.php
deleted file mode 100644
index 7429620d..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/Location.php
+++ /dev/null
@@ -1,27 +0,0 @@
-uri = $uri;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->range = $range;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/LogMessage.php b/vendor/felixfbecker/language-server-protocol/src/LogMessage.php
deleted file mode 100644
index 9c6f38d6..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/LogMessage.php
+++ /dev/null
@@ -1,30 +0,0 @@
-type = $type;
- $this->message = $message;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/LogTrace.php b/vendor/felixfbecker/language-server-protocol/src/LogTrace.php
deleted file mode 100644
index dfba3645..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/LogTrace.php
+++ /dev/null
@@ -1,39 +0,0 @@
-message = $message;
- $this->verbose = $verbose;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/MarkdownClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/MarkdownClientCapabilities.php
deleted file mode 100644
index 5af49455..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/MarkdownClientCapabilities.php
+++ /dev/null
@@ -1,47 +0,0 @@
-parser = $parser;
- $this->version = $version;
- $this->allowedTags = $allowedTags;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/MarkedString.php b/vendor/felixfbecker/language-server-protocol/src/MarkedString.php
deleted file mode 100644
index 402a8793..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/MarkedString.php
+++ /dev/null
@@ -1,24 +0,0 @@
-language = $language;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->value = $value;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/MarkupContent.php b/vendor/felixfbecker/language-server-protocol/src/MarkupContent.php
deleted file mode 100644
index 5b7e6db1..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/MarkupContent.php
+++ /dev/null
@@ -1,52 +0,0 @@
-kind = $kind;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->value = $value;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/MarkupKind.php b/vendor/felixfbecker/language-server-protocol/src/MarkupKind.php
deleted file mode 100644
index 962fb031..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/MarkupKind.php
+++ /dev/null
@@ -1,23 +0,0 @@
-title = $title;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/MessageType.php b/vendor/felixfbecker/language-server-protocol/src/MessageType.php
deleted file mode 100644
index 1d01540b..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/MessageType.php
+++ /dev/null
@@ -1,29 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/PackageDescriptor.php b/vendor/felixfbecker/language-server-protocol/src/PackageDescriptor.php
deleted file mode 100644
index 9f26856b..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/PackageDescriptor.php
+++ /dev/null
@@ -1,26 +0,0 @@
-name = $name;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ParameterInformation.php b/vendor/felixfbecker/language-server-protocol/src/ParameterInformation.php
deleted file mode 100644
index a94bb671..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ParameterInformation.php
+++ /dev/null
@@ -1,45 +0,0 @@
-label = $label;
- $this->documentation = $documentation;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/Position.php b/vendor/felixfbecker/language-server-protocol/src/Position.php
deleted file mode 100644
index 26c5f1e6..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/Position.php
+++ /dev/null
@@ -1,67 +0,0 @@
-line = $line;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->character = $character;
- }
-
- /**
- * Compares this position to another position
- * Returns
- * - 0 if the positions match
- * - a negative number if $this is before $position
- * - a positive number otherwise
- *
- * @param Position $position
- * @return int
- */
- public function compare(Position $position): int
- {
- if ($this->line === $position->line && $this->character === $position->character) {
- return 0;
- }
-
- if ($this->line !== $position->line) {
- return $this->line - $position->line;
- }
-
- return $this->character - $position->character;
- }
-
- /**
- * Returns the offset of the position in a string
- *
- * @param string $content
- * @return int
- */
- public function toOffset(string $content): int
- {
- $lines = explode("\n", $content);
- $slice = array_slice($lines, 0, $this->line);
- return array_sum(array_map('strlen', $slice)) + count($slice) + $this->character;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/PrepareSupportDefaultBehavior.php b/vendor/felixfbecker/language-server-protocol/src/PrepareSupportDefaultBehavior.php
deleted file mode 100644
index fe374095..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/PrepareSupportDefaultBehavior.php
+++ /dev/null
@@ -1,12 +0,0 @@
-relatedInformation = $relatedInformation;
- $this->tagSupport = $tagSupport;
- $this->versionSupport = $versionSupport;
- $this->codeDescriptionSupport = $codeDescriptionSupport;
- $this->dataSupport = $dataSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/PublishDiagnosticsClientCapabilitiesTagSupport.php b/vendor/felixfbecker/language-server-protocol/src/PublishDiagnosticsClientCapabilitiesTagSupport.php
deleted file mode 100644
index 7fe5df63..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/PublishDiagnosticsClientCapabilitiesTagSupport.php
+++ /dev/null
@@ -1,23 +0,0 @@
-valueSet = $valueSet;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/Range.php b/vendor/felixfbecker/language-server-protocol/src/Range.php
deleted file mode 100644
index 9077a523..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/Range.php
+++ /dev/null
@@ -1,42 +0,0 @@
-start = $start;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->end = $end;
- }
-
- /**
- * Checks if a position is within the range
- *
- * @param Position $position
- * @return bool
- */
- public function includes(Position $position): bool
- {
- return $this->start->compare($position) <= 0 && $this->end->compare($position) >= 0;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ReferenceClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/ReferenceClientCapabilities.php
deleted file mode 100644
index 195f096f..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ReferenceClientCapabilities.php
+++ /dev/null
@@ -1,18 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ReferenceContext.php b/vendor/felixfbecker/language-server-protocol/src/ReferenceContext.php
deleted file mode 100644
index fe941aee..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ReferenceContext.php
+++ /dev/null
@@ -1,19 +0,0 @@
-includeDeclaration = $includeDeclaration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ReferenceInformation.php b/vendor/felixfbecker/language-server-protocol/src/ReferenceInformation.php
deleted file mode 100644
index 03a3be1d..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ReferenceInformation.php
+++ /dev/null
@@ -1,39 +0,0 @@
-reference = $reference;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->symbol = $symbol;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/RegularExpressionsClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/RegularExpressionsClientCapabilities.php
deleted file mode 100644
index e3c16435..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/RegularExpressionsClientCapabilities.php
+++ /dev/null
@@ -1,33 +0,0 @@
-engine = $engine;
- $this->version = $version;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/RenameClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/RenameClientCapabilities.php
deleted file mode 100644
index faaf258d..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/RenameClientCapabilities.php
+++ /dev/null
@@ -1,68 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->prepareSupport = $prepareSupport;
- $this->prepareSupportDefaultBehavior = $prepareSupportDefaultBehavior;
- $this->honorsChangeAnnotations = $honorsChangeAnnotations;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ResourceOperationKind.php b/vendor/felixfbecker/language-server-protocol/src/ResourceOperationKind.php
deleted file mode 100644
index 7bc9ca90..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ResourceOperationKind.php
+++ /dev/null
@@ -1,24 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilities.php
deleted file mode 100644
index a254dbd7..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilities.php
+++ /dev/null
@@ -1,133 +0,0 @@
-requests = $requests;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->tokenTypes = $tokenTypes;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->tokenModifiers = $tokenModifiers;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->formats = $formats;
- $this->dynamicRegistration = $dynamicRegistration;
- $this->overlappingTokenSupport = $overlappingTokenSupport;
- $this->multilineTokenSupport = $multilineTokenSupport;
- $this->serverCancelSupport = $serverCancelSupport;
- $this->augmentsSyntaxTokens = $augmentsSyntaxTokens;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilitiesRequests.php b/vendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilitiesRequests.php
deleted file mode 100644
index 62d2bfd6..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilitiesRequests.php
+++ /dev/null
@@ -1,31 +0,0 @@
-range = $range;
- $this->full = $full;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SemanticTokensWorkspaceClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/SemanticTokensWorkspaceClientCapabilities.php
deleted file mode 100644
index ae1c0ed3..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SemanticTokensWorkspaceClientCapabilities.php
+++ /dev/null
@@ -1,24 +0,0 @@
-refreshSupport = $refreshSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ServerCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/ServerCapabilities.php
deleted file mode 100644
index 3604321f..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ServerCapabilities.php
+++ /dev/null
@@ -1,157 +0,0 @@
-support = $support;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilities.php
deleted file mode 100644
index b19bd870..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilities.php
+++ /dev/null
@@ -1,20 +0,0 @@
-messageActionItem = $messageActionItem;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilitiesMessageActionItem.php b/vendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilitiesMessageActionItem.php
deleted file mode 100644
index 4303f18b..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilitiesMessageActionItem.php
+++ /dev/null
@@ -1,22 +0,0 @@
-additionalPropertiesSupport = $additionalPropertiesSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SignatureHelp.php b/vendor/felixfbecker/language-server-protocol/src/SignatureHelp.php
deleted file mode 100644
index c5b853eb..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SignatureHelp.php
+++ /dev/null
@@ -1,61 +0,0 @@
-signatures = $signatures;
- $this->activeSignature = $activeSignature;
- $this->activeParameter = $activeParameter;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilities.php
deleted file mode 100644
index 58b48052..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilities.php
+++ /dev/null
@@ -1,43 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->signatureInformation = $signatureInformation;
- $this->contextSupport = $contextSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformation.php b/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformation.php
deleted file mode 100644
index a333846b..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformation.php
+++ /dev/null
@@ -1,50 +0,0 @@
-documentationFormat = $documentationFormat;
- $this->parameterInformation = $parameterInformation;
- $this->activeParameterSupport = $activeParameterSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformationParameterInformation.php b/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformationParameterInformation.php
deleted file mode 100644
index 72c7d004..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformationParameterInformation.php
+++ /dev/null
@@ -1,24 +0,0 @@
-labelOffsetSupport = $labelOffsetSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SignatureHelpOptions.php b/vendor/felixfbecker/language-server-protocol/src/SignatureHelpOptions.php
deleted file mode 100644
index 04222ed4..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SignatureHelpOptions.php
+++ /dev/null
@@ -1,24 +0,0 @@
-triggerCharacters = $triggerCharacters;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SignatureInformation.php b/vendor/felixfbecker/language-server-protocol/src/SignatureInformation.php
deleted file mode 100644
index c7329feb..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SignatureInformation.php
+++ /dev/null
@@ -1,66 +0,0 @@
-label = $label;
- $this->parameters = $parameters;
- $this->documentation = $documentation;
- $this->activeParameter = $activeParameter;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SymbolDescriptor.php b/vendor/felixfbecker/language-server-protocol/src/SymbolDescriptor.php
deleted file mode 100644
index 2bcd4a41..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SymbolDescriptor.php
+++ /dev/null
@@ -1,36 +0,0 @@
-fqsen = $fqsen;
- $this->package = $package;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SymbolInformation.php b/vendor/felixfbecker/language-server-protocol/src/SymbolInformation.php
deleted file mode 100644
index 26688f97..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SymbolInformation.php
+++ /dev/null
@@ -1,55 +0,0 @@
-name = $name;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->kind = $kind;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->location = $location;
- $this->containerName = $containerName;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SymbolKind.php b/vendor/felixfbecker/language-server-protocol/src/SymbolKind.php
deleted file mode 100644
index b59eecae..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SymbolKind.php
+++ /dev/null
@@ -1,28 +0,0 @@
-symbol = $symbol;
- $this->location = $location;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/SymbolTag.php b/vendor/felixfbecker/language-server-protocol/src/SymbolTag.php
deleted file mode 100644
index 6eed0476..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/SymbolTag.php
+++ /dev/null
@@ -1,16 +0,0 @@
-synchronization = $synchronization;
- $this->completion = $completion;
- $this->hover = $hover;
- $this->signatureHelp = $signatureHelp;
- $this->declaration = $declaration;
- $this->definition = $definition;
- $this->typeDefinition = $typeDefinition;
- $this->implementation = $implementation;
- $this->references = $references;
- $this->documentHighlight = $documentHighlight;
- $this->documentSymbol = $documentSymbol;
- $this->codeAction = $codeAction;
- $this->codeLens = $codeLens;
- $this->documentLink = $documentLink;
- $this->colorProvider = $colorProvider;
- $this->formatting = $formatting;
- $this->rangeFormatting = $rangeFormatting;
- $this->onTypeFormatting = $onTypeFormatting;
- $this->rename = $rename;
- $this->publishDiagnostics = $publishDiagnostics;
- $this->foldingRange = $foldingRange;
- $this->selectionRange = $selectionRange;
- $this->linkedEditingRange = $linkedEditingRange;
- $this->callHierarchy = $callHierarchy;
- $this->semanticTokens = $semanticTokens;
- $this->moniker = $moniker;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/TextDocumentContentChangeEvent.php b/vendor/felixfbecker/language-server-protocol/src/TextDocumentContentChangeEvent.php
deleted file mode 100644
index 77589fca..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/TextDocumentContentChangeEvent.php
+++ /dev/null
@@ -1,39 +0,0 @@
-range = $range;
- $this->rangeLength = $rangeLength;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->text = $text;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/TextDocumentIdentifier.php b/vendor/felixfbecker/language-server-protocol/src/TextDocumentIdentifier.php
deleted file mode 100644
index fe9eaddc..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/TextDocumentIdentifier.php
+++ /dev/null
@@ -1,22 +0,0 @@
-uri = $uri;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/TextDocumentItem.php b/vendor/felixfbecker/language-server-protocol/src/TextDocumentItem.php
deleted file mode 100644
index cb9fd651..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/TextDocumentItem.php
+++ /dev/null
@@ -1,50 +0,0 @@
-uri = $uri;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->languageId = $languageId;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->version = $version;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->text = $text;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/TextDocumentSyncClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/TextDocumentSyncClientCapabilities.php
deleted file mode 100644
index 6bb119c7..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/TextDocumentSyncClientCapabilities.php
+++ /dev/null
@@ -1,49 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->willSave = $willSave;
- $this->willSaveWaitUntil = $willSaveWaitUntil;
- $this->didSave = $didSave;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/TextDocumentSyncKind.php b/vendor/felixfbecker/language-server-protocol/src/TextDocumentSyncKind.php
deleted file mode 100644
index 0adf6345..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/TextDocumentSyncKind.php
+++ /dev/null
@@ -1,25 +0,0 @@
-range = $range;
- $this->newText = $newText;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/TokenFormat.php b/vendor/felixfbecker/language-server-protocol/src/TokenFormat.php
deleted file mode 100644
index 73eff909..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/TokenFormat.php
+++ /dev/null
@@ -1,8 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->linkSupport = $linkSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/VersionedTextDocumentIdentifier.php b/vendor/felixfbecker/language-server-protocol/src/VersionedTextDocumentIdentifier.php
deleted file mode 100644
index 6232713f..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/VersionedTextDocumentIdentifier.php
+++ /dev/null
@@ -1,19 +0,0 @@
-version = $version;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/WorkspaceEdit.php b/vendor/felixfbecker/language-server-protocol/src/WorkspaceEdit.php
deleted file mode 100644
index eaa71950..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/WorkspaceEdit.php
+++ /dev/null
@@ -1,78 +0,0 @@
-
- */
- public $changes;
-
- /**
- * Depending on the client capability
- * `workspace.workspaceEdit.resourceOperations` document changes are either
- * an array of `TextDocumentEdit`s to express changes to n different text
- * documents where each text document edit addresses a specific version of
- * a text document. Or it can contain above `TextDocumentEdit`s mixed with
- * create, rename and delete file / folder operations.
- *
- * Whether a client supports versioned document edits is expressed via
- * `workspace.workspaceEdit.documentChanges` client capability.
- *
- * If a client neither supports `documentChanges` nor
- * `workspace.workspaceEdit.resourceOperations` then only plain `TextEdit`s
- * using the `changes` property are supported.
- *
- * @var mixed
- */
- public $documentChanges;
-
- /**
- * A map of change annotations that can be referenced in
- * `AnnotatedTextEdit`s or create, rename and delete file / folder
- * operations.
- *
- * Whether clients honor this property depends on the client capability
- * `workspace.changeAnnotationSupport`.
- *
- * @since 3.16.0
- *
- * @var array|null
- */
- public $changeAnnotations;
-
- /**
- * @param array $changes
- * @param mixed $documentChanges
- * @param array|null $changeAnnotations
- */
- public function __construct(
- array $changes = [],
- $documentChanges = null,
- array $changeAnnotations = null
- ) {
- $this->changes = $changes;
- $this->documentChanges = $documentChanges;
- $this->changeAnnotations = $changeAnnotations;
- }
-
- /**
- * This is needed because VSCode Does not like nulls
- * meaning if a null is sent then this will not compute
- *
- * @return mixed
- */
- #[\ReturnTypeWillChange]
- public function jsonSerialize()
- {
- return array_filter(get_object_vars($this));
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilities.php
deleted file mode 100644
index 31e21c62..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilities.php
+++ /dev/null
@@ -1,80 +0,0 @@
-documentChanges = $documentChanges;
- $this->resourceOperations = $resourceOperations;
- $this->failureHandling = $failureHandling;
- $this->normalizesLineEndings = $normalizesLineEndings;
- $this->changeAnnotationSupport = $changeAnnotationSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilitiesChangeAnnotationSupport.php b/vendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilitiesChangeAnnotationSupport.php
deleted file mode 100644
index 8f62d562..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilitiesChangeAnnotationSupport.php
+++ /dev/null
@@ -1,21 +0,0 @@
-groupsOnLabel = $groupsOnLabel;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/WorkspaceFolder.php b/vendor/felixfbecker/language-server-protocol/src/WorkspaceFolder.php
deleted file mode 100644
index 764e0c28..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/WorkspaceFolder.php
+++ /dev/null
@@ -1,31 +0,0 @@
-uri = $uri;
- /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
- $this->name = $name;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilities.php b/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilities.php
deleted file mode 100644
index 57550c1b..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilities.php
+++ /dev/null
@@ -1,55 +0,0 @@
-dynamicRegistration = $dynamicRegistration;
- $this->symbolKind = $symbolKind;
- $this->tagSupport = $tagSupport;
- $this->resolveSupport = $resolveSupport;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesResolveSupport.php b/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesResolveSupport.php
deleted file mode 100644
index b5450396..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesResolveSupport.php
+++ /dev/null
@@ -1,24 +0,0 @@
-properties = $properties;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesSymbolKind.php b/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesSymbolKind.php
deleted file mode 100644
index 7796d062..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesSymbolKind.php
+++ /dev/null
@@ -1,30 +0,0 @@
-valueSet = $valueSet;
- }
-}
diff --git a/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesTagSupport.php b/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesTagSupport.php
deleted file mode 100644
index 1e21a84d..00000000
--- a/vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesTagSupport.php
+++ /dev/null
@@ -1,30 +0,0 @@
-valueSet = $valueSet;
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/LICENSE.md b/vendor/fidry/cpu-core-counter/LICENSE.md
deleted file mode 100644
index 02442130..00000000
--- a/vendor/fidry/cpu-core-counter/LICENSE.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# The MIT License (MIT)
-
-Copyright (c) 2022 Théo FIDRY
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the _Software_), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED **AS IS**, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/fidry/cpu-core-counter/README.md b/vendor/fidry/cpu-core-counter/README.md
deleted file mode 100644
index 8c86a187..00000000
--- a/vendor/fidry/cpu-core-counter/README.md
+++ /dev/null
@@ -1,114 +0,0 @@
-# CPU Core Counter
-
-This package is a tiny utility to get the number of CPU cores.
-
-```sh
-composer require fidry/cpu-core-counter
-```
-
-
-## Usage
-
-```php
-use Fidry\CpuCoreCounter\CpuCoreCounter;
-use Fidry\CpuCoreCounter\NumberOfCpuCoreNotFound;
-use Fidry\CpuCoreCounter\Finder\DummyCpuCoreFinder;
-
-$counter = new CpuCoreCounter();
-
-try {
- $counter->getCount(); // e.g. 8
-} catch (NumberOfCpuCoreNotFound) {
- return 1; // Fallback value
-}
-
-// An alternative form where we not want to catch the exception:
-
-$counter = new CpuCoreCounter([
- ...CpuCoreCounter::getDefaultFinders(),
- new DummyCpuCoreFinder(1), // Fallback value
-]);
-
-$counter->getCount(); // e.g. 8
-
-```
-
-
-## Advanced usage
-
-### Changing the finders
-
-When creating `CpuCoreCounter`, you may want to change the order of the finders
-used or disable a specific finder. You can easily do so by passing the finders
-you want
-
-```php
-// Remove WindowsWmicFinder
-$finders = array_filter(
- CpuCoreCounter::getDefaultFinders(),
- static fn (CpuCoreFinder $finder) => !($finder instanceof WindowsWmicFinder)
-);
-
-$cores = (new CpuCoreCounter($finders))->getCount();
-```
-
-```php
-// Use CPUInfo first & don't use Nproc
-$finders = [
- new CpuInfoFinder(),
- new WindowsWmicFinder(),
- new HwLogicalFinder(),
-];
-
-$cores = (new CpuCoreCounter($finders))->getCount();
-```
-
-### Choosing only logical or physical finders
-
-`FinderRegistry` provides two helpful entries:
-
-- `::getDefaultLogicalFinders()`: gives an ordered list of finders that will
- look for the _logical_ CPU cores count
-- `::getDefaultPhysicalFinders()`: gives an ordered list of finders that will
- look for the _physical_ CPU cores count
-
-By default when using `CpuCoreCounter`, it will use the logical finders since
-it is more likely what you are looking for and is what is used by PHP source to
-build the PHP binary.
-
-
-### Checks what finders find what on your system
-
-You have two commands available that provides insight about what the finders
-can find:
-
-```
-$ make diagnosis # From this repository
-$ ./vendor/fidry/cpu-core-counter/bin/diagnose.php # From the library
-```
-
-And:
-```
-$ make execute # From this repository
-$ ./vendor/fidry/cpu-core-counter/bin/execute.php # From the library
-```
-
-
-## Backward Compatibility Promise (BCP)
-
-The policy is for the major part following the same as [Symfony's one][symfony-bc-policy].
-Note that the code marked as `@private` or `@internal` are excluded from the BCP.
-
-The following elements are also excluded:
-
-- The `diagnose` and `execute` commands: those are for debugging/inspection purposes only
-- `FinderRegistry::get*Finders()`: new finders may be added or the order of finders changed at any time
-
-
-## License
-
-This package is licensed using the MIT License.
-
-Please have a look at [`LICENSE.md`](LICENSE.md).
-
-[symfony-bc-policy]: https://symfony.com/doc/current/contributing/code/bc.html
diff --git a/vendor/fidry/cpu-core-counter/bin/diagnose.php b/vendor/fidry/cpu-core-counter/bin/diagnose.php
deleted file mode 100755
index ec589e31..00000000
--- a/vendor/fidry/cpu-core-counter/bin/diagnose.php
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env php
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-use Fidry\CpuCoreCounter\Diagnoser;
-use Fidry\CpuCoreCounter\Finder\FinderRegistry;
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-echo 'Running diagnosis...'.PHP_EOL.PHP_EOL;
-echo Diagnoser::diagnose(FinderRegistry::getAllVariants()).PHP_EOL;
diff --git a/vendor/fidry/cpu-core-counter/bin/execute.php b/vendor/fidry/cpu-core-counter/bin/execute.php
deleted file mode 100755
index edadebb1..00000000
--- a/vendor/fidry/cpu-core-counter/bin/execute.php
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env php
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-use Fidry\CpuCoreCounter\Diagnoser;
-use Fidry\CpuCoreCounter\Finder\FinderRegistry;
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-echo 'Executing finders...'.PHP_EOL.PHP_EOL;
-echo Diagnoser::execute(FinderRegistry::getAllVariants()).PHP_EOL;
diff --git a/vendor/fidry/cpu-core-counter/composer.json b/vendor/fidry/cpu-core-counter/composer.json
deleted file mode 100644
index 2ddaf525..00000000
--- a/vendor/fidry/cpu-core-counter/composer.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "fidry/cpu-core-counter",
- "description": "Tiny utility to get the number of CPU cores.",
- "license": "MIT",
- "type": "library",
- "keywords": [
- "cpu",
- "core"
- ],
- "authors": [
- {
- "name": "Théo FIDRY",
- "email": "theo.fidry@gmail.com"
- }
- ],
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "fidry/makefile": "^0.2.0",
- "phpstan/extension-installer": "^1.2.0",
- "phpstan/phpstan": "^1.9.2",
- "phpstan/phpstan-deprecation-rules": "^1.0.0",
- "phpstan/phpstan-phpunit": "^1.2.2",
- "phpstan/phpstan-strict-rules": "^1.4.4",
- "phpunit/phpunit": "^9.5.26 || ^8.5.31",
- "theofidry/php-cs-fixer-config": "^1.0",
- "webmozarts/strict-phpunit": "^7.5"
- },
- "autoload": {
- "psr-4": {
- "Fidry\\CpuCoreCounter\\": "src/"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "Fidry\\CpuCoreCounter\\Test\\": "tests/"
- }
- },
- "config": {
- "allow-plugins": {
- "ergebnis/composer-normalize": true,
- "infection/extension-installer": true,
- "phpstan/extension-installer": true
- },
- "sort-packages": true
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php b/vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php
deleted file mode 100644
index 098693b5..00000000
--- a/vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php
+++ /dev/null
@@ -1,89 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter;
-
-use Fidry\CpuCoreCounter\Finder\CpuCoreFinder;
-use Fidry\CpuCoreCounter\Finder\FinderRegistry;
-
-final class CpuCoreCounter
-{
- /**
- * @var list
- */
- private $finders;
-
- /**
- * @var positive-int|null
- */
- private $count;
-
- /**
- * @param list|null $finders
- */
- public function __construct(?array $finders = null)
- {
- $this->finders = $finders ?? FinderRegistry::getDefaultLogicalFinders();
- }
-
- /**
- * @throws NumberOfCpuCoreNotFound
- *
- * @return positive-int
- */
- public function getCount(): int
- {
- // Memoize result
- if (null === $this->count) {
- $this->count = $this->findCount();
- }
-
- return $this->count;
- }
-
- /**
- * @throws NumberOfCpuCoreNotFound
- *
- * @return positive-int
- */
- private function findCount(): int
- {
- foreach ($this->finders as $finder) {
- $cores = $finder->find();
-
- if (null !== $cores) {
- return $cores;
- }
- }
-
- throw NumberOfCpuCoreNotFound::create();
- }
-
- /**
- * @throws NumberOfCpuCoreNotFound
- *
- * @return array{CpuCoreFinder, positive-int}
- */
- public function getFinderAndCores(): array
- {
- foreach ($this->finders as $finder) {
- $cores = $finder->find();
-
- if (null !== $cores) {
- return [$finder, $cores];
- }
- }
-
- throw NumberOfCpuCoreNotFound::create();
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Diagnoser.php b/vendor/fidry/cpu-core-counter/src/Diagnoser.php
deleted file mode 100644
index 872b55f8..00000000
--- a/vendor/fidry/cpu-core-counter/src/Diagnoser.php
+++ /dev/null
@@ -1,101 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter;
-
-use Fidry\CpuCoreCounter\Finder\CpuCoreFinder;
-use function array_map;
-use function explode;
-use function implode;
-use function max;
-use function str_repeat;
-use const PHP_EOL;
-
-/**
- * Utility to debug.
- *
- * @private
- */
-final class Diagnoser
-{
- /**
- * Provides an aggregated diagnosis based on each finders diagnosis.
- *
- * @param list $finders
- */
- public static function diagnose(array $finders): string
- {
- $diagnoses = array_map(
- static function (CpuCoreFinder $finder): string {
- return self::diagnoseFinder($finder);
- },
- $finders
- );
-
- return implode(PHP_EOL, $diagnoses);
- }
-
- /**
- * Executes each finders.
- *
- * @param list $finders
- */
- public static function execute(array $finders): string
- {
- $diagnoses = array_map(
- static function (CpuCoreFinder $finder): string {
- $coresCount = $finder->find();
-
- return implode(
- '',
- [
- $finder->toString(),
- ': ',
- null === $coresCount ? 'NULL' : $coresCount,
- ]
- );
- },
- $finders
- );
-
- return implode(PHP_EOL, $diagnoses);
- }
-
- private static function diagnoseFinder(CpuCoreFinder $finder): string
- {
- $diagnosis = $finder->diagnose();
-
- $maxLineLength = max(
- array_map(
- 'strlen',
- explode(PHP_EOL, $diagnosis)
- )
- );
-
- $separator = str_repeat('-', $maxLineLength);
-
- return implode(
- '',
- [
- $finder->toString().':'.PHP_EOL,
- $separator.PHP_EOL,
- $diagnosis.PHP_EOL,
- $separator.PHP_EOL,
- ]
- );
- }
-
- private function __construct()
- {
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php b/vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php
deleted file mode 100644
index 751a311d..00000000
--- a/vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php
+++ /dev/null
@@ -1,56 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Executor;
-
-use function fclose;
-use function function_exists;
-use function is_resource;
-use function proc_close;
-use function proc_open;
-use function stream_get_contents;
-
-final class ProcOpenExecutor implements ProcessExecutor
-{
- public function execute(string $command): ?array
- {
- if (!function_exists('proc_open')) {
- return null;
- }
-
- $pipes = [];
-
- $process = @proc_open(
- $command,
- [
- ['pipe', 'rb'],
- ['pipe', 'wb'], // stdout
- ['pipe', 'wb'], // stderr
- ],
- $pipes
- );
-
- if (!is_resource($process)) {
- return null;
- }
-
- fclose($pipes[0]);
-
- $stdout = (string) stream_get_contents($pipes[1]);
- $stderr = (string) stream_get_contents($pipes[2]);
-
- proc_close($process);
-
- return [$stdout, $stderr];
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php b/vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php
deleted file mode 100644
index 287c01e1..00000000
--- a/vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php
+++ /dev/null
@@ -1,22 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Executor;
-
-interface ProcessExecutor
-{
- /**
- * @return array{string, string}|null STDOUT & STDERR tuple
- */
- public function execute(string $command): ?array;
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php
deleted file mode 100644
index edb40e86..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php
+++ /dev/null
@@ -1,37 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-interface CpuCoreFinder
-{
- /**
- * Provides an explanation which may offer some insight as to what the finder
- * will be able to find.
- *
- * This is practical to have an idea of what each finder will find collect
- * information for the unit tests, since integration tests are quite complicated
- * as dependent on complex infrastructures.
- */
- public function diagnose(): string;
-
- /**
- * Find the number of CPU cores. If it could not find it, returns null. The
- * means used to find the cores are at the implementation discretion.
- *
- * @return positive-int|null
- */
- public function find(): ?int;
-
- public function toString(): string;
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php
deleted file mode 100644
index dea4c412..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php
+++ /dev/null
@@ -1,98 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use function file_get_contents;
-use function is_file;
-use function sprintf;
-use function substr_count;
-use const PHP_EOL;
-
-/**
- * Find the number of CPU cores looking up at the cpuinfo file which is available
- * on Linux systems and Windows systems with a Linux sub-system.
- *
- * @see https://github.com/paratestphp/paratest/blob/c163539818fd96308ca8dc60f46088461e366ed4/src/Runners/PHPUnit/Options.php#L903-L909
- * @see https://unix.stackexchange.com/questions/146051/number-of-processors-in-proc-cpuinfo
- */
-final class CpuInfoFinder implements CpuCoreFinder
-{
- private const CPU_INFO_PATH = '/proc/cpuinfo';
-
- public function diagnose(): string
- {
- if (!is_file(self::CPU_INFO_PATH)) {
- return sprintf(
- 'The file "%s" could not be found.',
- self::CPU_INFO_PATH
- );
- }
-
- $cpuInfo = file_get_contents(self::CPU_INFO_PATH);
-
- if (false === $cpuInfo) {
- return sprintf(
- 'Could not get the content of the file "%s".',
- self::CPU_INFO_PATH
- );
- }
-
- return sprintf(
- 'Found the file "%s" with the content:%s%s',
- self::CPU_INFO_PATH,
- PHP_EOL,
- $cpuInfo
- );
- }
-
- /**
- * @return positive-int|null
- */
- public function find(): ?int
- {
- $cpuInfo = self::getCpuInfo();
-
- return null === $cpuInfo ? null : self::countCpuCores($cpuInfo);
- }
-
- public function toString(): string
- {
- return 'CpuInfoFinder';
- }
-
- private static function getCpuInfo(): ?string
- {
- if (!@is_file(self::CPU_INFO_PATH)) {
- return null;
- }
-
- $cpuInfo = @file_get_contents(self::CPU_INFO_PATH);
-
- return false === $cpuInfo
- ? null
- : $cpuInfo;
- }
-
- /**
- * @internal
- *
- * @return positive-int|null
- */
- public static function countCpuCores(string $cpuInfo): ?int
- {
- $processorCount = substr_count($cpuInfo, 'processor');
-
- return $processorCount > 0 ? $processorCount : null;
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php
deleted file mode 100644
index 1efa4da6..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php
+++ /dev/null
@@ -1,57 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use function sprintf;
-
-/**
- * This finder returns whatever value you gave to it. This is useful for testing
- * or as a fallback to avoid to catch the NumberOfCpuCoreNotFound exception.
- */
-final class DummyCpuCoreFinder implements CpuCoreFinder
-{
- /**
- * @var positive-int
- */
- private $count;
-
- public function diagnose(): string
- {
- return sprintf(
- 'Will return "%d".',
- $this->count
- );
- }
-
- /**
- * @param positive-int $count
- */
- public function __construct(int $count)
- {
- $this->count = $count;
- }
-
- public function find(): ?int
- {
- return $this->count;
- }
-
- public function toString(): string
- {
- return sprintf(
- 'DummyCpuCoreFinder(value=%d)',
- $this->count
- );
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.php b/vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.php
deleted file mode 100644
index 4f824587..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.php
+++ /dev/null
@@ -1,77 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-final class FinderRegistry
-{
- /**
- * @return list List of all the known finders with all their variants.
- */
- public static function getAllVariants(): array
- {
- return [
- new CpuInfoFinder(),
- new DummyCpuCoreFinder(1),
- new HwLogicalFinder(),
- new HwPhysicalFinder(),
- new LscpuLogicalFinder(),
- new LscpuPhysicalFinder(),
- new _NProcessorFinder(),
- new NProcessorFinder(),
- new NProcFinder(true),
- new NProcFinder(false),
- new NullCpuCoreFinder(),
- SkipOnOSFamilyFinder::forWindows(
- new DummyCpuCoreFinder(1)
- ),
- OnlyOnOSFamilyFinder::forWindows(
- new DummyCpuCoreFinder(1)
- ),
- new WmicPhysicalFinder(),
- new WmicLogicalFinder(),
- ];
- }
-
- /**
- * @return list
- */
- public static function getDefaultLogicalFinders(): array
- {
- return [
- OnlyOnOSFamilyFinder::forWindows(new WmicLogicalFinder()),
- new NProcFinder(),
- new HwLogicalFinder(),
- new _NProcessorFinder(),
- new NProcessorFinder(),
- new LscpuLogicalFinder(),
- new CpuInfoFinder(),
- ];
- }
-
- /**
- * @return list
- */
- public static function getDefaultPhysicalFinders(): array
- {
- return [
- OnlyOnOSFamilyFinder::forWindows(new WmicPhysicalFinder()),
- new HwPhysicalFinder(),
- new LscpuPhysicalFinder(),
- ];
- }
-
- private function __construct()
- {
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php
deleted file mode 100644
index d1129038..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-/**
- * Find the number of logical CPU cores for Linux, BSD and OSX.
- *
- * @see https://github.com/paratestphp/paratest/blob/c163539818fd96308ca8dc60f46088461e366ed4/src/Runners/PHPUnit/Options.php#L903-L909
- * @see https://opensource.apple.com/source/xnu/xnu-792.2.4/libkern/libkern/sysctl.h.auto.html
- */
-final class HwLogicalFinder extends ProcOpenBasedFinder
-{
- protected function getCommand(): string
- {
- return 'sysctl -n hw.logicalcpu';
- }
-
- public function toString(): string
- {
- return 'HwLogicalFinder';
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php
deleted file mode 100644
index 65ca1cfd..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-/**
- * Find the number of physical CPU cores for Linux, BSD and OSX.
- *
- * @see https://github.com/paratestphp/paratest/blob/c163539818fd96308ca8dc60f46088461e366ed4/src/Runners/PHPUnit/Options.php#L903-L909
- * @see https://opensource.apple.com/source/xnu/xnu-792.2.4/libkern/libkern/sysctl.h.auto.html
- */
-final class HwPhysicalFinder extends ProcOpenBasedFinder
-{
- protected function getCommand(): string
- {
- return 'sysctl -n hw.physicalcpu';
- }
-
- public function toString(): string
- {
- return 'HwPhysicalFinder';
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php
deleted file mode 100644
index bce09ebf..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use function count;
-use function explode;
-use function is_array;
-use function preg_grep;
-use const PHP_EOL;
-
-/**
- * The number of logical cores.
- *
- * @see https://stackoverflow.com/a/23378780/5846754
- */
-final class LscpuLogicalFinder extends ProcOpenBasedFinder
-{
- public function getCommand(): string
- {
- return 'lscpu -p';
- }
-
- protected function countCpuCores(string $process): ?int
- {
- $lines = explode(PHP_EOL, $process);
- $actualLines = preg_grep('/^\d+,/', $lines);
-
- if (!is_array($actualLines)) {
- return null;
- }
-
- $count = count($actualLines);
-
- return 0 === $count ? null : $count;
- }
-
- public function toString(): string
- {
- return 'LscpuLogicalFinder';
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php
deleted file mode 100644
index 58523cee..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use function count;
-use function explode;
-use function is_array;
-use function preg_grep;
-use function strtok;
-use const PHP_EOL;
-
-/**
- * The number of physical processors.
- *
- * @see https://stackoverflow.com/a/23378780/5846754
- */
-final class LscpuPhysicalFinder extends ProcOpenBasedFinder
-{
- public function toString(): string
- {
- return 'LscpuPhysicalFinder';
- }
-
- public function getCommand(): string
- {
- return 'lscpu -p';
- }
-
- protected function countCpuCores(string $process): ?int
- {
- $lines = explode(PHP_EOL, $process);
- $actualLines = preg_grep('/^\d+/', $lines);
-
- if (!is_array($actualLines)) {
- return null;
- }
-
- $cores = [];
- foreach ($actualLines as $line) {
- strtok($line, ',');
- $core = strtok(',');
-
- if (false === $core) {
- continue;
- }
-
- $cores[$core] = true;
- }
- unset($cores['-']);
-
- $count = count($cores);
-
- return 0 === $count ? null : $count;
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php
deleted file mode 100644
index 60a8ab78..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php
+++ /dev/null
@@ -1,56 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use Fidry\CpuCoreCounter\Executor\ProcessExecutor;
-use function sprintf;
-
-/**
- * The number of (logical) cores.
- *
- * @see https://github.com/infection/infection/blob/fbd8c44/src/Resource/Processor/CpuCoresCountProvider.php#L69-L82
- * @see https://unix.stackexchange.com/questions/146051/number-of-processors-in-proc-cpuinfo
- */
-final class NProcFinder extends ProcOpenBasedFinder
-{
- /**
- * @var bool
- */
- private $all;
-
- /**
- * @param bool $all If disabled will give the number of cores available for the current process only.
- */
- public function __construct(
- bool $all = true,
- ?ProcessExecutor $executor = null
- ) {
- parent::__construct($executor);
-
- $this->all = $all;
- }
-
- public function toString(): string
- {
- return sprintf(
- 'NProcFinder(all=%s)',
- $this->all ? 'true' : 'false'
- );
- }
-
- protected function getCommand(): string
- {
- return 'nproc'.($this->all ? ' --all' : '');
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php
deleted file mode 100644
index 9143e31c..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php
+++ /dev/null
@@ -1,32 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-/**
- * Find the number of logical CPU cores for FreeSBD, Solaris and the likes.
- *
- * @see https://twitter.com/freebsdfrau/status/1052016199452700678?s=20&t=M2pHkRqmmna-UF68lfL2hw
- */
-final class NProcessorFinder extends ProcOpenBasedFinder
-{
- protected function getCommand(): string
- {
- return 'getconf NPROCESSORS_ONLN';
- }
-
- public function toString(): string
- {
- return 'NProcessorFinder';
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php
deleted file mode 100644
index 50af2d4d..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php
+++ /dev/null
@@ -1,35 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-/**
- * This finder returns whatever value you gave to it. This is useful for testing.
- */
-final class NullCpuCoreFinder implements CpuCoreFinder
-{
- public function diagnose(): string
- {
- return 'Will return "null".';
- }
-
- public function find(): ?int
- {
- return null;
- }
-
- public function toString(): string
- {
- return 'NullCpuCoreFinder';
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php
deleted file mode 100644
index 31478083..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php
+++ /dev/null
@@ -1,113 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use function implode;
-use function sprintf;
-use const PHP_OS_FAMILY;
-
-final class OnlyOnOSFamilyFinder implements CpuCoreFinder
-{
- /**
- * @var list
- */
- private $skippedOSFamilies;
-
- /**
- * @var CpuCoreFinder
- */
- private $decoratedFinder;
-
- /**
- * @param string|list $skippedOSFamilyOrFamilies
- */
- public function __construct(
- $skippedOSFamilyOrFamilies,
- CpuCoreFinder $decoratedFinder
- ) {
- $this->skippedOSFamilies = (array) $skippedOSFamilyOrFamilies;
- $this->decoratedFinder = $decoratedFinder;
- }
-
- public static function forWindows(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'Windows',
- $decoratedFinder
- );
- }
-
- public static function forBSD(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'BSD',
- $decoratedFinder
- );
- }
-
- public static function forDarwin(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'Darwin',
- $decoratedFinder
- );
- }
-
- public static function forSolaris(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'Solaris',
- $decoratedFinder
- );
- }
-
- public static function forLinux(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'Linux',
- $decoratedFinder
- );
- }
-
- public function diagnose(): string
- {
- return $this->skip()
- ? sprintf(
- 'Skipped platform detected ("%s").',
- PHP_OS_FAMILY
- )
- : $this->decoratedFinder->diagnose();
- }
-
- public function find(): ?int
- {
- return $this->skip()
- ? null
- : $this->decoratedFinder->find();
- }
-
- public function toString(): string
- {
- return sprintf(
- 'OnlyOnOSFamilyFinder(only=(%s),%s)',
- implode(',', $this->skippedOSFamilies),
- $this->decoratedFinder->toString()
- );
- }
-
- private function skip(): bool
- {
- return !in_array(PHP_OS_FAMILY, $this->skippedOSFamilies, true);
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php
deleted file mode 100644
index 793ec647..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php
+++ /dev/null
@@ -1,104 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use Fidry\CpuCoreCounter\Executor\ProcessExecutor;
-use Fidry\CpuCoreCounter\Executor\ProcOpenExecutor;
-use function filter_var;
-use function function_exists;
-use function is_int;
-use function sprintf;
-use function trim;
-use const FILTER_VALIDATE_INT;
-use const PHP_EOL;
-
-abstract class ProcOpenBasedFinder implements CpuCoreFinder
-{
- /**
- * @var ProcessExecutor
- */
- private $executor;
-
- public function __construct(?ProcessExecutor $executor = null)
- {
- $this->executor = $executor ?? new ProcOpenExecutor();
- }
-
- public function diagnose(): string
- {
- if (!function_exists('proc_open')) {
- return 'The function "proc_open" is not available.';
- }
-
- $command = $this->getCommand();
- $output = $this->executor->execute($command);
-
- if (null === $output) {
- return sprintf(
- 'Failed to execute the command "%s".',
- $command
- );
- }
-
- [$stdout, $stderr] = $output;
- $failed = '' !== trim($stderr);
-
- return $failed
- ? sprintf(
- 'Executed the command "%s" which wrote the following output to the STDERR:%s%s',
- $command,
- PHP_EOL,
- $stderr
- )
- : sprintf(
- 'Executed the command "%s" and got the following (STDOUT) output:%s%s',
- $command,
- PHP_EOL,
- $stdout
- );
- }
-
- /**
- * @return positive-int|null
- */
- public function find(): ?int
- {
- $output = $this->executor->execute($this->getCommand());
-
- if (null === $output) {
- return null;
- }
-
- [$stdout, $stderr] = $output;
- $failed = '' !== trim($stderr);
-
- return $failed
- ? null
- : $this->countCpuCores($stdout);
- }
-
- /**
- * @internal
- *
- * @return positive-int|null
- */
- protected function countCpuCores(string $process): ?int
- {
- $cpuCount = filter_var($process, FILTER_VALIDATE_INT);
-
- return is_int($cpuCount) && $cpuCount > 0 ? $cpuCount : null;
- }
-
- abstract protected function getCommand(): string;
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php
deleted file mode 100644
index 66a50164..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php
+++ /dev/null
@@ -1,113 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use function implode;
-use function in_array;
-use function sprintf;
-
-final class SkipOnOSFamilyFinder implements CpuCoreFinder
-{
- /**
- * @var list
- */
- private $skippedOSFamilies;
-
- /**
- * @var CpuCoreFinder
- */
- private $decoratedFinder;
-
- /**
- * @param string|list $skippedOSFamilyOrFamilies
- */
- public function __construct(
- $skippedOSFamilyOrFamilies,
- CpuCoreFinder $decoratedFinder
- ) {
- $this->skippedOSFamilies = (array) $skippedOSFamilyOrFamilies;
- $this->decoratedFinder = $decoratedFinder;
- }
-
- public static function forWindows(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'Windows',
- $decoratedFinder
- );
- }
-
- public static function forBSD(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'BSD',
- $decoratedFinder
- );
- }
-
- public static function forDarwin(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'Darwin',
- $decoratedFinder
- );
- }
-
- public static function forSolaris(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'Solaris',
- $decoratedFinder
- );
- }
-
- public static function forLinux(CpuCoreFinder $decoratedFinder): self
- {
- return new self(
- 'Linux',
- $decoratedFinder
- );
- }
-
- public function diagnose(): string
- {
- return $this->skip()
- ? sprintf(
- 'Skipped platform detected ("%s").',
- PHP_OS_FAMILY
- )
- : $this->decoratedFinder->diagnose();
- }
-
- public function find(): ?int
- {
- return $this->skip()
- ? null
- : $this->decoratedFinder->find();
- }
-
- public function toString(): string
- {
- return sprintf(
- 'SkipOnOSFamilyFinder(skip=(%s),%s)',
- implode(',', $this->skippedOSFamilies),
- $this->decoratedFinder->toString()
- );
- }
-
- private function skip(): bool
- {
- return in_array(PHP_OS_FAMILY, $this->skippedOSFamilies, true);
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php
deleted file mode 100644
index db576a64..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php
+++ /dev/null
@@ -1,47 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use function preg_match;
-
-/**
- * Find the number of logical CPU cores for Windows.
- *
- * @see https://github.com/paratestphp/paratest/blob/c163539818fd96308ca8dc60f46088461e366ed4/src/Runners/PHPUnit/Options.php#L912-L916
- */
-final class WmicLogicalFinder extends ProcOpenBasedFinder
-{
- private const CPU_CORE_COUNT_REGEX = '/NumberOfLogicalProcessors[\s\n]+(?\d+)/';
-
- protected function getCommand(): string
- {
- return 'wmic cpu get NumberOfLogicalProcessors';
- }
-
- public function toString(): string
- {
- return 'WmicLogicalFinder';
- }
-
- protected function countCpuCores(string $process): ?int
- {
- if (0 === preg_match(self::CPU_CORE_COUNT_REGEX, $process, $matches)) {
- return parent::countCpuCores($process);
- }
-
- $count = $matches['count'];
-
- return parent::countCpuCores($count);
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php
deleted file mode 100644
index 140b9fdb..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php
+++ /dev/null
@@ -1,47 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-use function preg_match;
-
-/**
- * Find the number of physical CPU cores for Windows.
- *
- * @see https://github.com/paratestphp/paratest/blob/c163539818fd96308ca8dc60f46088461e366ed4/src/Runners/PHPUnit/Options.php#L912-L916
- */
-final class WmicPhysicalFinder extends ProcOpenBasedFinder
-{
- private const CPU_CORE_COUNT_REGEX = '/NumberOfCores[\s\n]+(?\d+)/';
-
- protected function getCommand(): string
- {
- return 'wmic cpu get NumberOfCores';
- }
-
- public function toString(): string
- {
- return 'WmicPhysicalFinder';
- }
-
- protected function countCpuCores(string $process): ?int
- {
- if (0 === preg_match(self::CPU_CORE_COUNT_REGEX, $process, $matches)) {
- return parent::countCpuCores($process);
- }
-
- $count = $matches['count'];
-
- return parent::countCpuCores($count);
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php b/vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php
deleted file mode 100644
index 23f452e4..00000000
--- a/vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php
+++ /dev/null
@@ -1,32 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter\Finder;
-
-/**
- * Find the number of logical CPU cores for Linux and the likes.
- *
- * @see https://twitter.com/freebsdfrau/status/1052016199452700678?s=20&t=M2pHkRqmmna-UF68lfL2hw
- */
-final class _NProcessorFinder extends ProcOpenBasedFinder
-{
- protected function getCommand(): string
- {
- return 'getconf _NPROCESSORS_ONLN';
- }
-
- public function toString(): string
- {
- return '_NProcessorFinder';
- }
-}
diff --git a/vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php b/vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php
deleted file mode 100644
index e54f8931..00000000
--- a/vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php
+++ /dev/null
@@ -1,26 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-declare(strict_types=1);
-
-namespace Fidry\CpuCoreCounter;
-
-use RuntimeException;
-
-final class NumberOfCpuCoreNotFound extends RuntimeException
-{
- public static function create(): self
- {
- return new self(
- 'Could not find the number of CPU cores available.'
- );
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/LICENSE.txt b/vendor/microsoft/tolerant-php-parser/LICENSE.txt
deleted file mode 100644
index 79918eb7..00000000
--- a/vendor/microsoft/tolerant-php-parser/LICENSE.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Copyright (c) Microsoft Corporation
-
-All rights reserved.
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
-modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
-OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/microsoft/tolerant-php-parser/ThirdPartyNotices.txt b/vendor/microsoft/tolerant-php-parser/ThirdPartyNotices.txt
deleted file mode 100644
index d712c991..00000000
--- a/vendor/microsoft/tolerant-php-parser/ThirdPartyNotices.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Microsoft/tolerant-php-parser
-
-THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
-Do Not Translate or Localize
-
-This project incorporates components from the projects listed below. The original copyright notices and the licenses under which Microsoft received such components are set forth below. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise.
-
-1. php/php-langspec (https://github.com/php/php-langspec)
-
-
-%% php/php-langspec NOTICES AND INFORMATION BEGIN HERE
-=========================================
-Facebook has dedicated all copyright to this specification to the public
-domain worldwide under the CC0 Public Domain Dedication located at
-.
-
-The first draft of this specification was initially written in 2014 by
-Facebook, Inc.
-
-This specification is distributed without any warranty.
-=========================================
-END OF php/php-langspec NOTICES AND INFORMATION
diff --git a/vendor/microsoft/tolerant-php-parser/composer.json b/vendor/microsoft/tolerant-php-parser/composer.json
deleted file mode 100644
index 91df816a..00000000
--- a/vendor/microsoft/tolerant-php-parser/composer.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "microsoft/tolerant-php-parser",
- "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios",
- "type": "library",
- "require": {
- "php": ">=7.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5.15"
- },
- "license": "MIT",
- "authors": [
- {
- "name": "Rob Lourens",
- "email": "roblou@microsoft.com"
- }
- ],
- "autoload": {
- "psr-4": { "Microsoft\\PhpParser\\": ["src/"] }
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/CharacterCodes.php b/vendor/microsoft/tolerant-php-parser/src/CharacterCodes.php
deleted file mode 100644
index c411ed60..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/CharacterCodes.php
+++ /dev/null
@@ -1,116 +0,0 @@
-
- const _hash = 0x23; // #
- const _lessThan = 0x3C; // <
- const _minus = 0x2D; // -
- const _openBrace = 0x7B; // {
- const _openBracket = 0x5B; // [
- const _openParen = 0x28; // (
- const _percent = 0x25; // %
- const _plus = 0x2B; // +
- const _question = 0x3F; // ?
- const _semicolon = 0x3B; // ;
- const _singleQuote = 0x27; // '
- const _slash = 0x2F; // /
- const _tilde = 0x7E; // ~
-
- const _backspace = 0x08; // \b
- const _formFeed = 0x0C; // \f
- const _byteOrderMark = 0xFEFF;
- const _space = 0x20;
- const _newline = 0x0A; // \n
- const _return = 0x0D; // \r
- const _tab = 0x09; // \t
- const _verticalTab = 0x0B; // \v
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/ClassLike.php b/vendor/microsoft/tolerant-php-parser/src/ClassLike.php
deleted file mode 100644
index 08b7fa8d..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/ClassLike.php
+++ /dev/null
@@ -1,12 +0,0 @@
-kind = $kind;
- $this->message = $message;
- $this->start = $start;
- $this->length = $length;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/DiagnosticKind.php b/vendor/microsoft/tolerant-php-parser/src/DiagnosticKind.php
deleted file mode 100644
index 012db9d0..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/DiagnosticKind.php
+++ /dev/null
@@ -1,12 +0,0 @@
-getDiagnosticForNode();
- }
- return null;
- }
-
- /**
- * @param Token $token
- * @return Diagnostic|null
- */
- private static function checkDiagnosticForUnexpectedToken($token) {
- if ($token instanceof SkippedToken) {
- // TODO - consider also attaching parse context information to skipped tokens
- // this would allow us to provide more helpful error messages that inform users what to do
- // about the problem rather than simply pointing out the mistake.
- return new Diagnostic(
- DiagnosticKind::Error,
- "Unexpected '" .
- (self::$tokenKindToText[$token->kind]
- ?? Token::getTokenKindNameFromValue($token->kind)) .
- "'",
- $token->start,
- $token->getEndPosition() - $token->start
- );
- } elseif ($token instanceof MissingToken) {
- return new Diagnostic(
- DiagnosticKind::Error,
- "'" .
- (self::$tokenKindToText[$token->kind]
- ?? Token::getTokenKindNameFromValue($token->kind)) .
- "' expected.",
- $token->start,
- $token->getEndPosition() - $token->start
- );
- }
- return null;
- }
-
- /**
- * Traverses AST to generate diagnostics.
- * @param \Microsoft\PhpParser\Node $n
- * @return Diagnostic[]
- */
- public static function getDiagnostics(Node $n) : array {
- $diagnostics = [];
-
- /**
- * @param \Microsoft\PhpParser\Node|\Microsoft\PhpParser\Token $node
- */
- $n->walkDescendantNodesAndTokens(function($node) use (&$diagnostics) {
- if (($diagnostic = self::checkDiagnostics($node)) !== null) {
- $diagnostics[] = $diagnostic;
- }
- });
-
- return $diagnostics;
- }
-}
-
-DiagnosticsProvider::initTokenKindToText();
diff --git a/vendor/microsoft/tolerant-php-parser/src/FilePositionMap.php b/vendor/microsoft/tolerant-php-parser/src/FilePositionMap.php
deleted file mode 100644
index c6c9f479..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/FilePositionMap.php
+++ /dev/null
@@ -1,115 +0,0 @@
-currentOffset (updated whenever currentOffset is updated) */
- private $lineForCurrentOffset;
-
- public function __construct(string $file_contents) {
- $this->fileContents = $file_contents;
- $this->fileContentsLength = \strlen($file_contents);
- $this->currentOffset = 0;
- $this->lineForCurrentOffset = 1;
- }
-
- /**
- * @param Node|Token $node
- */
- public function getStartLine($node) : int {
- return $this->getLineNumberForOffset($node->getStartPosition());
- }
-
- /**
- * @param Node|Token $node
- * Similar to getStartLine but includes the column
- */
- public function getStartLineCharacterPositionForOffset($node) : LineCharacterPosition {
- return $this->getLineCharacterPositionForOffset($node->getStartPosition());
- }
-
- /** @param Node|Token $node */
- public function getEndLine($node) : int {
- return $this->getLineNumberForOffset($node->getEndPosition());
- }
-
- /**
- * @param Node|Token $node
- * Similar to getStartLine but includes the column
- */
- public function getEndLineCharacterPosition($node) : LineCharacterPosition {
- return $this->getLineCharacterPositionForOffset($node->getEndPosition());
- }
-
- /**
- * @param int $offset
- * Similar to getStartLine but includes both the line and the column
- */
- public function getLineCharacterPositionForOffset(int $offset) : LineCharacterPosition {
- $line = $this->getLineNumberForOffset($offset);
- $character = $this->getColumnForOffset($offset);
- return new LineCharacterPosition($line, $character);
- }
-
- /**
- * @param int $offset - A 0-based byte offset
- * @return int - gets the 1-based line number for $offset
- */
- public function getLineNumberForOffset(int $offset) : int {
- if ($offset < 0) {
- $offset = 0;
- } elseif ($offset > $this->fileContentsLength) {
- $offset = $this->fileContentsLength;
- }
- $currentOffset = $this->currentOffset;
- if ($offset > $currentOffset) {
- $this->lineForCurrentOffset += \substr_count($this->fileContents, "\n", $currentOffset, $offset - $currentOffset);
- $this->currentOffset = $offset;
- } elseif ($offset < $currentOffset) {
- $this->lineForCurrentOffset -= \substr_count($this->fileContents, "\n", $offset, $currentOffset - $offset);
- $this->currentOffset = $offset;
- }
- return $this->lineForCurrentOffset;
- }
-
- /**
- * @param int $offset - A 0-based byte offset
- * @return int - gets the 1-based column number for $offset
- */
- public function getColumnForOffset(int $offset) : int {
- $length = $this->fileContentsLength;
- if ($offset <= 1) {
- return 1;
- } elseif ($offset > $length) {
- $offset = $length;
- }
- // Postcondition: offset >= 1, ($lastNewlinePos < $offset)
- // If there was no previous newline, lastNewlinePos = 0
-
- // Start strrpos check from the character before the current character,
- // in case the current character is a newline.
- $lastNewlinePos = \strrpos($this->fileContents, "\n", -$length + $offset - 1);
- return 1 + $offset - ($lastNewlinePos === false ? 0 : $lastNewlinePos + 1);
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/FunctionLike.php b/vendor/microsoft/tolerant-php-parser/src/FunctionLike.php
deleted file mode 100644
index 5ef91b52..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/FunctionLike.php
+++ /dev/null
@@ -1,17 +0,0 @@
-line = $line;
- $this->character = $character;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/MissingToken.php b/vendor/microsoft/tolerant-php-parser/src/MissingToken.php
deleted file mode 100644
index 177b46be..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/MissingToken.php
+++ /dev/null
@@ -1,23 +0,0 @@
- $this->getTokenKindNameFromValue(TokenKind::MissingToken)],
- parent::jsonSerialize()
- );
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/ModifiedTypeInterface.php b/vendor/microsoft/tolerant-php-parser/src/ModifiedTypeInterface.php
deleted file mode 100644
index f04ca238..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/ModifiedTypeInterface.php
+++ /dev/null
@@ -1,16 +0,0 @@
-modifiers === null) {
- return false;
- }
-
- foreach ($this->modifiers as $modifier) {
- if ($modifier->kind === $targetModifier) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Convenience method to check for the existence of the "public" modifier.
- * Does not necessarily need to be defined for that type.
- *
- * @return bool
- */
- public function isPublic(): bool {
- return $this->hasModifier(TokenKind::PublicKeyword);
- }
-
- /**
- * Convenience method to check for the existence of the "static" modifier.
- * Does not necessarily need to be defined for that type.
- *
- * @return bool
- */
- public function isStatic(): bool {
- return $this->hasModifier(TokenKind::StaticKeyword);
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/NamespacedNameInterface.php b/vendor/microsoft/tolerant-php-parser/src/NamespacedNameInterface.php
deleted file mode 100644
index d4431d50..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/NamespacedNameInterface.php
+++ /dev/null
@@ -1,11 +0,0 @@
-getNamespaceDefinition();
- $content = $this->getFileContents();
- if ($namespaceDefinition === null) {
- // global namespace -> strip namespace\ prefix
- return ResolvedName::buildName($this->getNameParts(), $content);
- }
-
- if ($namespaceDefinition->name instanceof QualifiedName) {
- $resolvedName = ResolvedName::buildName($namespaceDefinition->name->nameParts, $content);
- } else {
- $resolvedName = ResolvedName::buildName([], $content);
- }
- if (
- !($this instanceof QualifiedName && (
- ($this->parent instanceof NamespaceDefinition) ||
- ($this->parent instanceof NamespaceUseDeclaration) ||
- ($this->parent instanceof NamespaceUseClause) ||
- ($this->parent instanceof NamespaceUseGroupClause)))
- ) {
- $resolvedName->addNameParts($this->getNameParts(), $content);
- }
- return $resolvedName;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node.php b/vendor/microsoft/tolerant-php-parser/src/Node.php
deleted file mode 100644
index bcc88731..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node.php
+++ /dev/null
@@ -1,686 +0,0 @@
-getChildNodesAndTokens()->current()->getStartPosition();
- }
-
- /**
- * Gets start position of Node, including leading comments and whitespace
- * @return int
- * @throws \Exception
- */
- public function getFullStartPosition() : int {
- foreach($this::CHILD_NAMES as $name) {
-
- if (($child = $this->$name) !== null) {
-
- if (\is_array($child)) {
- if(!isset($child[0])) {
- continue;
- }
- $child = $child[0];
- }
-
- return $child->getFullStartPosition();
- }
- };
-
- throw new \RuntimeException("Could not resolve full start position");
- }
-
- /**
- * Gets parent of current node (returns null if has no parent)
- * @return null|Node
- */
- public function getParent() {
- return $this->parent;
- }
-
- /**
- * Gets first ancestor that is an instance of one of the provided classes.
- * Returns null if there is no match.
- *
- * @param string ...$classNames
- * @return Node|null
- */
- public function getFirstAncestor(...$classNames) {
- $ancestor = $this;
- while (($ancestor = $ancestor->parent) !== null) {
- foreach ($classNames as $className) {
- if ($ancestor instanceof $className) {
- return $ancestor;
- }
- }
- }
- return null;
- }
-
- /**
- * Gets first child that is an instance of one of the provided classes.
- * Returns null if there is no match.
- *
- * @param string ...$classNames
- * @return Node|null
- */
- public function getFirstChildNode(...$classNames) {
- foreach ($this::CHILD_NAMES as $name) {
- $val = $this->$name;
- foreach ($classNames as $className) {
- if (\is_array($val)) {
- foreach ($val as $child) {
- if ($child instanceof $className) {
- return $child;
- }
- }
- continue;
- } elseif ($val instanceof $className) {
- return $val;
- }
- }
- }
- return null;
- }
-
- /**
- * Gets first descendant node that is an instance of one of the provided classes.
- * Returns null if there is no match.
- *
- * @param string ...$classNames
- * @return Node|null
- */
- public function getFirstDescendantNode(...$classNames) {
- foreach ($this->getDescendantNodes() as $descendant) {
- foreach ($classNames as $className) {
- if ($descendant instanceof $className) {
- return $descendant;
- }
- }
- }
- return null;
- }
-
- /**
- * Gets root of the syntax tree (returns self if has no parents)
- * @return SourceFileNode (expect root to be SourceFileNode unless the tree was manipulated)
- */
- public function getRoot() : Node {
- $node = $this;
- while ($node->parent !== null) {
- $node = $node->parent;
- }
- return $node;
- }
-
- /**
- * Gets generator containing all descendant Nodes and Tokens.
- *
- * @param callable|null $shouldDescendIntoChildrenFn
- * @return \Generator|Node[]|Token[]
- */
- public function getDescendantNodesAndTokens(callable $shouldDescendIntoChildrenFn = null) {
- // TODO - write unit tests to prove invariants
- // (concatenating all descendant Tokens should produce document, concatenating all Nodes should produce document)
- foreach ($this->getChildNodesAndTokens() as $child) {
- // Check possible types of $child, most frequent first
- if ($child instanceof Node) {
- yield $child;
- if ($shouldDescendIntoChildrenFn === null || $shouldDescendIntoChildrenFn($child)) {
- yield from $child->getDescendantNodesAndTokens($shouldDescendIntoChildrenFn);
- }
- } elseif ($child instanceof Token) {
- yield $child;
- }
- }
- }
-
- /**
- * Iterate over all descendant Nodes and Tokens, calling $callback.
- * This can often be faster than getDescendantNodesAndTokens
- * if you just need to call something and don't need a generator.
- *
- * @param callable $callback a callback that accepts Node|Token
- * @param callable|null $shouldDescendIntoChildrenFn
- * @return void
- */
- public function walkDescendantNodesAndTokens(callable $callback, callable $shouldDescendIntoChildrenFn = null) {
- // TODO - write unit tests to prove invariants
- // (concatenating all descendant Tokens should produce document, concatenating all Nodes should produce document)
- foreach (static::CHILD_NAMES as $name) {
- $child = $this->$name;
- // Check possible types of $child, most frequent first
- if ($child instanceof Token) {
- $callback($child);
- } elseif ($child instanceof Node) {
- $callback($child);
- if ($shouldDescendIntoChildrenFn === null || $shouldDescendIntoChildrenFn($child)) {
- $child->walkDescendantNodesAndTokens($callback, $shouldDescendIntoChildrenFn);
- }
- } elseif (\is_array($child)) {
- foreach ($child as $childElement) {
- if ($childElement instanceof Token) {
- $callback($childElement);
- } elseif ($childElement instanceof Node) {
- $callback($childElement);
- if ($shouldDescendIntoChildrenFn === null || $shouldDescendIntoChildrenFn($childElement)) {
- $childElement->walkDescendantNodesAndTokens($callback, $shouldDescendIntoChildrenFn);
- }
- }
- }
- }
- }
- }
-
- /**
- * Gets a generator containing all descendant Nodes.
- * @param callable|null $shouldDescendIntoChildrenFn
- * @return \Generator|Node[]
- */
- public function getDescendantNodes(callable $shouldDescendIntoChildrenFn = null) {
- foreach ($this->getChildNodes() as $child) {
- yield $child;
- if ($shouldDescendIntoChildrenFn === null || $shouldDescendIntoChildrenFn($child)) {
- yield from $child->getDescendantNodes($shouldDescendIntoChildrenFn);
- }
- }
- }
-
- /**
- * Gets generator containing all descendant Tokens.
- * @param callable|null $shouldDescendIntoChildrenFn
- * @return \Generator|Token[]
- */
- public function getDescendantTokens(callable $shouldDescendIntoChildrenFn = null) {
- foreach ($this->getChildNodesAndTokens() as $child) {
- if ($child instanceof Node) {
- if ($shouldDescendIntoChildrenFn == null || $shouldDescendIntoChildrenFn($child)) {
- yield from $child->getDescendantTokens($shouldDescendIntoChildrenFn);
- }
- } elseif ($child instanceof Token) {
- yield $child;
- }
- }
- }
-
- /**
- * Gets generator containing all child Nodes and Tokens (direct descendants).
- * Does not return null elements.
- *
- * @return \Generator|Token[]|Node[]
- */
- public function getChildNodesAndTokens() : \Generator {
- foreach ($this::CHILD_NAMES as $name) {
- $val = $this->$name;
-
- if (\is_array($val)) {
- foreach ($val as $child) {
- if ($child !== null) {
- yield $name => $child;
- }
- }
- continue;
- }
- if ($val !== null) {
- yield $name => $val;
- }
- }
- }
-
- /**
- * Gets generator containing all child Nodes (direct descendants)
- * @return \Generator|Node[]
- */
- public function getChildNodes() : \Generator {
- foreach ($this::CHILD_NAMES as $name) {
- $val = $this->$name;
- if (\is_array($val)) {
- foreach ($val as $child) {
- if ($child instanceof Node) {
- yield $child;
- }
- }
- continue;
- } elseif ($val instanceof Node) {
- yield $val;
- }
- }
- }
-
- /**
- * Gets generator containing all child Tokens (direct descendants)
- *
- * @return \Generator|Token[]
- */
- public function getChildTokens() {
- foreach ($this::CHILD_NAMES as $name) {
- $val = $this->$name;
- if (\is_array($val)) {
- foreach ($val as $child) {
- if ($child instanceof Token) {
- yield $child;
- }
- }
- continue;
- } elseif ($val instanceof Token) {
- yield $val;
- }
- }
- }
-
- /**
- * Gets array of declared child names (cached).
- *
- * This is used as an optimization when iterating over nodes: For direct iteration
- * PHP will create a properties hashtable on the object, thus doubling memory usage.
- * We avoid this by iterating over just the names instead.
- *
- * @return string[]
- */
- public function getChildNames() {
- return $this::CHILD_NAMES;
- }
-
- /**
- * Gets width of a Node (not including comment / whitespace trivia)
- *
- * @return int
- */
- public function getWidth() : int {
- $first = $this->getStartPosition();
- $last = $this->getEndPosition();
-
- return $last - $first;
- }
-
- /**
- * Gets width of a Node (including comment / whitespace trivia)
- *
- * @return int
- */
- public function getFullWidth() : int {
- $first = $this->getFullStartPosition();
- $last = $this->getEndPosition();
-
- return $last - $first;
- }
-
- /**
- * Gets string representing Node text (not including leading comment + whitespace trivia)
- * @return string
- */
- public function getText() : string {
- $start = $this->getStartPosition();
- $end = $this->getEndPosition();
-
- $fileContents = $this->getFileContents();
- return \substr($fileContents, $start, $end - $start);
- }
-
- /**
- * Gets full text of Node (including leading comment + whitespace trivia)
- * @return string
- */
- public function getFullText() : string {
- $start = $this->getFullStartPosition();
- $end = $this->getEndPosition();
-
- $fileContents = $this->getFileContents();
- return \substr($fileContents, $start, $end - $start);
-
- }
-
- /**
- * Gets string representing Node's leading comment and whitespace text.
- * @return string
- */
- public function getLeadingCommentAndWhitespaceText() : string {
- // TODO re-tokenize comments and whitespace
- $fileContents = $this->getFileContents();
- foreach ($this->getDescendantTokens() as $token) {
- return $token->getLeadingCommentsAndWhitespaceText($fileContents);
- }
- return '';
- }
-
- protected function getChildrenKvPairs() {
- $result = [];
- foreach ($this::CHILD_NAMES as $name) {
- $result[$name] = $this->$name;
- }
- return $result;
- }
-
- #[ReturnTypeWillChange]
- public function jsonSerialize() {
- $kindName = $this->getNodeKindName();
- return ["$kindName" => $this->getChildrenKvPairs()];
- }
-
- /**
- * Get the end index of a Node.
- * @return int
- * @throws \Exception
- */
- public function getEndPosition() {
- // TODO test invariant - start of next node is end of previous node
- for ($i = \count($childKeys = $this::CHILD_NAMES) - 1; $i >= 0; $i--) {
- $lastChildKey = $childKeys[$i];
- $lastChild = $this->$lastChildKey;
-
- if (\is_array($lastChild)) {
- $lastChild = \end($lastChild);
- }
-
- if ($lastChild instanceof Token) {
- return $lastChild->fullStart + $lastChild->length;
- } elseif ($lastChild instanceof Node) {
- return $lastChild->getEndPosition();
- }
- }
-
- throw new \Exception("Unhandled node type");
- }
-
- public function getFileContents() : string {
- // TODO consider renaming to getSourceText
- return $this->getRoot()->fileContents;
- }
-
- public function getUri() : ?string {
- return $this->getRoot()->uri;
- }
-
- public function getLastChild() {
- $a = iterator_to_array($this->getChildNodesAndTokens());
- return \end($a);
- }
-
- /**
- * Searches descendants to find a Node at the given position.
- *
- * @param int $pos
- * @return Node
- */
- public function getDescendantNodeAtPosition(int $pos) {
- foreach ($this->getChildNodes() as $child) {
- if ($child->containsPosition($pos)) {
- $node = $child->getDescendantNodeAtPosition($pos);
- if (!is_null($node)) {
- return $node;
- }
- }
- }
-
- return $this;
- }
-
- /**
- * Returns true if the given Node or Token contains the given position.
- * @param int $pos
- * @return bool
- */
- private function containsPosition(int $pos): bool {
- return $this->getStartPosition() <= $pos && $pos <= $this->getEndPosition();
- }
-
- /**
- * Gets leading PHP Doc Comment text corresponding to the current Node.
- * Returns last doc comment in leading comment / whitespace trivia,
- * and returns null if there is no preceding doc comment.
- *
- * @return string|null
- */
- public function getDocCommentText() {
- $leadingTriviaText = $this->getLeadingCommentAndWhitespaceText();
- $leadingTriviaTokens = PhpTokenizer::getTokensArrayFromContent(
- $leadingTriviaText, ParseContext::SourceElements, $this->getFullStartPosition(), false
- );
- for ($i = \count($leadingTriviaTokens) - 1; $i >= 0; $i--) {
- $token = $leadingTriviaTokens[$i];
- if ($token->kind === TokenKind::DocCommentToken) {
- return $token->getText($this->getFileContents());
- }
- }
- return null;
- }
-
- public function __toString() {
- return $this->getText();
- }
-
- /**
- * @return array|ResolvedName[][]
- * @throws \Exception
- */
- public function getImportTablesForCurrentScope() {
- $namespaceDefinition = $this->getNamespaceDefinition();
-
- // Use declarations can exist in either the global scope, or inside namespace declarations.
- // http://php.net/manual/en/language.namespaces.importing.php#language.namespaces.importing.scope
- //
- // The only code allowed before a namespace declaration is a declare statement, and sub-namespaces are
- // additionally unaffected by by import rules of higher-level namespaces. Therefore, we can make the assumption
- // that we need not travel up the spine any further once we've found the current namespace.
- // http://php.net/manual/en/language.namespaces.definition.php
- if ($namespaceDefinition instanceof NamespaceDefinition) {
- $topLevelNamespaceStatements = $namespaceDefinition->compoundStatementOrSemicolon instanceof Token
- ? $namespaceDefinition->parent->statementList // we need to start from the namespace definition.
- : $namespaceDefinition->compoundStatementOrSemicolon->statements;
- $namespaceFullStart = $namespaceDefinition->getFullStartPosition();
- } else {
- $topLevelNamespaceStatements = $this->getRoot()->statementList;
- $namespaceFullStart = 0;
- }
-
- $nodeFullStart = $this->getFullStartPosition();
-
- // TODO optimize performance
- // Currently we rebuild the import tables on every call (and therefore every name resolution operation)
- // It is likely that a consumer will attempt many consecutive name resolution requests within the same file.
- // Therefore, we can consider optimizing on the basis of the "most recently used" import table set.
- // The idea: Keep a single set of import tables cached based on a unique root node id, and invalidate
- // cache whenever we attempt to resolve a qualified name with a different root node.
- //
- // In order to make this work, it will probably make sense to change the way we parse namespace definitions.
- // https://github.com/Microsoft/tolerant-php-parser/issues/81
- //
- // Currently the namespace definition only includes a compound statement or semicolon token as one if it's children.
- // Instead, we should move to a model where we parse future statements as a child rather than as a separate
- // statement. This would enable us to retrieve all the information we would need to find the fully qualified
- // name by simply traveling up the spine to find the first ancestor of type NamespaceDefinition.
- $namespaceImportTable = $functionImportTable = $constImportTable = [];
- $contents = $this->getFileContents();
-
- foreach ($topLevelNamespaceStatements as $useDeclaration) {
- if ($useDeclaration->getFullStartPosition() <= $namespaceFullStart) {
- continue;
- }
- if ($useDeclaration->getFullStartPosition() > $nodeFullStart) {
- break;
- } elseif (!($useDeclaration instanceof NamespaceUseDeclaration)) {
- continue;
- }
-
- // TODO fix getValues
- foreach ((isset($useDeclaration->useClauses) ? $useDeclaration->useClauses->getValues() : []) as $useClause) {
- $namespaceNamePartsPrefix = $useClause->namespaceName !== null ? $useClause->namespaceName->nameParts : [];
-
- if ($useClause->groupClauses !== null && $useClause instanceof NamespaceUseClause) {
- // use A\B\C\{D\E}; namespace import: ["E" => [A,B,C,D,E]]
- // use A\B\C\{D\E as F}; namespace import: ["F" => [A,B,C,D,E]]
- // use function A\B\C\{A, B} function import: ["A" => [A,B,C,A], "B" => [A,B,C]]
- // use function A\B\C\{const A} const import: ["A" => [A,B,C,A]]
- foreach ($useClause->groupClauses->children as $groupClause) {
- if (!($groupClause instanceof NamespaceUseGroupClause)) {
- continue;
- }
- $namespaceNameParts = \array_merge($namespaceNamePartsPrefix, $groupClause->namespaceName->nameParts);
- $functionOrConst = $groupClause->functionOrConst ?? $useDeclaration->functionOrConst;
- $alias = $groupClause->namespaceAliasingClause === null
- ? $groupClause->namespaceName->getLastNamePart()->getText($contents)
- : $groupClause->namespaceAliasingClause->name->getText($contents);
-
- $this->addToImportTable(
- $alias, $functionOrConst, $namespaceNameParts, $contents,
- $namespaceImportTable, $functionImportTable, $constImportTable
- );
- }
- } else {
- // use A\B\C; namespace import: ["C" => [A,B,C]]
- // use A\B\C as D; namespace import: ["D" => [A,B,C]]
- // use function A\B\C as D function import: ["D" => [A,B,C]]
- // use A\B, C\D; namespace import: ["B" => [A,B], "D" => [C,D]]
- $alias = $useClause->namespaceAliasingClause === null
- ? $useClause->namespaceName->getLastNamePart()->getText($contents)
- : $useClause->namespaceAliasingClause->name->getText($contents);
- $functionOrConst = $useDeclaration->functionOrConst;
- $namespaceNameParts = $namespaceNamePartsPrefix;
-
- $this->addToImportTable(
- $alias, $functionOrConst, $namespaceNameParts, $contents,
- $namespaceImportTable, $functionImportTable, $constImportTable
- );
- }
- }
- }
-
- return [$namespaceImportTable, $functionImportTable, $constImportTable];
- }
-
- /**
- * Gets corresponding NamespaceDefinition for Node. Returns null if in global namespace.
- *
- * @return NamespaceDefinition|null
- */
- public function getNamespaceDefinition() {
- $namespaceDefinition = ($this instanceof NamespaceDefinition || $this instanceof SourceFileNode)
- ? $this
- : $this->getFirstAncestor(NamespaceDefinition::class, SourceFileNode::class);
-
- if ($namespaceDefinition instanceof NamespaceDefinition && !($namespaceDefinition->parent instanceof SourceFileNode)) {
- $namespaceDefinition = $namespaceDefinition->getFirstAncestor(SourceFileNode::class);
- }
-
- if ($namespaceDefinition === null) {
- // TODO provide a way to throw errors without crashing consumer
- throw new \Exception("Invalid tree - SourceFileNode must always exist at root of tree.");
- }
-
- $fullStart = $this->getFullStartPosition();
- $lastNamespaceDefinition = null;
- if ($namespaceDefinition instanceof SourceFileNode) {
- foreach ($namespaceDefinition->getChildNodes() as $childNode) {
- if ($childNode instanceof NamespaceDefinition && $childNode->getFullStartPosition() < $fullStart) {
- $lastNamespaceDefinition = $childNode;
- }
- }
- }
-
- if ($lastNamespaceDefinition !== null && $lastNamespaceDefinition->compoundStatementOrSemicolon instanceof Token) {
- $namespaceDefinition = $lastNamespaceDefinition;
- } elseif ($namespaceDefinition instanceof SourceFileNode) {
- $namespaceDefinition = null;
- }
-
- return $namespaceDefinition;
- }
-
- public function getPreviousSibling() {
- // TODO make more efficient
- $parent = $this->parent;
- if ($parent === null) {
- return null;
- }
-
- $prevSibling = null;
-
- foreach ($parent::CHILD_NAMES as $name) {
- $val = $parent->$name;
- if (\is_array($val)) {
- foreach ($val as $sibling) {
- if ($sibling === $this) {
- return $prevSibling;
- } elseif ($sibling instanceof Node) {
- $prevSibling = $sibling;
- }
- }
- continue;
- } elseif ($val instanceof Node) {
- if ($val === $this) {
- return $prevSibling;
- }
- $prevSibling = $val;
- }
- }
- return null;
- }
-
- /**
- * Add the alias and resolved name to the corresponding namespace, function, or const import table.
- * If the alias already exists, it will get replaced by the most recent using.
- *
- * TODO - worth throwing an error here instead?
- */
- private function addToImportTable($alias, $functionOrConst, $namespaceNameParts, $contents, & $namespaceImportTable, & $functionImportTable, & $constImportTable):array
- {
- if ($alias !== null) {
- if ($functionOrConst === null) {
- // namespaces are case-insensitive
-// $alias = \strtolower($alias);
- $namespaceImportTable[$alias] = ResolvedName::buildName($namespaceNameParts, $contents);
- return [$namespaceImportTable, $functionImportTable, $constImportTable];
- } elseif ($functionOrConst->kind === TokenKind::FunctionKeyword) {
- // functions are case-insensitive
-// $alias = \strtolower($alias);
- $functionImportTable[$alias] = ResolvedName::buildName($namespaceNameParts, $contents);
- return [$namespaceImportTable, $functionImportTable, $constImportTable];
- } elseif ($functionOrConst->kind === TokenKind::ConstKeyword) {
- // constants are case-sensitive
- $constImportTable[$alias] = ResolvedName::buildName($namespaceNameParts, $contents);
- return [$namespaceImportTable, $functionImportTable, $constImportTable];
- }
- return [$namespaceImportTable, $functionImportTable, $constImportTable];
- }
- return [$namespaceImportTable, $functionImportTable, $constImportTable];
- }
-
- /**
- * This is overridden in subclasses
- * @return Diagnostic|null - Callers should use DiagnosticsProvider::getDiagnostics instead
- * @internal
- */
- public function getDiagnosticForNode() {
- return null;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/AnonymousFunctionUseClause.php b/vendor/microsoft/tolerant-php-parser/src/Node/AnonymousFunctionUseClause.php
deleted file mode 100644
index 26460ea6..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/AnonymousFunctionUseClause.php
+++ /dev/null
@@ -1,33 +0,0 @@
-name];
- }
-
- public function getName() {
- return $this->name->getText($this->getFileContents());
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/DeclareDirective.php b/vendor/microsoft/tolerant-php-parser/src/Node/DeclareDirective.php
deleted file mode 100644
index 55e9af21..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/DeclareDirective.php
+++ /dev/null
@@ -1,25 +0,0 @@
-children as $child) {
- if ($child instanceof Node) {
- yield $child;
- } elseif ($child instanceof Token && !\in_array($child->kind, self::DELIMITERS)) {
- yield $child;
- }
- }
- }
-
- public function getValues() {
- foreach ($this->children as $idx=>$value) {
- if ($idx % 2 == 0) {
- yield $value;
- }
- }
- }
-
- public function addElement($node) {
- if ($node === null) {
- return;
- }
- if ($this->children === null) {
- $this->children = [$node];
- return;
- }
- $this->children[] = $node;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/DelimitedList/ArgumentExpressionList.php b/vendor/microsoft/tolerant-php-parser/src/Node/DelimitedList/ArgumentExpressionList.php
deleted file mode 100644
index 0815ee5f..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/DelimitedList/ArgumentExpressionList.php
+++ /dev/null
@@ -1,12 +0,0 @@
-` */
- public $arrowToken;
-
- /** @var Node|Token */
- public $resultExpression;
-
- const CHILD_NAMES = [
- 'attributes',
- 'staticModifier',
-
- // FunctionHeader
- 'functionKeyword',
- 'byRefToken',
- 'name',
- 'openParen',
- 'parameters',
- 'closeParen',
-
- // FunctionReturnType
- 'colonToken',
- 'questionToken',
- 'returnTypeList',
-
- // body
- 'arrowToken',
- 'resultExpression',
- ];
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Expression/AssignmentExpression.php b/vendor/microsoft/tolerant-php-parser/src/Node/Expression/AssignmentExpression.php
deleted file mode 100644
index dc1683bc..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Expression/AssignmentExpression.php
+++ /dev/null
@@ -1,32 +0,0 @@
-name instanceof Token &&
- $name = ltrim($this->name->getText($this->getFileContents()), '$')
- ) {
- return $name;
- }
- return null;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Expression/YieldExpression.php b/vendor/microsoft/tolerant-php-parser/src/Node/Expression/YieldExpression.php
deleted file mode 100644
index 86bb8056..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Expression/YieldExpression.php
+++ /dev/null
@@ -1,21 +0,0 @@
-name->getText($this->getFileContents());
- }
-
- /**
- * @return Diagnostic|null - Callers should use DiagnosticsProvider::getDiagnostics instead
- * @internal
- * @override
- */
- public function getDiagnosticForNode() {
- foreach ($this->modifiers as $modifier) {
- if ($modifier->kind === TokenKind::VarKeyword) {
- return new Diagnostic(
- DiagnosticKind::Error,
- "Unexpected modifier '" . DiagnosticsProvider::getTextForTokenKind($modifier->kind) . "'",
- $modifier->start,
- $modifier->length
- );
- }
- }
- return null;
- }
-
- /**
- * Returns the signature parts as an array. Use $this::getSignatureFormatted for a user-friendly string version.
- *
- * @return array
- */
- private function getSignatureParts(): array {
- $parts = [];
-
- foreach ($this->getChildNodesAndTokens() as $i => $child) {
- if ($i === "compoundStatementOrSemicolon") {
- return $parts;
- }
-
- $parts[] = $child instanceof Token
- ? $child->getText($this->getFileContents())
- : $child->getText();
- };
-
- return $parts;
- }
-
- /**
- * Returns the signature of the method as a formatted string.
- *
- * @return string
- */
- public function getSignatureFormatted(): string {
- $signature = implode(" ", $this->getSignatureParts());
- return $signature;
- }
-
- /**
- * Returns the description part of the doc string.
- *
- * @return string
- */
- public function getDescriptionFormatted(): string {
- $comment = trim($this->getLeadingCommentAndWhitespaceText(), "\r\n");
- $commentParts = explode("\n", $comment);
-
- $description = [];
-
- foreach ($commentParts as $i => $part) {
- $part = trim($part, "*\r\t /");
-
- if (strlen($part) <= 0) {
- continue;
- }
-
- if ($part[0] === "@") {
- break;
- }
-
- $description[] = $part;
- }
-
- $descriptionFormatted = implode(" ", $description);
- return $descriptionFormatted;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/MissingDeclaration.php b/vendor/microsoft/tolerant-php-parser/src/Node/MissingDeclaration.php
deleted file mode 100644
index 82867e25..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/MissingDeclaration.php
+++ /dev/null
@@ -1,23 +0,0 @@
-byRefToken !== null;
- }
-
- public function getName() {
- if (
- $this->variableName instanceof Token &&
- $name = substr($this->variableName->getText($this->getFileContents()), 1)
- ) {
- return $name;
- }
- return null;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/ParenthesizedIntersectionType.php b/vendor/microsoft/tolerant-php-parser/src/Node/ParenthesizedIntersectionType.php
deleted file mode 100644
index a7afcd50..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/ParenthesizedIntersectionType.php
+++ /dev/null
@@ -1,29 +0,0 @@
-globalSpecifier);
- }
-
- /**
- * Checks whether a QualifiedName begins with a "namespace" keyword
- * @return bool
- */
- public function isRelativeName() : bool {
- return isset($this->relativeSpecifier);
- }
-
- /**
- * Checks whether a Name includes at least one namespace separator (and is neither fully-qualified nor relative)
- * @return bool
- */
- public function isQualifiedName() : bool {
- return
- !$this->isFullyQualifiedName() &&
- !$this->isRelativeName() &&
- \count($this->nameParts) > 1; // at least one namespace separator
- }
-
- /**
- * Checks whether a name is does not include a namespace separator.
- * @return bool
- */
- public function isUnqualifiedName() : bool {
- return !($this->isFullyQualifiedName() || $this->isRelativeName() || $this->isQualifiedName());
- }
-
- /**
- * Gets resolved name based on name resolution rules defined in:
- * http://php.net/manual/en/language.namespaces.rules.php
- *
- * Returns null if one of the following conditions is met:
- * - name resolution is not valid for this element (e.g. part of the name in a namespace definition)
- * - name cannot be resolved (unqualified namespaced function/constant names that are not explicitly imported.)
- *
- * @return null|string|ResolvedName
- * @throws \Exception
- */
- public function getResolvedName($namespaceDefinition = null) {
- // Name resolution not applicable to constructs that define symbol names or aliases.
- if (($this->parent instanceof Node\Statement\NamespaceDefinition && $this->parent->name->getStartPosition() === $this->getStartPosition()) ||
- $this->parent instanceof Node\Statement\NamespaceUseDeclaration ||
- $this->parent instanceof Node\NamespaceUseClause ||
- $this->parent instanceof Node\NamespaceUseGroupClause ||
- $this->parent->parent instanceof Node\TraitUseClause ||
- $this->parent instanceof Node\TraitSelectOrAliasClause ||
- ($this->parent instanceof TraitSelectOrAliasClause &&
- ($this->parent->asOrInsteadOfKeyword == null || $this->parent->asOrInsteadOfKeyword->kind === TokenKind::AsKeyword))
- ) {
- return null;
- }
-
- if (in_array($lowerText = strtolower($this->getText()), ["self", "static", "parent"])) {
- return $lowerText;
- }
-
- // FULLY QUALIFIED NAMES
- // - resolve to the name without leading namespace separator.
- if ($this->isFullyQualifiedName()) {
- return ResolvedName::buildName($this->nameParts, $this->getFileContents());
- }
-
- // RELATIVE NAMES
- // - resolve to the name with namespace replaced by the current namespace.
- // - if current namespace is global, strip leading namespace\ prefix.
- if ($this->isRelativeName()) {
- return $this->getNamespacedName();
- }
-
- [$namespaceImportTable, $functionImportTable, $constImportTable] = $this->getImportTablesForCurrentScope();
-
- // QUALIFIED NAMES
- // - first segment of the name is translated according to the current class/namespace import table.
- // - If no import rule applies, the current namespace is prepended to the name.
- if ($this->isQualifiedName()) {
- return $this->tryResolveFromImportTable($namespaceImportTable) ?? $this->getNamespacedName();
- }
-
- // UNQUALIFIED NAMES
- // - translated according to the current import table for the respective symbol type.
- // (class-like => namespace import table, constant => const import table, function => function import table)
- // - if no import rule applies:
- // - all symbol types: if current namespace is global, resolve to global namespace.
- // - class-like symbols: resolve from current namespace.
- // - function or const: resolved at runtime (from current namespace, with fallback to global namespace).
- if ($this->isConstantName()) {
- $resolvedName = $this->tryResolveFromImportTable($constImportTable, /* case-sensitive */ true);
- $namespaceDefinition = $this->getNamespaceDefinition();
- if ($namespaceDefinition !== null && $namespaceDefinition->name === null) {
- $resolvedName = $resolvedName ?? ResolvedName::buildName($this->nameParts, $this->getFileContents());
- }
- return $resolvedName;
- } elseif ($this->parent instanceof CallExpression) {
- $resolvedName = $this->tryResolveFromImportTable($functionImportTable);
- if (($namespaceDefinition = $this->getNamespaceDefinition()) === null || $namespaceDefinition->name === null) {
- $resolvedName = $resolvedName ?? ResolvedName::buildName($this->nameParts, $this->getFileContents());
- }
- return $resolvedName;
- }
-
- return $this->tryResolveFromImportTable($namespaceImportTable) ?? $this->getNamespacedName();
- }
-
- public function getLastNamePart() {
- $parts = $this->nameParts;
- for ($i = \count($parts) - 1; $i >= 0; $i--) {
- // TODO - also handle reserved word tokens
- if ($parts[$i]->kind === TokenKind::Name) {
- return $parts[$i];
- }
- }
- return null;
- }
-
- /**
- * @param ResolvedName[] $importTable
- * @param bool $isCaseSensitive
- * @return string|null
- */
- private function tryResolveFromImportTable($importTable, bool $isCaseSensitive = false) {
- $content = $this->getFileContents();
- $index = $this->nameParts[0]->getText($content);
-// if (!$isCaseSensitive) {
-// $index = strtolower($index);
-// }
- if(isset($importTable[$index])) {
- $resolvedName = $importTable[$index];
- $resolvedName->addNameParts(\array_slice($this->nameParts, 1), $content);
- return $resolvedName;
- }
- return null;
- }
-
- private function isConstantName() : bool {
- return
- ($this->parent instanceof Node\Statement\ExpressionStatement || $this->parent instanceof Expression) &&
- !(
- $this->parent instanceof Node\Expression\MemberAccessExpression || $this->parent instanceof CallExpression ||
- $this->parent instanceof ObjectCreationExpression ||
- $this->parent instanceof Node\Expression\ScopedPropertyAccessExpression || $this->parent instanceof AnonymousFunctionCreationExpression ||
- $this->parent instanceof ArrowFunctionCreationExpression ||
- ($this->parent instanceof Node\Expression\BinaryExpression && $this->parent->operator->kind === TokenKind::InstanceOfKeyword)
- );
- }
-
- public function getNameParts() : array {
- return $this->nameParts;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/RelativeSpecifier.php b/vendor/microsoft/tolerant-php-parser/src/Node/RelativeSpecifier.php
deleted file mode 100644
index 8c301edb..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/RelativeSpecifier.php
+++ /dev/null
@@ -1,23 +0,0 @@
-breakoutLevel === null) {
- return null;
- }
-
- $breakoutLevel = $this->breakoutLevel;
- while ($breakoutLevel instanceof Node\Expression\ParenthesizedExpression) {
- $breakoutLevel = $breakoutLevel->expression;
- }
-
- if (
- $breakoutLevel instanceof Node\NumericLiteral
- && $breakoutLevel->children->kind === TokenKind::IntegerLiteralToken
- ) {
- $literalString = $breakoutLevel->getText();
- $firstTwoChars = \substr($literalString, 0, 2);
-
- if ($firstTwoChars === '0b' || $firstTwoChars === '0B') {
- if (\bindec(\substr($literalString, 2)) > 0) {
- return null;
- }
- }
- else if (\intval($literalString, 0) > 0) {
- return null;
- }
- }
-
- $start = $breakoutLevel->getStartPosition();
- $end = $breakoutLevel->getEndPosition();
-
- return new Diagnostic(
- DiagnosticKind::Error,
- "Positive integer literal expected.",
- $start,
- $end - $start
- );
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ClassDeclaration.php b/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ClassDeclaration.php
deleted file mode 100644
index 166ce125..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ClassDeclaration.php
+++ /dev/null
@@ -1,60 +0,0 @@
-name];
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/CompoundStatementNode.php b/vendor/microsoft/tolerant-php-parser/src/Node/Statement/CompoundStatementNode.php
deleted file mode 100644
index 739e5b38..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/CompoundStatementNode.php
+++ /dev/null
@@ -1,28 +0,0 @@
-name];
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ExpressionStatement.php b/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ExpressionStatement.php
deleted file mode 100644
index 96e7afef..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ExpressionStatement.php
+++ /dev/null
@@ -1,23 +0,0 @@
-name];
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/FunctionStaticDeclaration.php b/vendor/microsoft/tolerant-php-parser/src/Node/Statement/FunctionStaticDeclaration.php
deleted file mode 100644
index b96608de..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/FunctionStaticDeclaration.php
+++ /dev/null
@@ -1,29 +0,0 @@
-`)) */
- public $semicolonOrCloseTag;
-
- /** @var Token|null TokenKind::InlineHtml data unless there are no bytes (This is optional if there is nothing after the semicolon) */
- public $data;
-
- const CHILD_NAMES = [
- 'haltCompilerKeyword',
- 'openParen',
- 'closeParen',
- 'semicolonOrCloseTag',
- 'data',
- ];
-
- /**
- * @return int
- */
- public function getHaltCompilerOffset() {
- // This accounts for the fact that PHP close tags may include a single newline,
- // and that $this->data may be null.
- return $this->semicolonOrCloseTag->getEndPosition();
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/IfStatementNode.php b/vendor/microsoft/tolerant-php-parser/src/Node/Statement/IfStatementNode.php
deleted file mode 100644
index 67d04adc..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/IfStatementNode.php
+++ /dev/null
@@ -1,49 +0,0 @@
-name];
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/NamedLabelStatement.php b/vendor/microsoft/tolerant-php-parser/src/Node/Statement/NamedLabelStatement.php
deleted file mode 100644
index 29e66260..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/NamedLabelStatement.php
+++ /dev/null
@@ -1,22 +0,0 @@
-useClauses != null
- && \count($this->useClauses->children) > 1
- ) {
- foreach ($this->useClauses->children as $useClause) {
- if($useClause instanceof Node\NamespaceUseClause && !is_null($useClause->openBrace)) {
- return new Diagnostic(
- DiagnosticKind::Error,
- "; expected.",
- $useClause->getEndPosition(),
- 1
- );
- }
- }
- }
- return null;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ReturnStatement.php b/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ReturnStatement.php
deleted file mode 100644
index 50353c16..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/ReturnStatement.php
+++ /dev/null
@@ -1,26 +0,0 @@
-name];
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/TryStatement.php b/vendor/microsoft/tolerant-php-parser/src/Node/Statement/TryStatement.php
deleted file mode 100644
index b0e503ca..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/Statement/TryStatement.php
+++ /dev/null
@@ -1,30 +0,0 @@
-startQuote)) {
- foreach ($this->children as $child) {
- $contents = $this->getFileContents();
- $stringContents .= $child->getFullText($contents);
- }
- } else {
- // TODO ensure string consistency (all strings should have start / end quote)
- $stringContents = trim($this->children->getText($this->getFileContents()), '"\'');
- }
- return $stringContents;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/TraitMembers.php b/vendor/microsoft/tolerant-php-parser/src/Node/TraitMembers.php
deleted file mode 100644
index 53c375c1..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Node/TraitMembers.php
+++ /dev/null
@@ -1,27 +0,0 @@
-variableName instanceof Token &&
- $name = substr($this->variableName->getText($this->getFileContents()), 1)
- ) {
- return $name;
- }
- return null;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/ParseContext.php b/vendor/microsoft/tolerant-php-parser/src/ParseContext.php
deleted file mode 100644
index 33c73c46..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/ParseContext.php
+++ /dev/null
@@ -1,24 +0,0 @@
-reservedWordTokens = \array_values(TokenStringMaps::RESERVED_WORDS);
- $this->keywordTokens = \array_values(TokenStringMaps::KEYWORDS);
- $this->argumentStartTokensSet = \array_flip(TokenStringMaps::KEYWORDS);
- unset($this->argumentStartTokensSet[TokenKind::YieldFromKeyword]);
- $this->argumentStartTokensSet[TokenKind::DotDotDotToken] = '...';
- $this->nameOrKeywordOrReservedWordTokens = \array_merge([TokenKind::Name], $this->keywordTokens, $this->reservedWordTokens);
- $this->nameOrReservedWordTokens = \array_merge([TokenKind::Name], $this->reservedWordTokens);
- $this->nameOrStaticOrReservedWordTokens = \array_merge([TokenKind::Name, TokenKind::StaticKeyword], $this->reservedWordTokens);
- $this->parameterTypeDeclarationTokens =
- [TokenKind::ArrayKeyword, TokenKind::CallableKeyword, TokenKind::BoolReservedWord,
- TokenKind::FloatReservedWord, TokenKind::IntReservedWord, TokenKind::StringReservedWord,
- TokenKind::ObjectReservedWord, TokenKind::NullReservedWord, TokenKind::FalseReservedWord,
- TokenKind::TrueReservedWord, TokenKind::IterableReservedWord, TokenKind::MixedReservedWord,
- TokenKind::VoidReservedWord, TokenKind::NeverReservedWord]; // TODO update spec
- $this->returnTypeDeclarationTokens = \array_merge([TokenKind::StaticKeyword], $this->parameterTypeDeclarationTokens);
- }
-
- /**
- * This method exists so that it can be overridden in subclasses.
- * Any subclass must return a token stream that is equivalent to the contents in $fileContents for this to work properly.
- *
- * Possible reasons for applications to override the lexer:
- *
- * - Imitate token stream of a newer/older PHP version (e.g. T_FN is only available in php 7.4)
- * - Reuse the result of token_get_all to create a Node again.
- * - Reuse the result of token_get_all in a different library.
- */
- protected function makeLexer(string $fileContents): TokenStreamProviderInterface
- {
- return TokenStreamProviderFactory::GetTokenStreamProvider($fileContents);
- }
-
- /**
- * Generates AST from source file contents. Returns an instance of SourceFileNode, which is always the top-most
- * Node-type of the tree.
- *
- * @param string $fileContents
- * @return SourceFileNode
- */
- public function parseSourceFile(string $fileContents, string $uri = null) : SourceFileNode {
- $this->lexer = $this->makeLexer($fileContents);
-
- $this->reset();
-
- $sourceFile = new SourceFileNode();
- $this->sourceFile = $sourceFile;
- $sourceFile->fileContents = $fileContents;
- $sourceFile->uri = $uri;
- $sourceFile->statementList = [];
- if ($this->getCurrentToken()->kind !== TokenKind::EndOfFileToken) {
- $inlineHTML = $this->parseInlineHtml($sourceFile);
- $sourceFile->statementList[] = $inlineHTML;
- if ($inlineHTML->echoStatement) {
- $sourceFile->statementList[] = $inlineHTML->echoStatement;
- $inlineHTML->echoStatement->parent = $sourceFile;
- $inlineHTML->echoStatement = null;
- }
- }
- $sourceFile->statementList =
- \array_merge($sourceFile->statementList, $this->parseList($sourceFile, ParseContext::SourceElements));
-
- $this->sourceFile->endOfFileToken = $this->eat1(TokenKind::EndOfFileToken);
- $this->advanceToken();
-
- $sourceFile->parent = null;
-
- return $sourceFile;
- }
-
- private function reset() {
- $this->advanceToken();
-
- // Stores the current parse context, which includes the current and enclosing lists.
- $this->currentParseContext = 0;
- }
-
- /**
- * Parse a list of elements for a given ParseContext until a list terminator associated
- * with that ParseContext is reached. Additionally abort parsing when an element is reached
- * that is invalid in the current context, but valid in an enclosing context. If an element
- * is invalid in both current and enclosing contexts, generate a SkippedToken, and continue.
- * @param Node $parentNode
- * @param int $listParseContext
- * @return array
- */
- private function parseList($parentNode, int $listParseContext) {
- $savedParseContext = $this->currentParseContext;
- $this->currentParseContext |= 1 << $listParseContext;
- $parseListElementFn = $this->getParseListElementFn($listParseContext);
-
- $nodeArray = [];
- while (!$this->isListTerminator($listParseContext)) {
- if ($this->isValidListElement($listParseContext, $this->getCurrentToken())) {
- $element = $parseListElementFn($parentNode);
- $nodeArray[] = $element;
- if ($element instanceof Node) {
- $element->parent = $parentNode;
- if ($element instanceof InlineHtml && $element->echoStatement) {
- $nodeArray[] = $element->echoStatement;
- $element->echoStatement->parent = $parentNode;
- $element->echoStatement = null;
- }
- }
- continue;
- }
-
- // Error handling logic:
- // The current parse context does not know how to handle the current token,
- // so check if the enclosing contexts know what to do. If so, we assume that
- // the list has completed parsing, and return to the enclosing context.
- //
- // Example:
- // class A {
- // function foo() {
- // return;
- // // } <- MissingToken (generated when we try to "eat" the closing brace)
- //
- // public function bar() {
- // }
- // }
- //
- // In the case above, the Method ParseContext doesn't know how to handle "public", but
- // the Class ParseContext will know what to do with it. So we abort the Method ParseContext,
- // and return to the Class ParseContext. This enables us to generate a tree with a single
- // class that contains two method nodes, even though there was an error present in the first method.
- if ($this->isCurrentTokenValidInEnclosingContexts()) {
- break;
- }
-
- // None of the enclosing contexts know how to handle the token. Generate a
- // SkippedToken, and continue parsing in the current context.
- // Example:
- // class A {
- // function foo() {
- // return;
- // & // <- SkippedToken
- // }
- // }
- $token = new SkippedToken($this->getCurrentToken());
- $nodeArray[] = $token;
- $this->advanceToken();
- }
-
- $this->currentParseContext = $savedParseContext;
-
- return $nodeArray;
- }
-
- private function isListTerminator(int $parseContext) {
- $tokenKind = $this->getCurrentToken()->kind;
- if ($tokenKind === TokenKind::EndOfFileToken) {
- // Being at the end of the file ends all lists.
- return true;
- }
-
- switch ($parseContext) {
- case ParseContext::SourceElements:
- return false;
-
- case ParseContext::InterfaceMembers:
- case ParseContext::ClassMembers:
- case ParseContext::BlockStatements:
- case ParseContext::TraitMembers:
- case ParseContext::EnumMembers:
- return $tokenKind === TokenKind::CloseBraceToken;
- case ParseContext::SwitchStatementElements:
- return $tokenKind === TokenKind::CloseBraceToken || $tokenKind === TokenKind::EndSwitchKeyword;
- case ParseContext::IfClause2Elements:
- return
- $tokenKind === TokenKind::ElseIfKeyword ||
- $tokenKind === TokenKind::ElseKeyword ||
- $tokenKind === TokenKind::EndIfKeyword;
-
- case ParseContext::WhileStatementElements:
- return $tokenKind === TokenKind::EndWhileKeyword;
-
- case ParseContext::CaseStatementElements:
- return
- $tokenKind === TokenKind::CaseKeyword ||
- $tokenKind === TokenKind::DefaultKeyword;
-
- case ParseContext::ForStatementElements:
- return
- $tokenKind === TokenKind::EndForKeyword;
-
- case ParseContext::ForeachStatementElements:
- return $tokenKind === TokenKind::EndForEachKeyword;
-
- case ParseContext::DeclareStatementElements:
- return $tokenKind === TokenKind::EndDeclareKeyword;
- }
- // TODO warn about unhandled parse context
- return false;
- }
-
- private function isValidListElement($context, Token $token) {
-
- // TODO
- switch ($context) {
- case ParseContext::SourceElements:
- case ParseContext::BlockStatements:
- case ParseContext::IfClause2Elements:
- case ParseContext::CaseStatementElements:
- case ParseContext::WhileStatementElements:
- case ParseContext::ForStatementElements:
- case ParseContext::ForeachStatementElements:
- case ParseContext::DeclareStatementElements:
- return $this->isStatementStart($token);
-
- case ParseContext::ClassMembers:
- return $this->isClassMemberDeclarationStart($token);
-
- case ParseContext::TraitMembers:
- return $this->isTraitMemberDeclarationStart($token);
-
- case ParseContext::EnumMembers:
- return $this->isEnumMemberDeclarationStart($token);
-
- case ParseContext::InterfaceMembers:
- return $this->isInterfaceMemberDeclarationStart($token);
-
- case ParseContext::SwitchStatementElements:
- return
- $token->kind === TokenKind::CaseKeyword ||
- $token->kind === TokenKind::DefaultKeyword;
- }
- return false;
- }
-
- private function getParseListElementFn($context) {
- switch ($context) {
- case ParseContext::SourceElements:
- case ParseContext::BlockStatements:
- case ParseContext::IfClause2Elements:
- case ParseContext::CaseStatementElements:
- case ParseContext::WhileStatementElements:
- case ParseContext::ForStatementElements:
- case ParseContext::ForeachStatementElements:
- case ParseContext::DeclareStatementElements:
- return $this->parseStatementFn();
- case ParseContext::ClassMembers:
- return $this->parseClassElementFn();
-
- case ParseContext::TraitMembers:
- return $this->parseTraitElementFn();
-
- case ParseContext::InterfaceMembers:
- return $this->parseInterfaceElementFn();
-
- case ParseContext::EnumMembers:
- return $this->parseEnumElementFn();
-
- case ParseContext::SwitchStatementElements:
- return $this->parseCaseOrDefaultStatement();
- default:
- throw new \Exception("Unrecognized parse context");
- }
- }
-
- /**
- * Aborts parsing list when one of the parent contexts understands something
- * @return bool
- */
- private function isCurrentTokenValidInEnclosingContexts() {
- for ($contextKind = 0; $contextKind < ParseContext::Count; $contextKind++) {
- if ($this->isInParseContext($contextKind)) {
- if ($this->isValidListElement($contextKind, $this->getCurrentToken()) || $this->isListTerminator($contextKind)) {
- return true;
- }
- }
- }
- return false;
- }
-
- private function isInParseContext($contextToCheck) {
- return ($this->currentParseContext & (1 << $contextToCheck));
- }
-
- /**
- * Retrieve the current token, and check that it's of the expected TokenKind.
- * If so, advance and return the token. Otherwise return a MissingToken for
- * the expected token.
- * @param int|int[] ...$kinds
- * @return Token
- */
- private function eat(...$kinds) {
- $token = $this->token;
- if (\is_array($kinds[0])) {
- $kinds = $kinds[0];
- }
- foreach ($kinds as $kind) {
- if ($token->kind === $kind) {
- $this->token = $this->lexer->scanNextToken();
- return $token;
- }
- }
- // TODO include optional grouping for token kinds
- return new MissingToken($kinds[0], $token->fullStart);
- }
-
- /**
- * Retrieve the current token, and check that it's of the kind $kind.
- * If so, advance and return the token. Otherwise return a MissingToken for
- * the expected token.
- *
- * This is faster than calling eat() if there is a single token.
- *
- * @param int $kind
- * @return Token
- */
- private function eat1($kind) {
- $token = $this->token;
- if ($token->kind === $kind) {
- $this->token = $this->lexer->scanNextToken();
- return $token;
- }
- // TODO include optional grouping for token kinds
- return new MissingToken($kind, $token->fullStart);
- }
-
- /**
- * @param int|int[] ...$kinds (Can provide a single value with a list of kinds, or multiple kinds)
- * @return Token|null
- */
- private function eatOptional(...$kinds) {
- $token = $this->token;
- if (\is_array($kinds[0])) {
- $kinds = $kinds[0];
- }
- if (\in_array($token->kind, $kinds)) {
- $this->token = $this->lexer->scanNextToken();
- return $token;
- }
- return null;
- }
-
- /**
- * @param int $kind a single kind
- * @return Token|null
- */
- private function eatOptional1($kind) {
- $token = $this->token;
- if ($token->kind === $kind) {
- $this->token = $this->lexer->scanNextToken();
- return $token;
- }
- return null;
- }
-
- private $token;
-
- private function getCurrentToken() : Token {
- return $this->token;
- }
-
- private function advanceToken() {
- $this->token = $this->lexer->scanNextToken();
- }
-
- private function parseStatement($parentNode) {
- return ($this->parseStatementFn())($parentNode);
- }
-
- private function parseStatementFn() {
- return function ($parentNode) {
- $token = $this->getCurrentToken();
- switch ($token->kind) {
- // compound-statement
- case TokenKind::OpenBraceToken:
- return $this->parseCompoundStatement($parentNode);
-
- // labeled-statement
- case TokenKind::Name:
- if ($this->lookahead(TokenKind::ColonToken)) {
- return $this->parseNamedLabelStatement($parentNode);
- }
- break;
-
- // selection-statement
- case TokenKind::IfKeyword:
- return $this->parseIfStatement($parentNode);
- case TokenKind::SwitchKeyword:
- return $this->parseSwitchStatement($parentNode);
-
- // iteration-statement
- case TokenKind::WhileKeyword: // while-statement
- return $this->parseWhileStatement($parentNode);
- case TokenKind::DoKeyword: // do-statement
- return $this->parseDoStatement($parentNode);
- case TokenKind::ForKeyword: // for-statement
- return $this->parseForStatement($parentNode);
- case TokenKind::ForeachKeyword: // foreach-statement
- return $this->parseForeachStatement($parentNode);
-
- // jump-statement
- case TokenKind::GotoKeyword: // goto-statement
- return $this->parseGotoStatement($parentNode);
- case TokenKind::ContinueKeyword: // continue-statement
- case TokenKind::BreakKeyword: // break-statement
- return $this->parseBreakOrContinueStatement($parentNode);
- case TokenKind::ReturnKeyword: // return-statement
- return $this->parseReturnStatement($parentNode);
-
- // try-statement
- case TokenKind::TryKeyword:
- return $this->parseTryStatement($parentNode);
-
- // declare-statement
- case TokenKind::DeclareKeyword:
- return $this->parseDeclareStatement($parentNode);
-
- // attribute before statement or anonymous function
- case TokenKind::AttributeToken:
- return $this->parseAttributeStatement($parentNode);
-
- // function-declaration
- case TokenKind::FunctionKeyword:
- // Check that this is not an anonymous-function-creation-expression
- if ($this->lookahead($this->nameOrKeywordOrReservedWordTokens) || $this->lookahead(TokenKind::AmpersandToken, $this->nameOrKeywordOrReservedWordTokens)) {
- return $this->parseFunctionDeclaration($parentNode);
- }
- break;
-
- // class-declaration
- case TokenKind::FinalKeyword:
- case TokenKind::AbstractKeyword:
- case TokenKind::ReadonlyKeyword:
- // fallthrough
- case TokenKind::ClassKeyword:
- return $this->parseClassDeclaration($parentNode);
-
- // interface-declaration
- case TokenKind::InterfaceKeyword:
- return $this->parseInterfaceDeclaration($parentNode);
-
- // namespace-definition
- case TokenKind::NamespaceKeyword:
- if (!$this->lookahead(TokenKind::BackslashToken)) {
- // TODO add error handling for the case where a namespace definition does not occur in the outer-most scope
- return $this->parseNamespaceDefinition($parentNode);
- }
- break;
-
- // namespace-use-declaration
- case TokenKind::UseKeyword:
- return $this->parseNamespaceUseDeclaration($parentNode);
-
- case TokenKind::SemicolonToken:
- return $this->parseEmptyStatement($parentNode);
-
- case TokenKind::EchoKeyword:
- return $this->parseEchoStatement($parentNode);
-
- // trait-declaration
- case TokenKind::TraitKeyword:
- return $this->parseTraitDeclaration($parentNode);
-
- case TokenKind::EnumKeyword:
- return $this->parseEnumDeclaration($parentNode);
-
- // global-declaration
- case TokenKind::GlobalKeyword:
- return $this->parseGlobalDeclaration($parentNode);
-
- // const-declaration
- case TokenKind::ConstKeyword:
- return $this->parseConstDeclaration($parentNode);
-
- // function-static-declaration
- case TokenKind::StaticKeyword:
- // Check that this is not an anonymous-function-creation-expression
- if (!$this->lookahead([TokenKind::FunctionKeyword, TokenKind::FnKeyword, TokenKind::OpenParenToken, TokenKind::ColonColonToken])) {
- return $this->parseFunctionStaticDeclaration($parentNode);
- }
- break;
-
- case TokenKind::ScriptSectionEndTag:
- return $this->parseInlineHtml($parentNode);
-
- case TokenKind::UnsetKeyword:
- return $this->parseUnsetStatement($parentNode);
-
- case TokenKind::HaltCompilerKeyword:
- if ($parentNode instanceof SourceFileNode) {
- return $this->parseHaltCompilerStatement($parentNode);
- }
- // __halt_compiler is a fatal compile error anywhere other than the top level.
- // It won't be seen elsewhere in other programs - warn about the token being unexpected.
- $this->advanceToken();
- return new SkippedToken($token);
- }
-
- $expressionStatement = new ExpressionStatement();
- $expressionStatement->parent = $parentNode;
- $expressionStatement->expression = $this->parseExpression($expressionStatement, true);
- $expressionStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- return $expressionStatement;
- };
- }
-
- private function parseClassElementFn() {
- return function ($parentNode) {
- $modifiers = $this->parseModifiers();
-
- $token = $this->getCurrentToken();
- switch ($token->kind) {
- case TokenKind::ConstKeyword:
- return $this->parseClassConstDeclaration($parentNode, $modifiers);
-
- case TokenKind::FunctionKeyword:
- return $this->parseMethodDeclaration($parentNode, $modifiers);
-
- case TokenKind::QuestionToken:
- return $this->parseRemainingPropertyDeclarationOrMissingMemberDeclaration(
- $parentNode,
- $modifiers,
- $this->eat1(TokenKind::QuestionToken)
- );
- case TokenKind::VariableName:
- return $this->parsePropertyDeclaration($parentNode, $modifiers);
-
- case TokenKind::UseKeyword:
- return $this->parseTraitUseClause($parentNode);
-
- case TokenKind::AttributeToken:
- return $this->parseAttributeStatement($parentNode);
-
- default:
- return $this->parseRemainingPropertyDeclarationOrMissingMemberDeclaration($parentNode, $modifiers);
- }
- };
- }
-
- /** @return Token[] */
- private function parseClassModifiers(): array {
- $modifiers = [];
- while ($token = $this->eatOptional(TokenKind::AbstractKeyword, TokenKind::FinalKeyword, TokenKind::ReadonlyKeyword)) {
- $modifiers[] = $token;
- }
- return $modifiers;
- }
-
- private function parseClassDeclaration($parentNode) : Node {
- $classNode = new ClassDeclaration(); // TODO verify not nested
- $classNode->parent = $parentNode;
- $classNode->abstractOrFinalModifier = $this->eatOptional(TokenKind::AbstractKeyword, TokenKind::FinalKeyword, TokenKind::ReadonlyKeyword);
- $classNode->modifiers = $this->parseClassModifiers();
- $classNode->classKeyword = $this->eat1(TokenKind::ClassKeyword);
- $classNode->name = $this->eat($this->nameOrReservedWordTokens); // TODO should be any
- $classNode->name->kind = TokenKind::Name;
- $classNode->classBaseClause = $this->parseClassBaseClause($classNode);
- $classNode->classInterfaceClause = $this->parseClassInterfaceClause($classNode);
- $classNode->classMembers = $this->parseClassMembers($classNode);
- return $classNode;
- }
-
- private function parseClassMembers($parentNode) : Node {
- $classMembers = new ClassMembersNode();
- $classMembers->openBrace = $this->eat1(TokenKind::OpenBraceToken);
- $classMembers->classMemberDeclarations = $this->parseList($classMembers, ParseContext::ClassMembers);
- $classMembers->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
- $classMembers->parent = $parentNode;
- return $classMembers;
- }
-
- private function parseFunctionDeclaration($parentNode) {
- $functionNode = new FunctionDeclaration();
- $this->parseFunctionType($functionNode);
- $functionNode->parent = $parentNode;
- return $functionNode;
- }
-
- /**
- * @return Node
- */
- private function parseAttributeExpression($parentNode) {
- $attributeGroups = $this->parseAttributeGroups(null);
- // Warn about invalid syntax for attributed declarations
- // Lookahead for static, function, or fn for the only type of expressions that can have attributes (anonymous functions)
- if (in_array($this->token->kind, [TokenKind::FunctionKeyword, TokenKind::FnKeyword], true) ||
- $this->token->kind === TokenKind::StaticKeyword && $this->lookahead([TokenKind::FunctionKeyword, TokenKind::FnKeyword])) {
- $expression = $this->parsePrimaryExpression($parentNode);
- } else {
- // Create a MissingToken so that diagnostics indicate that the attributes did not match up with an expression/declaration.
- $expression = new MissingDeclaration();
- $expression->parent = $parentNode;
- $expression->declaration = new MissingToken(TokenKind::Expression, $this->token->fullStart);
- }
- if ($expression instanceof AnonymousFunctionCreationExpression ||
- $expression instanceof ArrowFunctionCreationExpression ||
- $expression instanceof MissingDeclaration) {
- $expression->attributes = $attributeGroups;
- foreach ($attributeGroups as $attributeGroup) {
- $attributeGroup->parent = $expression;
- }
- }
- return $expression;
- }
-
- /**
- * Precondition: The next token is an AttributeToken
- * @return Node
- */
- private function parseAttributeStatement($parentNode) {
- $attributeGroups = $this->parseAttributeGroups(null);
- if ($parentNode instanceof ClassMembersNode) {
- // Create a class element or a MissingMemberDeclaration
- $statement = $this->parseClassElementFn()($parentNode);
- } elseif ($parentNode instanceof TraitMembers) {
- // Create a trait element or a MissingMemberDeclaration
- $statement = $this->parseTraitElementFn()($parentNode);
- } elseif ($parentNode instanceof EnumMembers) {
- // Create a enum element or a MissingMemberDeclaration
- $statement = $this->parseEnumElementFn()($parentNode);
- } elseif ($parentNode instanceof InterfaceMembers) {
- // Create an interface element or a MissingMemberDeclaration
- $statement = $this->parseInterfaceElementFn()($parentNode);
- } else {
- // Classlikes, anonymous functions, global functions, and arrow functions can have attributes. Global constants cannot.
- if (in_array($this->token->kind, [TokenKind::ClassKeyword, TokenKind::TraitKeyword, TokenKind::InterfaceKeyword, TokenKind::AbstractKeyword, TokenKind::FinalKeyword, TokenKind::FunctionKeyword, TokenKind::FnKeyword, TokenKind::EnumKeyword], true) ||
- $this->token->kind === TokenKind::StaticKeyword && $this->lookahead([TokenKind::FunctionKeyword, TokenKind::FnKeyword])) {
- $statement = $this->parseStatement($parentNode);
- } else {
- // Create a MissingToken so that diagnostics indicate that the attributes did not match up with an expression/declaration.
- $statement = new MissingDeclaration();
- $statement->parent = $parentNode;
- $statement->declaration = new MissingToken(TokenKind::Expression, $this->token->fullStart);
- }
- }
-
- if ($statement instanceof FunctionLike ||
- $statement instanceof ClassDeclaration ||
- $statement instanceof TraitDeclaration ||
- $statement instanceof EnumDeclaration ||
- $statement instanceof EnumCaseDeclaration ||
- $statement instanceof InterfaceDeclaration ||
- $statement instanceof ClassConstDeclaration ||
- $statement instanceof PropertyDeclaration ||
- $statement instanceof MissingDeclaration ||
- $statement instanceof MissingMemberDeclaration) {
-
- $statement->attributes = $attributeGroups;
- foreach ($attributeGroups as $attributeGroup) {
- $attributeGroup->parent = $statement;
- }
- }
- return $statement;
- }
-
- /**
- * @param Node|null $parentNode
- * @return AttributeGroup[]
- */
- private function parseAttributeGroups($parentNode): array
- {
- $attributeGroups = [];
- while ($attributeToken = $this->eatOptional1(TokenKind::AttributeToken)) {
- $attributeGroup = new AttributeGroup();
- $attributeGroup->startToken = $attributeToken;
- $attributeGroup->attributes = $this->parseAttributeElementList($attributeGroup)
- ?: (new MissingToken(TokenKind::Name, $this->token->fullStart));
- $attributeGroup->endToken = $this->eat1(TokenKind::CloseBracketToken);
- $attributeGroup->parent = $parentNode;
- $attributeGroups[] = $attributeGroup;
- }
- return $attributeGroups;
- }
-
- /**
- * @return DelimitedList\AttributeElementList
- */
- private function parseAttributeElementList(AttributeGroup $parentNode) {
- return $this->parseDelimitedList(
- DelimitedList\AttributeElementList::class,
- TokenKind::CommaToken,
- $this->isQualifiedNameStartFn(),
- $this->parseAttributeFn(),
- $parentNode,
- false);
- }
-
- private function parseAttributeFn()
- {
- return function ($parentNode): Attribute {
- $attribute = new Attribute();
- $attribute->parent = $parentNode;
- $attribute->name = $this->parseQualifiedName($attribute);
- $attribute->openParen = $this->eatOptional1(TokenKind::OpenParenToken);
- if ($attribute->openParen) {
- $attribute->argumentExpressionList = $this->parseArgumentExpressionList($attribute);
- $attribute->closeParen = $this->eat1(TokenKind::CloseParenToken);
- }
- return $attribute;
- };
- }
-
- private function parseMethodDeclaration($parentNode, $modifiers) {
- $methodDeclaration = new MethodDeclaration();
- $methodDeclaration->modifiers = $modifiers;
- $this->parseFunctionType($methodDeclaration, true);
- $methodDeclaration->parent = $parentNode;
- return $methodDeclaration;
- }
-
- private function parseParameterFn() {
- return function ($parentNode) {
- $parameter = new Parameter();
- $parameter->parent = $parentNode;
- if ($this->token->kind === TokenKind::AttributeToken) {
- $parameter->attributes = $this->parseAttributeGroups($parameter);
- }
- // Note that parameter modifiers are allowed to be repeated by the parser in php 8.1 (it is a compiler error)
- //
- // TODO: Remove the visibilityToken in a future backwards incompatible release
- $parameter->visibilityToken = $this->eatOptional([TokenKind::PublicKeyword, TokenKind::ProtectedKeyword, TokenKind::PrivateKeyword]);
- $parameter->modifiers = $this->parseParameterModifiers() ?: null;
-
- $parameter->questionToken = $this->eatOptional1(TokenKind::QuestionToken);
- $parameter->typeDeclarationList = $this->tryParseParameterTypeDeclarationList($parameter);
- if ($parameter->typeDeclarationList) {
- $children = $parameter->typeDeclarationList->children;
- if (end($children) instanceof MissingToken && ($children[\count($children) - 2]->kind ?? null) === TokenKind::AmpersandToken) {
- array_pop($parameter->typeDeclarationList->children);
- $parameter->byRefToken = array_pop($parameter->typeDeclarationList->children);
- }
- } elseif ($parameter->questionToken) {
- // TODO ParameterType?
- $parameter->typeDeclarationList = new MissingToken(TokenKind::PropertyType, $this->token->fullStart);
- }
- if (!$parameter->byRefToken) {
- $parameter->byRefToken = $this->eatOptional1(TokenKind::AmpersandToken);
- }
- // TODO add post-parse rule that prevents assignment
- // TODO add post-parse rule that requires only last parameter be variadic
- $parameter->dotDotDotToken = $this->eatOptional1(TokenKind::DotDotDotToken);
- $parameter->variableName = $this->eat1(TokenKind::VariableName);
- $parameter->equalsToken = $this->eatOptional1(TokenKind::EqualsToken);
- if ($parameter->equalsToken !== null) {
- // TODO add post-parse rule that checks for invalid assignments
- $parameter->default = $this->parseExpression($parameter);
- }
- return $parameter;
- };
- }
-
- /**
- * @param ArrowFunctionCreationExpression|AnonymousFunctionCreationExpression|FunctionDeclaration|MethodDeclaration $parentNode a node with FunctionReturnType trait
- */
- private function parseAndSetReturnTypeDeclarationList($parentNode) {
- $returnTypeList = $this->parseReturnTypeDeclarationList($parentNode);
- if (!$returnTypeList) {
- $parentNode->returnTypeList = new MissingToken(TokenKind::ReturnType, $this->token->fullStart);
- return;
- }
- $parentNode->returnTypeList = $returnTypeList;
- }
-
- const TYPE_DELIMITER_TOKENS = [
- TokenKind::BarToken,
- TokenKind::AmpersandToken,
- ];
-
- /**
- * Attempt to parse the return type after the `:` and optional `?` token.
- *
- * TODO: Consider changing the return type to a new class TypeList in a future major release?
- * ParenthesizedIntersectionType is not a qualified name.
- * @return DelimitedList\QualifiedNameList|null
- */
- private function parseReturnTypeDeclarationList($parentNode) {
- return $this->parseUnionTypeDeclarationList(
- $parentNode,
- function ($token): bool {
- return \in_array($token->kind, $this->returnTypeDeclarationTokens, true) ||
- $this->isQualifiedNameStart($token);
- },
- function ($parentNode) {
- return $this->parseReturnTypeDeclaration($parentNode);
- },
- TokenKind::ReturnType
- );
- }
-
- private function parseReturnTypeDeclaration($parentNode) {
- return $this->eatOptional($this->returnTypeDeclarationTokens)
- ?? $this->parseQualifiedName($parentNode);
- }
-
- private function tryParseParameterTypeDeclaration($parentNode) {
- $parameterTypeDeclaration =
- $this->eatOptional($this->parameterTypeDeclarationTokens) ?? $this->parseQualifiedName($parentNode);
- return $parameterTypeDeclaration;
- }
-
- /**
- * Parse a union type such as A, A|B, A&B, A|(B&C), rejecting invalid syntax combinations.
- *
- * @param Node $parentNode
- * @param Closure(Token):bool $isTypeStart
- * @param Closure(Node):(Node|Token|null) $parseType
- * @param int $expectedTypeKind expected kind for token type
- * @return DelimitedList\QualifiedNameList|null
- */
- private function parseUnionTypeDeclarationList($parentNode, Closure $isTypeStart, Closure $parseType, int $expectedTypeKind) {
- $result = new DelimitedList\QualifiedNameList();
- $token = $this->getCurrentToken();
- $delimiter = self::TYPE_DELIMITER_TOKENS;
- do {
- if ($token->kind === TokenKind::OpenParenToken || $isTypeStart($token)) {
- // Forbid mixing A&(B&C) if '&' was already seen
- $openParen = in_array(TokenKind::BarToken, $delimiter, true)
- ? $this->eatOptional(TokenKind::OpenParenToken)
- : null;
- if ($openParen) {
- $element = $this->parseParenthesizedIntersectionType($result, $openParen, $isTypeStart, $parseType);
- // Forbid mixing (A&B)&C by forbidding `&` separator after a parenthesized intersection type.
- $delimiter = [TokenKind::BarToken];
- } else {
- $element = $parseType($result);
- }
- $result->addElement($element);
- } else {
- break;
- }
-
- $delimiterToken = $this->eatOptional($delimiter);
- if ($delimiterToken !== null) {
- $result->addElement($delimiterToken);
- $delimiter = [$delimiterToken->kind];
- }
- $token = $this->getCurrentToken();
- } while ($delimiterToken !== null);
-
- $result->parent = $parentNode;
- if ($result->children === null) {
- return null;
- }
-
- if (in_array(end($result->children)->kind ?? null, $delimiter, true)) {
- // Add a MissingToken so that this will warn about `function () : T| {}`
- $result->children[] = new MissingToken($expectedTypeKind, $this->token->fullStart);
- } elseif (count($result->children) === 1 && $result->children[0] instanceof ParenthesizedIntersectionType) {
- // dnf types with parenthesized intersection types are a union type of at least 2 types.
- $result->children[] = new MissingToken(TokenKind::BarToken, $this->token->fullStart);
- }
- return $result;
- }
-
- /**
- * @param Node $parentNode
- * @param Token $openParen
- * @param Closure(Token):bool $isTypeStart
- * @param Closure(Node):(Node|Token|null) $parseType
- */
- private function parseParenthesizedIntersectionType($parentNode, Token $openParen, Closure $isTypeStart, Closure $parseType): ParenthesizedIntersectionType {
- $node = new ParenthesizedIntersectionType();
- $node->parent = $parentNode;
- $node->openParen = $openParen;
- $node->children = $this->parseDelimitedList(
- DelimitedList\QualifiedNameList::class,
- TokenKind::AmpersandToken,
- $isTypeStart,
- $parseType,
- $node,
- true);
- if ($node->children) {
- // https://wiki.php.net/rfc/dnf_types
- if ((end($node->children->children)->kind ?? null) === TokenKind::OpenParenToken) {
- // Add a MissingToken so that this will Warn about `function (A|(B&) $x) {}`
- $node->children->children[] = new MissingToken(TokenKind::Name, $this->token->fullStart);
- } elseif (count($node->children->children) === 1) {
- // Must have at least 2 parts for A|(B&C)
- $node->children->children[] = new MissingToken(TokenKind::AmpersandToken, $this->token->fullStart);
- }
- } else {
- // Having less than 2 types (no types) in A|() is a parse error
- $node->children = new MissingToken(TokenKind::Name, $this->token->fullStart);
- }
- $node->closeParen = $this->eat(TokenKind::CloseParenToken);
- return $node;
- }
-
- /**
- * @param Node|null $parentNode
- * @return DelimitedList\QualifiedNameList|null
- */
- private function tryParseParameterTypeDeclarationList($parentNode) {
- return $this->parseUnionTypeDeclarationList(
- $parentNode,
- function ($token) {
- return \in_array($token->kind, $this->parameterTypeDeclarationTokens, true) ||
- $this->isQualifiedNameStart($token);
- },
- function ($parentNode) {
- return $this->tryParseParameterTypeDeclaration($parentNode);
- },
- TokenKind::Name
- );
- }
-
- private function parseCompoundStatement($parentNode) {
- $compoundStatement = new CompoundStatementNode();
- $compoundStatement->openBrace = $this->eat1(TokenKind::OpenBraceToken);
- $compoundStatement->statements = $this->parseList($compoundStatement, ParseContext::BlockStatements);
- $compoundStatement->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
- $compoundStatement->parent = $parentNode;
- return $compoundStatement;
- }
-
- private function isClassMemberDeclarationStart(Token $token) {
- switch ($token->kind) {
- // const-modifier
- case TokenKind::ConstKeyword:
-
- // visibility-modifier
- case TokenKind::PublicKeyword:
- case TokenKind::ProtectedKeyword:
- case TokenKind::PrivateKeyword:
-
- // static-modifier
- case TokenKind::StaticKeyword:
-
- // readonly-modifier
- case TokenKind::ReadonlyKeyword:
-
- // class-modifier
- case TokenKind::AbstractKeyword:
- case TokenKind::FinalKeyword:
-
- case TokenKind::VarKeyword:
-
- case TokenKind::FunctionKeyword:
-
- case TokenKind::UseKeyword:
-
- // attributes
- case TokenKind::AttributeToken:
- return true;
-
- }
-
- return false;
- }
-
- private function isStatementStart(Token $token) {
- // https://github.com/php/php-langspec/blob/master/spec/19-grammar.md#statements
- switch ($token->kind) {
- // Compound Statements
- case TokenKind::OpenBraceToken:
-
- // Labeled Statements
- case TokenKind::Name:
-// case TokenKind::CaseKeyword: // TODO update spec
-// case TokenKind::DefaultKeyword:
-
- // Expression Statements
- case TokenKind::SemicolonToken:
- case TokenKind::IfKeyword:
- case TokenKind::SwitchKeyword:
-
- // Iteration Statements
- case TokenKind::WhileKeyword:
- case TokenKind::DoKeyword:
- case TokenKind::ForKeyword:
- case TokenKind::ForeachKeyword:
-
- // Jump Statements
- case TokenKind::GotoKeyword:
- case TokenKind::ContinueKeyword:
- case TokenKind::BreakKeyword:
- case TokenKind::ReturnKeyword:
- case TokenKind::ThrowKeyword:
-
- // The try Statement
- case TokenKind::TryKeyword:
-
- // The declare Statement
- case TokenKind::DeclareKeyword:
-
- // const-declaration
- case TokenKind::ConstKeyword:
-
- // function-definition
- case TokenKind::FunctionKeyword:
-
- // class-declaration
- case TokenKind::ClassKeyword:
- case TokenKind::AbstractKeyword:
- case TokenKind::FinalKeyword:
- case TokenKind::ReadonlyKeyword:
-
- // interface-declaration
- case TokenKind::InterfaceKeyword:
-
- // trait-declaration
- case TokenKind::TraitKeyword:
-
- // enum-declaration
- case TokenKind::EnumKeyword:
-
- // namespace-definition
- case TokenKind::NamespaceKeyword:
-
- // namespace-use-declaration
- case TokenKind::UseKeyword:
-
- // global-declaration
- case TokenKind::GlobalKeyword:
-
- // function-static-declaration
- case TokenKind::StaticKeyword:
-
- case TokenKind::ScriptSectionEndTag:
-
- // attributes
- case TokenKind::AttributeToken:
-
- // __halt_compiler
- case TokenKind::HaltCompilerKeyword:
- return true;
-
- default:
- return $this->isExpressionStart($token);
- }
- }
-
- private function isExpressionStart($token) {
- return ($this->isExpressionStartFn())($token);
- }
-
- private function isExpressionStartFn() {
- return function ($token) {
- switch ($token->kind) {
- // Script Inclusion Expression
- case TokenKind::RequireKeyword:
- case TokenKind::RequireOnceKeyword:
- case TokenKind::IncludeKeyword:
- case TokenKind::IncludeOnceKeyword:
-
- // yield-expression
- case TokenKind::YieldKeyword:
- case TokenKind::YieldFromKeyword:
-
- // object-creation-expression
- case TokenKind::NewKeyword:
- case TokenKind::CloneKeyword:
- return true;
-
- // unary-op-expression
- case TokenKind::PlusToken:
- case TokenKind::MinusToken:
- case TokenKind::ExclamationToken:
- case TokenKind::TildeToken:
-
- // error-control-expression
- case TokenKind::AtSymbolToken:
-
- // prefix-increment-expression
- case TokenKind::PlusPlusToken:
- // prefix-decrement-expression
- case TokenKind::MinusMinusToken:
- return true;
-
- // variable-name
- case TokenKind::VariableName:
- case TokenKind::DollarToken:
- return true;
-
- // qualified-name
- case TokenKind::Name:
- case TokenKind::BackslashToken:
- return true;
- case TokenKind::NamespaceKeyword:
- // TODO currently only supports qualified-names, but eventually parse namespace declarations
- return $this->isNamespaceKeywordStartOfExpression($token);
-
- // literal
- case TokenKind::DecimalLiteralToken: // TODO merge dec, oct, hex, bin, float -> NumericLiteral
- case TokenKind::OctalLiteralToken:
- case TokenKind::HexadecimalLiteralToken:
- case TokenKind::BinaryLiteralToken:
- case TokenKind::FloatingLiteralToken:
- case TokenKind::InvalidOctalLiteralToken:
- case TokenKind::InvalidHexadecimalLiteral:
- case TokenKind::InvalidBinaryLiteral:
- case TokenKind::IntegerLiteralToken:
-
- case TokenKind::StringLiteralToken:
-
- case TokenKind::SingleQuoteToken:
- case TokenKind::DoubleQuoteToken:
- case TokenKind::HeredocStart:
- case TokenKind::BacktickToken:
-
- // array-creation-expression
- case TokenKind::ArrayKeyword:
- case TokenKind::OpenBracketToken:
-
- // intrinsic-construct
- case TokenKind::EchoKeyword:
- case TokenKind::ListKeyword:
- case TokenKind::UnsetKeyword:
-
- // intrinsic-operator
- case TokenKind::EmptyKeyword:
- case TokenKind::EvalKeyword:
- case TokenKind::ExitKeyword:
- case TokenKind::DieKeyword:
- case TokenKind::IsSetKeyword:
- case TokenKind::PrintKeyword:
-
- // ( expression )
- case TokenKind::OpenParenToken:
- case TokenKind::ArrayCastToken:
- case TokenKind::BoolCastToken:
- case TokenKind::DoubleCastToken:
- case TokenKind::IntCastToken:
- case TokenKind::ObjectCastToken:
- case TokenKind::StringCastToken:
- case TokenKind::UnsetCastToken:
- case TokenKind::MatchKeyword:
-
- // anonymous-function-creation-expression
- case TokenKind::StaticKeyword:
- case TokenKind::FunctionKeyword:
- case TokenKind::FnKeyword:
- case TokenKind::AttributeToken:
- return true;
- }
- return \in_array($token->kind, $this->reservedWordTokens, true);
- };
- }
-
- /**
- * Handles the fact that $token may either be getCurrentToken or the token immediately before it in isExpressionStartFn().
- * An expression can be namespace\CONST, namespace\fn(), or namespace\ClassName
- */
- private function isNamespaceKeywordStartOfExpression(Token $token) : bool {
- $nextToken = $this->getCurrentToken();
- if ($nextToken->kind === TokenKind::BackslashToken) {
- return true;
- }
- if ($nextToken !== $token) {
- return false;
- }
- $oldPosition = $this->lexer->getCurrentPosition();
- $nextToken = $this->lexer->scanNextToken();
- $this->lexer->setCurrentPosition($oldPosition);
- return $nextToken->kind === TokenKind::BackslashToken;
- }
-
- /**
- * @param Node $parentNode
- * @return Token|MissingToken|Node
- */
- private function parsePrimaryExpression($parentNode) {
- $token = $this->getCurrentToken();
- switch ($token->kind) {
- // variable-name
- case TokenKind::VariableName: // TODO special case $this
- case TokenKind::DollarToken:
- return $this->parseSimpleVariable($parentNode);
-
- // qualified-name
- case TokenKind::Name: // TODO Qualified name
- case TokenKind::BackslashToken:
- case TokenKind::NamespaceKeyword:
- return $this->parseQualifiedName($parentNode);
-
- case TokenKind::DecimalLiteralToken: // TODO merge dec, oct, hex, bin, float -> NumericLiteral
- case TokenKind::OctalLiteralToken:
- case TokenKind::HexadecimalLiteralToken:
- case TokenKind::BinaryLiteralToken:
- case TokenKind::FloatingLiteralToken:
- case TokenKind::InvalidOctalLiteralToken:
- case TokenKind::InvalidHexadecimalLiteral:
- case TokenKind::InvalidBinaryLiteral:
- case TokenKind::IntegerLiteralToken:
- return $this->parseNumericLiteralExpression($parentNode);
-
- case TokenKind::StringLiteralToken:
- return $this->parseStringLiteralExpression($parentNode);
-
- case TokenKind::DoubleQuoteToken:
- case TokenKind::SingleQuoteToken:
- case TokenKind::HeredocStart:
- case TokenKind::BacktickToken:
- return $this->parseStringLiteralExpression2($parentNode);
-
- // TODO constant-expression
-
- // array-creation-expression
- case TokenKind::ArrayKeyword:
- case TokenKind::OpenBracketToken:
- return $this->parseArrayCreationExpression($parentNode);
-
- // intrinsic-construct
- case TokenKind::ListKeyword:
- return $this->parseListIntrinsicExpression($parentNode);
-
- // intrinsic-operator
- case TokenKind::EmptyKeyword:
- return $this->parseEmptyIntrinsicExpression($parentNode);
- case TokenKind::EvalKeyword:
- return $this->parseEvalIntrinsicExpression($parentNode);
-
- case TokenKind::ExitKeyword:
- case TokenKind::DieKeyword:
- return $this->parseExitIntrinsicExpression($parentNode);
-
- case TokenKind::IsSetKeyword:
- return $this->parseIssetIntrinsicExpression($parentNode);
-
- case TokenKind::PrintKeyword:
- return $this->parsePrintIntrinsicExpression($parentNode);
-
- // ( expression )
- case TokenKind::OpenParenToken:
- return $this->parseParenthesizedExpression($parentNode);
-
- // anonymous-function-creation-expression
- case TokenKind::AttributeToken:
- return $this->parseAttributeExpression($parentNode);
-
- case TokenKind::StaticKeyword:
- // handle `static::`, `static(`, `new static;`, `instanceof static`
- if (!$this->lookahead([TokenKind::FunctionKeyword, TokenKind::FnKeyword])) {
- // TODO: Should this check the parent type to reject `$x = static;`, `$x = static();`, etc.
- return $this->parseStaticQualifiedName($parentNode);
- }
- // Could be `static function` anonymous function creation expression, so flow through
- case TokenKind::FunctionKeyword:
- case TokenKind::FnKeyword:
- return $this->parseAnonymousFunctionCreationExpression($parentNode);
-
- case TokenKind::TrueReservedWord:
- case TokenKind::FalseReservedWord:
- case TokenKind::NullReservedWord:
- // handle `true::`, `true(`, `true\`
- if ($this->lookahead([TokenKind::BackslashToken, TokenKind::ColonColonToken, TokenKind::OpenParenToken])) {
- return $this->parseQualifiedName($parentNode);
- }
- return $this->parseReservedWordExpression($parentNode);
- case TokenKind::MatchKeyword:
- return $this->parseMatchExpression($parentNode);
- }
- if (\in_array($token->kind, TokenStringMaps::RESERVED_WORDS)) {
- return $this->parseQualifiedName($parentNode);
- }
-
- return new MissingToken(TokenKind::Expression, $token->fullStart);
- }
-
- private function parseEmptyStatement($parentNode) {
- $emptyStatement = new EmptyStatement();
- $emptyStatement->parent = $parentNode;
- $emptyStatement->semicolon = $this->eat1(TokenKind::SemicolonToken);
- return $emptyStatement;
- }
-
- private function parseStringLiteralExpression($parentNode) {
- // TODO validate input token
- $expression = new StringLiteral();
- $expression->parent = $parentNode;
- $expression->children = $this->getCurrentToken(); // TODO - merge string types
- $this->advanceToken();
- return $expression;
- }
-
- private function parseStringLiteralExpression2($parentNode) {
- // TODO validate input token
- $expression = new StringLiteral();
- $expression->parent = $parentNode;
- $expression->startQuote = $this->eat(TokenKind::SingleQuoteToken, TokenKind::DoubleQuoteToken, TokenKind::HeredocStart, TokenKind::BacktickToken);
- $expression->children = [];
-
- while (true) {
- switch ($this->getCurrentToken()->kind) {
- case TokenKind::DollarOpenBraceToken:
- case TokenKind::OpenBraceDollarToken:
- $expression->children[] = $this->eat(TokenKind::DollarOpenBraceToken, TokenKind::OpenBraceDollarToken);
- if ($this->getCurrentToken()->kind === TokenKind::StringVarname) {
- $expression->children[] = $this->parseComplexDollarTemplateStringExpression($expression);
- } else {
- $expression->children[] = $this->parseExpression($expression);
- }
- $expression->children[] = $this->eat1(TokenKind::CloseBraceToken);
- break;
- case $startQuoteKind = $expression->startQuote->kind:
- case TokenKind::EndOfFileToken:
- case TokenKind::HeredocEnd:
- $expression->endQuote = $this->eat($startQuoteKind, TokenKind::HeredocEnd);
- return $expression;
- case TokenKind::VariableName:
- $expression->children[] = $this->parseTemplateStringExpression($expression);
- break;
- default:
- $expression->children[] = $this->getCurrentToken();
- $this->advanceToken();
- break;
- }
- }
- }
-
- /**
- * This is used to parse the contents of `"${...}"` expressions.
- *
- * Supported: x, x[0], x[$y]
- * Not supported: $x->p1, x[0][1], etc.
- * @see parseTemplateStringExpression
- *
- * Precondition: getCurrentToken()->kind === TokenKind::StringVarname
- */
- private function parseComplexDollarTemplateStringExpression($parentNode) {
- $var = $this->parseSimpleVariable($parentNode);
- $token = $this->getCurrentToken();
- if ($token->kind === TokenKind::OpenBracketToken) {
- return $this->parseTemplateStringSubscriptExpression($var);
- }
- return $var;
- }
-
- /**
- * Double-quoted and heredoc strings support a basic set of expression types, described in http://php.net/manual/en/language.types.string.php#language.types.string.parsing
- * Supported: $x, $x->p, $x[0], $x[$y]
- * Not supported: $x->p1->p2, $x[0][1], etc.
- * Since there is a relatively small finite set of allowed forms, I implement it here rather than trying to reuse the general expression parsing code.
- */
- private function parseTemplateStringExpression($parentNode) {
- $token = $this->getCurrentToken();
- if ($token->kind === TokenKind::VariableName) {
- $var = $this->parseSimpleVariable($parentNode);
- $token = $this->getCurrentToken();
- if ($token->kind === TokenKind::OpenBracketToken) {
- return $this->parseTemplateStringSubscriptExpression($var);
- } else if ($token->kind === TokenKind::ArrowToken || $token->kind === TokenKind::QuestionArrowToken) {
- return $this->parseTemplateStringMemberAccessExpression($var);
- } else {
- return $var;
- }
- }
-
- return null;
- }
-
- private function parseTemplateStringSubscriptExpression($postfixExpression) : SubscriptExpression {
- $subscriptExpression = new SubscriptExpression();
- $subscriptExpression->parent = $postfixExpression->parent;
- $postfixExpression->parent = $subscriptExpression;
-
- $subscriptExpression->postfixExpression = $postfixExpression;
- $subscriptExpression->openBracketOrBrace = $this->eat1(TokenKind::OpenBracketToken); // Only [] syntax is supported, not {}
- $token = $this->getCurrentToken();
- if ($token->kind === TokenKind::VariableName) {
- $subscriptExpression->accessExpression = $this->parseSimpleVariable($subscriptExpression);
- } elseif ($token->kind === TokenKind::IntegerLiteralToken) {
- $subscriptExpression->accessExpression = $this->parseNumericLiteralExpression($subscriptExpression);
- } elseif ($token->kind === TokenKind::StringLiteralToken) {
- // TODO: investigate if this should add other uncommon types of tokens for strings/numbers mentioned in parsePrimaryExpression()
- $subscriptExpression->accessExpression = $this->parseStringLiteralExpression($subscriptExpression);
- } elseif ($token->kind === TokenKind::Name) {
- $subscriptExpression->accessExpression = $this->parseTemplateStringSubscriptStringLiteral($subscriptExpression);
- } else {
- $subscriptExpression->accessExpression = new MissingToken(TokenKind::Expression, $token->fullStart);
- }
-
- $subscriptExpression->closeBracketOrBrace = $this->eat1(TokenKind::CloseBracketToken);
-
- return $subscriptExpression;
- }
-
- private function parseTemplateStringSubscriptStringLiteral($parentNode) : StringLiteral {
- $expression = new StringLiteral();
- $expression->parent = $parentNode;
- $expression->children = $this->eat1(TokenKind::Name);
- return $expression;
- }
-
- private function parseTemplateStringMemberAccessExpression($expression) : MemberAccessExpression {
- $memberAccessExpression = new MemberAccessExpression();
- $memberAccessExpression->parent = $expression->parent;
- $expression->parent = $memberAccessExpression;
-
- $memberAccessExpression->dereferencableExpression = $expression;
- $memberAccessExpression->arrowToken = $this->eat(TokenKind::ArrowToken, TokenKind::QuestionArrowToken);
- $memberAccessExpression->memberName = $this->eat1(TokenKind::Name);
-
- return $memberAccessExpression;
- }
-
- private function parseNumericLiteralExpression($parentNode) {
- $numericLiteral = new NumericLiteral();
- $numericLiteral->parent = $parentNode;
- $numericLiteral->children = $this->getCurrentToken();
- $this->advanceToken();
- return $numericLiteral;
- }
-
- private function parseReservedWordExpression($parentNode) {
- $reservedWord = new ReservedWord();
- $reservedWord->parent = $parentNode;
- $reservedWord->children = $this->getCurrentToken();
- $this->advanceToken();
- return $reservedWord;
- }
-
- private function isModifier($token): bool {
- switch ($token->kind) {
- // class-modifier
- case TokenKind::AbstractKeyword:
- case TokenKind::FinalKeyword:
-
- // visibility-modifier
- case TokenKind::PublicKeyword:
- case TokenKind::ProtectedKeyword:
- case TokenKind::PrivateKeyword:
-
- // static-modifier
- case TokenKind::StaticKeyword:
-
- // readonly-modifier
- case TokenKind::ReadonlyKeyword:
-
- // var
- case TokenKind::VarKeyword:
- return true;
- }
- return false;
- }
-
- private function isParameterModifier($token): bool {
- switch ($token->kind) {
- // visibility-modifier
- case TokenKind::PublicKeyword:
- case TokenKind::ProtectedKeyword:
- case TokenKind::PrivateKeyword:
-
- // readonly-modifier
- case TokenKind::ReadonlyKeyword:
-
- return true;
- }
- return false;
- }
-
- /** @return Token[] */
- private function parseParameterModifiers(): array {
- $modifiers = [];
- $token = $this->getCurrentToken();
- while ($this->isParameterModifier($token)) {
- $modifiers[] = $token;
- $this->advanceToken();
- $token = $this->getCurrentToken();
- }
- return $modifiers;
- }
-
- /** @return Token[] */
- private function parseModifiers(): array {
- $modifiers = [];
- $token = $this->getCurrentToken();
- while ($this->isModifier($token)) {
- $modifiers[] = $token;
- $this->advanceToken();
- $token = $this->getCurrentToken();
- }
- return $modifiers;
- }
-
- private function isParameterStartFn() {
- return function ($token) {
- switch ($token->kind) {
- case TokenKind::DotDotDotToken:
-
- // qualified-name
- case TokenKind::Name: // http://php.net/manual/en/language.namespaces.rules.php
- case TokenKind::BackslashToken:
- case TokenKind::NamespaceKeyword:
-
- case TokenKind::AmpersandToken:
-
- case TokenKind::VariableName:
-
- // nullable-type
- case TokenKind::QuestionToken:
-
- // parameter promotion
- case TokenKind::PublicKeyword:
- case TokenKind::ProtectedKeyword:
- case TokenKind::PrivateKeyword:
- case TokenKind::AttributeToken:
-
- // dnf types (A&B)|C
- case TokenKind::OpenParenToken:
- return true;
- }
-
- // scalar-type
- return \in_array($token->kind, $this->parameterTypeDeclarationTokens, true);
- };
- }
-
- /**
- * @param string $className (name of subclass of DelimitedList)
- * @param int|int[] $delimiter
- * @param callable $isElementStartFn
- * @param callable $parseElementFn
- * @param Node $parentNode
- * @param bool $allowEmptyElements
- * @return DelimitedList|null instance of $className
- */
- private function parseDelimitedList($className, $delimiter, $isElementStartFn, $parseElementFn, $parentNode, $allowEmptyElements = false) {
- // TODO consider allowing empty delimiter to be more tolerant
- $node = new $className();
- $token = $this->getCurrentToken();
- do {
- if ($isElementStartFn($token)) {
- $node->addElement($parseElementFn($node));
- } elseif (!$allowEmptyElements || ($allowEmptyElements && !$this->checkAnyToken($delimiter))) {
- break;
- }
-
- $delimiterToken = $this->eatOptional($delimiter);
- if ($delimiterToken !== null) {
- $node->addElement($delimiterToken);
- }
- $token = $this->getCurrentToken();
- // TODO ERROR CASE - no delimiter, but a param follows
- } while ($delimiterToken !== null);
-
- $node->parent = $parentNode;
- if ($node->children === null) {
- return null;
- }
- return $node;
- }
-
- /**
- * @internal
- */
- const QUALIFIED_NAME_START_TOKENS = [
- TokenKind::BackslashToken,
- TokenKind::NamespaceKeyword,
- TokenKind::Name,
- ];
-
- private function isQualifiedNameStart($token) {
- return \in_array($token->kind, self::QUALIFIED_NAME_START_TOKENS, true);
- }
-
- private function isQualifiedNameStartFn() {
- return function ($token) {
- return \in_array($token->kind, self::QUALIFIED_NAME_START_TOKENS, true);
- };
- }
-
- private function isQualifiedNameStartForCatchFn() {
- return function ($token) {
- // Unfortunately, catch(int $x) is *syntactically valid* php which `php --syntax-check` would accept.
- // (tolerant-php-parser is concerned with syntax, not semantics)
- return \in_array($token->kind, self::QUALIFIED_NAME_START_TOKENS, true) ||
- \in_array($token->kind, $this->reservedWordTokens, true);
- };
- }
-
- /**
- * @return QualifiedName
- */
- private function parseStaticQualifiedName($parentNode) {
- $node = new QualifiedName();
- $token = $this->eat(TokenKind::StaticKeyword);
- $token->kind = TokenKind::Name;
- $node->parent = $parentNode;
- $node->nameParts = [$token];
- return $node;
- }
-
- /**
- * @return QualifiedName|null - returns null for invalid qualified names such as `static\` (use parseStaticQualifiedName for that)
- */
- private function parseQualifiedName($parentNode) {
- return ($this->parseQualifiedNameFn())($parentNode);
- }
-
- private function parseQualifiedNameFn() {
- return function ($parentNode) {
- $node = new QualifiedName();
- $node->parent = $parentNode;
- $node->relativeSpecifier = $this->parseRelativeSpecifier($node);
- if (!isset($node->relativeSpecifier)) {
- $node->globalSpecifier = $this->eatOptional1(TokenKind::BackslashToken);
- }
-
- $nameParts =
- $this->parseDelimitedList(
- DelimitedList\QualifiedNameParts::class,
- TokenKind::BackslashToken,
- function ($token) {
- // a\static() <- INVALID (but not checked for right now)
- // new a\static() <- INVALID
- // new static() <- VALID
- // a\static\b <- INVALID
- // a\function <- INVALID
- // a\true\b <-VALID
- // a\b\true <-VALID
- // a\static::b <-VALID
- // TODO more tests
- return $this->lookahead(TokenKind::BackslashToken)
- ? in_array($token->kind, $this->nameOrReservedWordTokens)
- : in_array($token->kind, $this->nameOrStaticOrReservedWordTokens);
- },
- function ($parentNode) {
- $name = $this->lookahead(TokenKind::BackslashToken)
- ? $this->eat($this->nameOrReservedWordTokens)
- : $this->eat($this->nameOrStaticOrReservedWordTokens); // TODO support keyword name
- $name->kind = TokenKind::Name; // bool/true/null/static should not be treated as keywords in this case
- return $name;
- }, $node);
- if ($nameParts === null && $node->globalSpecifier === null && $node->relativeSpecifier === null) {
- return null;
- }
-
- $node->nameParts = $nameParts ? $nameParts->children : [];
-
- return $node;
- };
- }
-
- private function parseRelativeSpecifier($parentNode) {
- $node = new RelativeSpecifier();
- $node->parent = $parentNode;
- $node->namespaceKeyword = $this->eatOptional1(TokenKind::NamespaceKeyword);
- if ($node->namespaceKeyword !== null) {
- $node->backslash = $this->eat1(TokenKind::BackslashToken);
- }
- if (isset($node->backslash)) {
- return $node;
- }
- return null;
- }
-
- /**
- * @param MethodDeclaration|FunctionDeclaration|AnonymousFunctionCreationExpression $functionDeclaration
- */
- private function parseFunctionType(Node $functionDeclaration, $canBeAbstract = false, $isAnonymous = false) {
-
- $functionDeclaration->functionKeyword = $this->eat1(TokenKind::FunctionKeyword);
- $functionDeclaration->byRefToken = $this->eatOptional1(TokenKind::AmpersandToken);
- $functionDeclaration->name = $isAnonymous
- ? $this->eatOptional($this->nameOrKeywordOrReservedWordTokens)
- : $this->eat($this->nameOrKeywordOrReservedWordTokens);
-
- if (isset($functionDeclaration->name)) {
- $functionDeclaration->name->kind = TokenKind::Name;
- }
-
- if ($isAnonymous && isset($functionDeclaration->name)) {
- // Anonymous functions should not have names
- $functionDeclaration->name = new SkippedToken($functionDeclaration->name); // TODO instead handle this during post-walk
- }
-
- $functionDeclaration->openParen = $this->eat1(TokenKind::OpenParenToken);
- $functionDeclaration->parameters = $this->parseDelimitedList(
- DelimitedList\ParameterDeclarationList::class,
- TokenKind::CommaToken,
- $this->isParameterStartFn(),
- $this->parseParameterFn(),
- $functionDeclaration);
- $functionDeclaration->closeParen = $this->eat1(TokenKind::CloseParenToken);
- if ($isAnonymous) {
- $functionDeclaration->anonymousFunctionUseClause = $this->parseAnonymousFunctionUseClause($functionDeclaration);
- }
-
- if ($this->checkToken(TokenKind::ColonToken)) {
- $functionDeclaration->colonToken = $this->eat1(TokenKind::ColonToken);
- $functionDeclaration->questionToken = $this->eatOptional1(TokenKind::QuestionToken);
- $this->parseAndSetReturnTypeDeclarationList($functionDeclaration);
- }
-
- if ($canBeAbstract) {
- $functionDeclaration->compoundStatementOrSemicolon = $this->eatOptional1(TokenKind::SemicolonToken);
- }
-
- if (!isset($functionDeclaration->compoundStatementOrSemicolon)) {
- $functionDeclaration->compoundStatementOrSemicolon = $this->parseCompoundStatement($functionDeclaration);
- }
- }
-
- private function parseNamedLabelStatement($parentNode) {
- $namedLabelStatement = new NamedLabelStatement();
- $namedLabelStatement->parent = $parentNode;
- $namedLabelStatement->name = $this->eat1(TokenKind::Name);
- $namedLabelStatement->colon = $this->eat1(TokenKind::ColonToken);
- // A named label is a statement on its own. E.g. `while (false) label: echo "test";`
- // is parsed as `while (false) { label: } echo "test";
- return $namedLabelStatement;
- }
-
- /**
- * @param int|int[] ...$expectedKinds an array of one or more kinds/sets of allowed kinds in each position
- */
- private function lookahead(...$expectedKinds) : bool {
- $startPos = $this->lexer->getCurrentPosition();
- $startToken = $this->token;
- $succeeded = true;
- foreach ($expectedKinds as $kind) {
- $token = $this->lexer->scanNextToken();
- $currentPosition = $this->lexer->getCurrentPosition();
- $endOfFilePosition = $this->lexer->getEndOfFilePosition();
- if (\is_array($kind)) {
- $succeeded = false;
- foreach ($kind as $kindOption) {
- if ($currentPosition <= $endOfFilePosition && $token->kind === $kindOption) {
- $succeeded = true;
- break;
- }
- }
- } else {
- if ($currentPosition > $endOfFilePosition || $token->kind !== $kind) {
- $succeeded = false;
- break;
- }
- }
- }
- $this->lexer->setCurrentPosition($startPos);
- $this->token = $startToken;
- return $succeeded;
- }
-
- /** @param int $expectedKind */
- private function checkToken($expectedKind) : bool {
- return $this->getCurrentToken()->kind === $expectedKind;
- }
-
- /** @param int|int[] $expectedKind */
- private function checkAnyToken($expectedKind) : bool {
- $kind = $this->getCurrentToken()->kind;
- return \is_array($expectedKind) ? \in_array($kind, $expectedKind, true) : $kind === $expectedKind;
- }
-
- private function parseIfStatement($parentNode) {
- $ifStatement = new IfStatementNode();
- $ifStatement->parent = $parentNode;
- $ifStatement->ifKeyword = $this->eat1(TokenKind::IfKeyword);
- $ifStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $ifStatement->expression = $this->parseExpression($ifStatement);
- $ifStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $curTokenKind = $this->getCurrentToken()->kind;
- if ($curTokenKind === TokenKind::ColonToken) {
- $ifStatement->colon = $this->eat1(TokenKind::ColonToken);
- $ifStatement->statements = $this->parseList($ifStatement, ParseContext::IfClause2Elements);
- } else if ($curTokenKind !== TokenKind::ScriptSectionEndTag) {
- // Fix #246 : properly parse `if (false) ?\>echoed text\statements = $this->parseStatement($ifStatement);
- }
- $ifStatement->elseIfClauses = []; // TODO - should be some standard for empty arrays vs. null?
- while ($this->checkToken(TokenKind::ElseIfKeyword)) {
- $ifStatement->elseIfClauses[] = $this->parseElseIfClause($ifStatement);
- }
-
- if ($this->checkToken(TokenKind::ElseKeyword)) {
- $ifStatement->elseClause = $this->parseElseClause($ifStatement);
- }
-
- $ifStatement->endifKeyword = $this->eatOptional1(TokenKind::EndIfKeyword);
- if ($ifStatement->endifKeyword) {
- $ifStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- }
-
- return $ifStatement;
- }
-
- private function parseElseIfClause($parentNode) {
- $elseIfClause = new ElseIfClauseNode();
- $elseIfClause->parent = $parentNode;
- $elseIfClause->elseIfKeyword = $this->eat1(TokenKind::ElseIfKeyword);
- $elseIfClause->openParen = $this->eat1(TokenKind::OpenParenToken);
- $elseIfClause->expression = $this->parseExpression($elseIfClause);
- $elseIfClause->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $curTokenKind = $this->getCurrentToken()->kind;
- if ($curTokenKind === TokenKind::ColonToken) {
- $elseIfClause->colon = $this->eat1(TokenKind::ColonToken);
- $elseIfClause->statements = $this->parseList($elseIfClause, ParseContext::IfClause2Elements);
- } elseif ($curTokenKind !== TokenKind::ScriptSectionEndTag) {
- $elseIfClause->statements = $this->parseStatement($elseIfClause);
- }
- return $elseIfClause;
- }
-
- private function parseElseClause($parentNode) {
- $elseClause = new ElseClauseNode();
- $elseClause->parent = $parentNode;
- $elseClause->elseKeyword = $this->eat1(TokenKind::ElseKeyword);
- $curTokenKind = $this->getCurrentToken()->kind;
- if ($curTokenKind === TokenKind::ColonToken) {
- $elseClause->colon = $this->eat1(TokenKind::ColonToken);
- $elseClause->statements = $this->parseList($elseClause, ParseContext::IfClause2Elements);
- } elseif ($curTokenKind !== TokenKind::ScriptSectionEndTag) {
- $elseClause->statements = $this->parseStatement($elseClause);
- }
- return $elseClause;
- }
-
- private function parseSwitchStatement($parentNode) {
- $switchStatement = new SwitchStatementNode();
- $switchStatement->parent = $parentNode;
- $switchStatement->switchKeyword = $this->eat1(TokenKind::SwitchKeyword);
- $switchStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $switchStatement->expression = $this->parseExpression($switchStatement);
- $switchStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $switchStatement->openBrace = $this->eatOptional1(TokenKind::OpenBraceToken);
- $switchStatement->colon = $this->eatOptional1(TokenKind::ColonToken);
- $switchStatement->caseStatements = $this->parseList($switchStatement, ParseContext::SwitchStatementElements);
- if ($switchStatement->colon !== null) {
- $switchStatement->endswitch = $this->eat1(TokenKind::EndSwitchKeyword);
- $switchStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- } else {
- $switchStatement->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
- }
-
- return $switchStatement;
- }
-
- private function parseCaseOrDefaultStatement() {
- return function ($parentNode) {
- $caseStatement = new CaseStatementNode();
- $caseStatement->parent = $parentNode;
- // TODO add error checking
- $caseStatement->caseKeyword = $this->eat(TokenKind::CaseKeyword, TokenKind::DefaultKeyword);
- if ($caseStatement->caseKeyword->kind === TokenKind::CaseKeyword) {
- $caseStatement->expression = $this->parseExpression($caseStatement);
- }
- $caseStatement->defaultLabelTerminator = $this->eat(TokenKind::ColonToken, TokenKind::SemicolonToken);
- $caseStatement->statementList = $this->parseList($caseStatement, ParseContext::CaseStatementElements);
- return $caseStatement;
- };
- }
-
- private function parseWhileStatement($parentNode) {
- $whileStatement = new WhileStatement();
- $whileStatement->parent = $parentNode;
- $whileStatement->whileToken = $this->eat1(TokenKind::WhileKeyword);
- $whileStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $whileStatement->expression = $this->parseExpression($whileStatement);
- $whileStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $whileStatement->colon = $this->eatOptional1(TokenKind::ColonToken);
- if ($whileStatement->colon !== null) {
- $whileStatement->statements = $this->parseList($whileStatement, ParseContext::WhileStatementElements);
- $whileStatement->endWhile = $this->eat1(TokenKind::EndWhileKeyword);
- $whileStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- } elseif (!$this->checkToken(TokenKind::ScriptSectionEndTag)) {
- $whileStatement->statements = $this->parseStatement($whileStatement);
- }
- return $whileStatement;
- }
-
- /**
- * @param Node $parentNode
- * @param bool $force
- * @return Node|MissingToken|array - The expression, or a missing token, or (if $force) an array containing a missed and skipped token
- */
- private function parseExpression($parentNode, $force = false) {
- $token = $this->getCurrentToken();
- if ($token->kind === TokenKind::EndOfFileToken) {
- return new MissingToken(TokenKind::Expression, $token->fullStart);
- }
-
- // Equivalent to (parseExpressionFn())($parentNode)
- $expression = $this->parseBinaryExpressionOrHigher(0, $parentNode);
- if ($force && $expression instanceof MissingToken) {
- $expression = [$expression, new SkippedToken($token)];
- $this->advanceToken();
- }
-
- return $expression;
- }
-
- private function parseExpressionFn() {
- return function ($parentNode) {
- return $this->parseBinaryExpressionOrHigher(0, $parentNode);
- };
- }
-
- /**
- * @param Node $parentNode
- * @return Expression
- */
- private function parseUnaryExpressionOrHigher($parentNode) {
- $token = $this->getCurrentToken();
- switch ($token->kind) {
- // unary-op-expression
- case TokenKind::PlusToken:
- case TokenKind::MinusToken:
- case TokenKind::ExclamationToken:
- case TokenKind::TildeToken:
- return $this->parseUnaryOpExpression($parentNode);
-
- // error-control-expression
- case TokenKind::AtSymbolToken:
- return $this->parseErrorControlExpression($parentNode);
-
- // prefix-increment-expression
- case TokenKind::PlusPlusToken:
- // prefix-decrement-expression
- case TokenKind::MinusMinusToken:
- return $this->parsePrefixUpdateExpression($parentNode);
-
- case TokenKind::ArrayCastToken:
- case TokenKind::BoolCastToken:
- case TokenKind::DoubleCastToken:
- case TokenKind::IntCastToken:
- case TokenKind::ObjectCastToken:
- case TokenKind::StringCastToken:
- case TokenKind::UnsetCastToken:
- return $this->parseCastExpression($parentNode);
-
- case TokenKind::OpenParenToken:
- // TODO remove duplication
- if ($this->lookahead(
- [TokenKind::ArrayKeyword,
- TokenKind::BinaryReservedWord,
- TokenKind::BoolReservedWord,
- TokenKind::BooleanReservedWord,
- TokenKind::DoubleReservedWord,
- TokenKind::IntReservedWord,
- TokenKind::IntegerReservedWord,
- TokenKind::FloatReservedWord,
- TokenKind::ObjectReservedWord,
- TokenKind::RealReservedWord,
- TokenKind::StringReservedWord,
- TokenKind::UnsetKeyword], TokenKind::CloseParenToken)) {
- return $this->parseCastExpressionGranular($parentNode);
- }
- break;
-
-/*
-
- case TokenKind::BacktickToken:
- return $this->parseShellCommandExpression($parentNode);
-
- case TokenKind::OpenParenToken:
- // TODO
-// return $this->parseCastExpressionGranular($parentNode);
- break;*/
-
- // object-creation-expression (postfix-expression)
- case TokenKind::NewKeyword:
- return $this->parseObjectCreationExpression($parentNode);
-
- // clone-expression (postfix-expression)
- case TokenKind::CloneKeyword:
- return $this->parseCloneExpression($parentNode);
-
- case TokenKind::YieldKeyword:
- case TokenKind::YieldFromKeyword:
- return $this->parseYieldExpression($parentNode);
-
- // include-expression
- // include-once-expression
- // require-expression
- // require-once-expression
- case TokenKind::IncludeKeyword:
- case TokenKind::IncludeOnceKeyword:
- case TokenKind::RequireKeyword:
- case TokenKind::RequireOnceKeyword:
- return $this->parseScriptInclusionExpression($parentNode);
- case TokenKind::ThrowKeyword: // throw-statement will become an expression in php 8.0
- return $this->parseThrowExpression($parentNode);
- }
-
- $expression = $this->parsePrimaryExpression($parentNode);
- return $this->parsePostfixExpressionRest($expression);
- }
-
- /**
- * @param int $precedence
- * @param Node $parentNode
- * @return Expression
- */
- private function parseBinaryExpressionOrHigher($precedence, $parentNode) {
- $leftOperand = $this->parseUnaryExpressionOrHigher($parentNode);
-
- [$prevNewPrecedence, $prevAssociativity] = self::UNKNOWN_PRECEDENCE_AND_ASSOCIATIVITY;
-
- while (true) {
- $token = $this->getCurrentToken();
-
- [$newPrecedence, $associativity] = $this->getBinaryOperatorPrecedenceAndAssociativity($token);
-
- // Expressions using operators w/o associativity (equality, relational, instanceof)
- // cannot reference identical expression types within one of their operands.
- //
- // Example:
- // $a < $b < $c // CASE 1: INVALID
- // $a < $b === $c < $d // CASE 2: VALID
- //
- // In CASE 1, it is expected that we stop parsing the expression after the $b token.
- if ($prevAssociativity === Associativity::None && $prevNewPrecedence === $newPrecedence) {
- break;
- }
-
- // Precedence and associativity properties determine whether we recurse, and continue
- // building up the current operand, or whether we pop out.
- //
- // Example:
- // $a + $b + $c // CASE 1: additive-expression (left-associative)
- // $a = $b = $c // CASE 2: equality-expression (right-associative)
- //
- // CASE 1:
- // The additive-expression is left-associative, which means we expect the grouping to be:
- // ($a + $b) + $c
- //
- // Because both + operators have the same precedence, and the + operator is left associative,
- // we expect the second + operator NOT to be consumed because $newPrecedence > $precedence => FALSE
- //
- // CASE 2:
- // The equality-expression is right-associative, which means we expect the grouping to be:
- // $a = ($b = $c)
- //
- // Because both = operators have the same precedence, and the = operator is right-associative,
- // we expect the second = operator to be consumed because $newPrecedence >= $precedence => TRUE
- $shouldConsumeCurrentOperator =
- $associativity === Associativity::Right ?
- $newPrecedence >= $precedence:
- $newPrecedence > $precedence;
-
- if (!$shouldConsumeCurrentOperator) {
- break;
- }
-
- // Unlike every other binary expression, exponentiation operators take precedence over unary operators.
- //
- // Example:
- // -3**2 => -9
- //
- // In these cases, we strip the UnaryExpression operator, and reassign $leftOperand to
- // $unaryExpression->operand.
- //
- // After we finish building the BinaryExpression, we rebuild the UnaryExpression so that it includes
- // the original operator, and the newly constructed exponentiation-expression as the operand.
- $shouldOperatorTakePrecedenceOverUnary = false;
- switch ($token->kind) {
- case TokenKind::AsteriskAsteriskToken:
- $shouldOperatorTakePrecedenceOverUnary = $leftOperand instanceof UnaryExpression;
- break;
- case TokenKind::EqualsToken:
- case TokenKind::AsteriskAsteriskEqualsToken:
- case TokenKind::AsteriskEqualsToken:
- case TokenKind::SlashEqualsToken:
- case TokenKind::PercentEqualsToken:
- case TokenKind::PlusEqualsToken:
- case TokenKind::MinusEqualsToken:
- case TokenKind::DotEqualsToken:
- case TokenKind::LessThanLessThanEqualsToken:
- case TokenKind::GreaterThanGreaterThanEqualsToken:
- case TokenKind::AmpersandEqualsToken:
- case TokenKind::CaretEqualsToken:
- case TokenKind::BarEqualsToken:
- case TokenKind::QuestionQuestionEqualsToken:
- // Workarounds for https://github.com/Microsoft/tolerant-php-parser/issues/19#issue-201714377
- // Parse `!$a = $b` as `!($a = $b)` - PHP constrains the Left Hand Side of an assignment to a variable. A unary operator (`@`, `!`, etc.) is not a variable.
- // Instanceof has similar constraints for the LHS.
- // So does `!$a += $b`
- // TODO: Any other operators?
- if ($leftOperand instanceof UnaryOpExpression) {
- $shouldOperatorTakePrecedenceOverUnary = true;
- }
- break;
- case TokenKind::InstanceOfKeyword:
- // Unlike assignment, the instanceof operator doesn't have restrictions on what can go in the left hand side.
- // `!` is the only unary operator with lower precedence than instanceof.
- if ($leftOperand instanceof UnaryOpExpression) {
- if ($leftOperand->operator->kind === TokenKind::ExclamationToken) {
- $shouldOperatorTakePrecedenceOverUnary = true;
- }
- }
- break;
- case TokenKind::QuestionToken:
- if ($parentNode instanceof TernaryExpression && !isset($parentNode->questionToken)) {
- // Workaround to parse "a ? b : c ? d : e" as "(a ? b : c) ? d : e"
- break 2;
- }
- break;
- }
-
- if ($shouldOperatorTakePrecedenceOverUnary) {
- /** @var UnaryOpExpression $unaryExpression */
- $unaryExpression = $leftOperand;
- $leftOperand = $unaryExpression->operand;
- }
-
- $this->advanceToken();
-
- if ($token->kind === TokenKind::EqualsToken) {
- $byRefToken = $this->eatOptional1(TokenKind::AmpersandToken);
- }
-
- $leftOperand = $token->kind === TokenKind::QuestionToken ?
- $this->parseTernaryExpression($leftOperand, $token, $parentNode) :
- $this->makeBinaryExpression(
- $leftOperand,
- $token,
- $byRefToken ?? null,
- $this->parseBinaryExpressionOrHigher($newPrecedence, null),
- $parentNode);
-
- // Rebuild the unary expression if we deconstructed it earlier.
- if ($shouldOperatorTakePrecedenceOverUnary) {
- /** @var UnaryOpExpression $unaryExpression */
- $leftOperand->parent = $unaryExpression;
- $unaryExpression->operand = $leftOperand;
- $leftOperand = $unaryExpression;
- }
-
- // Hold onto these values, so we know whether we've hit duplicate non-associative operators,
- // and need to terminate early.
- $prevNewPrecedence = $newPrecedence;
- $prevAssociativity = $associativity;
- }
- return $leftOperand;
- }
-
- const OPERATOR_PRECEDENCE_AND_ASSOCIATIVITY =
- [
- // logical-inc-OR-expression-2 (L)
- TokenKind::OrKeyword => [6, Associativity::Left],
-
- // logical-exc-OR-expression-2 (L)
- TokenKind::XorKeyword=> [7, Associativity::Left],
-
- // logical-AND-expression-2 (L)
- TokenKind::AndKeyword=> [8, Associativity::Left],
-
- // simple-assignment-expression (R)
- // TODO byref-assignment-expression
- TokenKind::EqualsToken => [9, Associativity::Right],
-
- // compound-assignment-expression (R)
- TokenKind::AsteriskAsteriskEqualsToken => [9, Associativity::Right],
- TokenKind::AsteriskEqualsToken => [9, Associativity::Right],
- TokenKind::SlashEqualsToken => [9, Associativity::Right],
- TokenKind::PercentEqualsToken => [9, Associativity::Right],
- TokenKind::PlusEqualsToken => [9, Associativity::Right],
- TokenKind::MinusEqualsToken => [9, Associativity::Right],
- TokenKind::DotEqualsToken => [9, Associativity::Right],
- TokenKind::LessThanLessThanEqualsToken => [9, Associativity::Right],
- TokenKind::GreaterThanGreaterThanEqualsToken => [9, Associativity::Right],
- TokenKind::AmpersandEqualsToken => [9, Associativity::Right],
- TokenKind::CaretEqualsToken => [9, Associativity::Right],
- TokenKind::BarEqualsToken => [9, Associativity::Right],
- TokenKind::QuestionQuestionEqualsToken => [9, Associativity::Right],
-
- // TODO conditional-expression (L)
- TokenKind::QuestionToken => [10, Associativity::Left],
-// TokenKind::ColonToken => [9, Associativity::Left],
-
- // TODO coalesce-expression (R)
- TokenKind::QuestionQuestionToken => [9, Associativity::Right],
-
- //logical-inc-OR-expression-1 (L)
- TokenKind::BarBarToken => [12, Associativity::Left],
-
- // logical-AND-expression-1 (L)
- TokenKind::AmpersandAmpersandToken => [13, Associativity::Left],
-
- // bitwise-inc-OR-expression (L)
- TokenKind::BarToken => [14, Associativity::Left],
-
- // bitwise-exc-OR-expression (L)
- TokenKind::CaretToken => [15, Associativity::Left],
-
- // bitwise-AND-expression (L)
- TokenKind::AmpersandToken => [16, Associativity::Left],
-
- // equality-expression (X)
- TokenKind::EqualsEqualsToken => [17, Associativity::None],
- TokenKind::ExclamationEqualsToken => [17, Associativity::None],
- TokenKind::LessThanGreaterThanToken => [17, Associativity::None],
- TokenKind::EqualsEqualsEqualsToken => [17, Associativity::None],
- TokenKind::ExclamationEqualsEqualsToken => [17, Associativity::None],
- TokenKind::LessThanEqualsGreaterThanToken => [17, Associativity::None],
-
- // relational-expression (X)
- TokenKind::LessThanToken => [18, Associativity::None],
- TokenKind::GreaterThanToken => [18, Associativity::None],
- TokenKind::LessThanEqualsToken => [18, Associativity::None],
- TokenKind::GreaterThanEqualsToken => [18, Associativity::None],
-
- // shift-expression (L)
- TokenKind::LessThanLessThanToken => [19, Associativity::Left],
- TokenKind::GreaterThanGreaterThanToken => [19, Associativity::Left],
-
- // additive-expression (L)
- TokenKind::PlusToken => [20, Associativity::Left],
- TokenKind::MinusToken => [20, Associativity::Left],
- TokenKind::DotToken =>[20, Associativity::Left],
-
- // multiplicative-expression (L)
- TokenKind::AsteriskToken => [21, Associativity::Left],
- TokenKind::SlashToken => [21, Associativity::Left],
- TokenKind::PercentToken => [21, Associativity::Left],
-
- // instanceof-expression (X)
- TokenKind::InstanceOfKeyword => [22, Associativity::None],
-
- // exponentiation-expression (R)
- TokenKind::AsteriskAsteriskToken => [23, Associativity::Right]
- ];
-
- const UNKNOWN_PRECEDENCE_AND_ASSOCIATIVITY = [-1, -1];
-
- private function getBinaryOperatorPrecedenceAndAssociativity($token) {
- return self::OPERATOR_PRECEDENCE_AND_ASSOCIATIVITY[$token->kind] ?? self::UNKNOWN_PRECEDENCE_AND_ASSOCIATIVITY;
- }
-
- /**
- * @internal Do not use outside this class, this may be changed or removed.
- */
- const KNOWN_ASSIGNMENT_TOKEN_SET = [
- TokenKind::AsteriskAsteriskEqualsToken => true,
- TokenKind::AsteriskEqualsToken => true,
- TokenKind::SlashEqualsToken => true,
- TokenKind::PercentEqualsToken => true,
- TokenKind::PlusEqualsToken => true,
- TokenKind::MinusEqualsToken => true,
- TokenKind::DotEqualsToken => true,
- TokenKind::LessThanLessThanEqualsToken => true,
- TokenKind::GreaterThanGreaterThanEqualsToken => true,
- TokenKind::AmpersandEqualsToken => true,
- TokenKind::CaretEqualsToken => true,
- TokenKind::BarEqualsToken => true,
- TokenKind::QuestionQuestionEqualsToken => true,
- // InstanceOf has other remaining issues, but this heuristic is an improvement for many common cases such as `$x && $y = $z`
- ];
-
- /**
- * @param Token|Node $leftOperand
- * @param Token $operatorToken
- * @param Token|null $byRefToken
- * @param Token|Node $rightOperand
- * @param Node $parentNode
- * @return BinaryExpression|AssignmentExpression
- */
- private function makeBinaryExpression($leftOperand, $operatorToken, $byRefToken, $rightOperand, $parentNode) {
- $assignmentExpression = $operatorToken->kind === TokenKind::EqualsToken;
- if ($assignmentExpression || \array_key_exists($operatorToken->kind, self::KNOWN_ASSIGNMENT_TOKEN_SET)) {
- if ($leftOperand instanceof BinaryExpression) {
- if (!\array_key_exists($leftOperand->operator->kind, self::KNOWN_ASSIGNMENT_TOKEN_SET)) {
- // Handle cases without parenthesis, such as $x ** $y === $z, as $x ** ($y === $z)
- return $this->shiftBinaryOperands($leftOperand, $operatorToken, $byRefToken, $rightOperand, $parentNode);
- }
- } elseif ($leftOperand instanceof UnaryOpExpression || $leftOperand instanceof ErrorControlExpression) {
- return $this->shiftUnaryOperands($leftOperand, $operatorToken, $byRefToken, $rightOperand, $parentNode);
- }
- }
- $binaryExpression = $assignmentExpression ? new AssignmentExpression() : new BinaryExpression();
- $binaryExpression->parent = $parentNode;
- if ($leftOperand instanceof Node) {
- $leftOperand->parent = $binaryExpression;
- }
- if ($rightOperand instanceof Node) {
- $rightOperand->parent = $binaryExpression;
- }
- $binaryExpression->leftOperand = $leftOperand;
- $binaryExpression->operator = $operatorToken;
- if ($binaryExpression instanceof AssignmentExpression && isset($byRefToken)) {
- $binaryExpression->byRef = $byRefToken;
- }
- $binaryExpression->rightOperand = $rightOperand;
- return $binaryExpression;
- }
-
- /**
- * @param ErrorControlExpression|UnaryOpExpression $leftOperand
- */
- private function shiftUnaryOperands(UnaryExpression $leftOperand, $operatorToken, $byRefToken, $rightOperand, $parentNode) {
- $outerUnaryOpExpression = clone($leftOperand);
- $inner = $this->makeBinaryExpression(
- $leftOperand->operand,
- $operatorToken,
- $byRefToken,
- $rightOperand,
- $outerUnaryOpExpression
- );
- // Either ErrorControlExpression or a UnaryOpExpression
- $outerUnaryOpExpression->parent = $parentNode;
- // TODO should this binaryExpression be wrapped in a UnaryExpression?
- $outerUnaryOpExpression->operand = $inner;
-
- return $outerUnaryOpExpression;
- }
-
- private function shiftBinaryOperands(BinaryExpression $leftOperand, $operatorToken, $byRefToken, $rightOperand, $parentNode) {
- $inner = $this->makeBinaryExpression(
- $leftOperand->rightOperand,
- $operatorToken,
- $byRefToken,
- $rightOperand,
- $parentNode
- );
- $outer = $this->makeBinaryExpression(
- $leftOperand->leftOperand,
- $leftOperand->operator,
- null,
- $inner,
- $parentNode
- );
- $inner->parent = $outer;
- return $outer;
- }
-
- private function parseDoStatement($parentNode) {
- $doStatement = new DoStatement();
- $doStatement->parent = $parentNode;
- $doStatement->do = $this->eat1(TokenKind::DoKeyword);
- $doStatement->statement = $this->parseStatement($doStatement);
- $doStatement->whileToken = $this->eat1(TokenKind::WhileKeyword);
- $doStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $doStatement->expression = $this->parseExpression($doStatement);
- $doStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $doStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- return $doStatement;
- }
-
- private function parseForStatement($parentNode) {
- $forStatement = new ForStatement();
- $forStatement->parent = $parentNode;
- $forStatement->for = $this->eat1(TokenKind::ForKeyword);
- $forStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $forStatement->forInitializer = $this->parseExpressionList($forStatement); // TODO spec is redundant
- $forStatement->exprGroupSemicolon1 = $this->eat1(TokenKind::SemicolonToken);
- $forStatement->forControl = $this->parseExpressionList($forStatement);
- $forStatement->exprGroupSemicolon2 = $this->eat1(TokenKind::SemicolonToken);
- $forStatement->forEndOfLoop = $this->parseExpressionList($forStatement);
- $forStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $forStatement->colon = $this->eatOptional1(TokenKind::ColonToken);
- if ($forStatement->colon !== null) {
- $forStatement->statements = $this->parseList($forStatement, ParseContext::ForStatementElements);
- $forStatement->endFor = $this->eat1(TokenKind::EndForKeyword);
- $forStatement->endForSemicolon = $this->eatSemicolonOrAbortStatement();
- } elseif (!$this->checkToken(TokenKind::ScriptSectionEndTag)) {
- $forStatement->statements = $this->parseStatement($forStatement);
- }
- return $forStatement;
- }
-
- private function parseForeachStatement($parentNode) {
- $foreachStatement = new ForeachStatement();
- $foreachStatement->parent = $parentNode;
- $foreachStatement->foreach = $this->eat1(TokenKind::ForeachKeyword);
- $foreachStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $foreachStatement->forEachCollectionName = $this->parseExpression($foreachStatement);
- $foreachStatement->asKeyword = $this->eat1(TokenKind::AsKeyword);
- $foreachStatement->foreachKey = $this->tryParseForeachKey($foreachStatement);
- $foreachStatement->foreachValue = $this->parseForeachValue($foreachStatement);
- $foreachStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $foreachStatement->colon = $this->eatOptional1(TokenKind::ColonToken);
- if ($foreachStatement->colon !== null) {
- $foreachStatement->statements = $this->parseList($foreachStatement, ParseContext::ForeachStatementElements);
- $foreachStatement->endForeach = $this->eat1(TokenKind::EndForEachKeyword);
- $foreachStatement->endForeachSemicolon = $this->eatSemicolonOrAbortStatement();
- } elseif (!$this->checkToken(TokenKind::ScriptSectionEndTag)) {
- $foreachStatement->statements = $this->parseStatement($foreachStatement);
- }
- return $foreachStatement;
- }
-
- private function tryParseForeachKey($parentNode) {
- if (!$this->isExpressionStart($this->getCurrentToken())) {
- return null;
- }
-
- $startPos = $this->lexer->getCurrentPosition();
- $startToken = $this->getCurrentToken();
- $foreachKey = new ForeachKey();
- $foreachKey->parent = $parentNode;
- $foreachKey->expression = $this->parseExpression($foreachKey);
-
- if (!$this->checkToken(TokenKind::DoubleArrowToken)) {
- $this->lexer->setCurrentPosition($startPos);
- $this->token = $startToken;
- return null;
- }
-
- $foreachKey->arrow = $this->eat1(TokenKind::DoubleArrowToken);
- return $foreachKey;
- }
-
- private function parseForeachValue($parentNode) {
- $foreachValue = new ForeachValue();
- $foreachValue->parent = $parentNode;
- $foreachValue->ampersand = $this->eatOptional1(TokenKind::AmpersandToken);
- $foreachValue->expression = $this->parseExpression($foreachValue);
- return $foreachValue;
- }
-
- private function parseGotoStatement($parentNode) {
- $gotoStatement = new GotoStatement();
- $gotoStatement->parent = $parentNode;
- $gotoStatement->goto = $this->eat1(TokenKind::GotoKeyword);
- $gotoStatement->name = $this->eat1(TokenKind::Name);
- $gotoStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- return $gotoStatement;
- }
-
- private function parseBreakOrContinueStatement($parentNode) {
- // TODO should be error checking if on top level
- $continueStatement = new BreakOrContinueStatement();
- $continueStatement->parent = $parentNode;
- $continueStatement->breakOrContinueKeyword = $this->eat(TokenKind::ContinueKeyword, TokenKind::BreakKeyword);
-
- if ($this->isExpressionStart($this->getCurrentToken())) {
- $continueStatement->breakoutLevel = $this->parseExpression($continueStatement);
- }
-
- $continueStatement->semicolon = $this->eatSemicolonOrAbortStatement();
-
- return $continueStatement;
- }
-
- private function parseReturnStatement($parentNode) {
- $returnStatement = new ReturnStatement();
- $returnStatement->parent = $parentNode;
- $returnStatement->returnKeyword = $this->eat1(TokenKind::ReturnKeyword);
- if ($this->isExpressionStart($this->getCurrentToken())) {
- $returnStatement->expression = $this->parseExpression($returnStatement);
- }
- $returnStatement->semicolon = $this->eatSemicolonOrAbortStatement();
-
- return $returnStatement;
- }
-
- /** @return ThrowExpression */
- private function parseThrowExpression($parentNode) {
- $throwExpression = new ThrowExpression();
- $throwExpression->parent = $parentNode;
- $throwExpression->throwKeyword = $this->eat1(TokenKind::ThrowKeyword);
- // TODO error for failures to parse expressions when not optional
- $throwExpression->expression = $this->parseExpression($throwExpression);
-
- return $throwExpression;
- }
-
- private function parseTryStatement($parentNode) {
- $tryStatement = new TryStatement();
- $tryStatement->parent = $parentNode;
- $tryStatement->tryKeyword = $this->eat1(TokenKind::TryKeyword);
- $tryStatement->compoundStatement = $this->parseCompoundStatement($tryStatement); // TODO verifiy this is only compound
-
- $tryStatement->catchClauses = []; // TODO - should be some standard for empty arrays vs. null?
- while ($this->checkToken(TokenKind::CatchKeyword)) {
- $tryStatement->catchClauses[] = $this->parseCatchClause($tryStatement);
- }
-
- if ($this->checkToken(TokenKind::FinallyKeyword)) {
- $tryStatement->finallyClause = $this->parseFinallyClause($tryStatement);
- }
-
- return $tryStatement;
- }
-
- private function parseCatchClause($parentNode) {
- $catchClause = new CatchClause();
- $catchClause->parent = $parentNode;
- $catchClause->catch = $this->eat1(TokenKind::CatchKeyword);
- $catchClause->openParen = $this->eat1(TokenKind::OpenParenToken);
- $catchClause->qualifiedNameList = $this->parseQualifiedNameCatchList($catchClause) ?? new MissingToken(TokenKind::QualifiedName, $this->token->fullStart); // TODO generate missing token or error if null
- $catchClause->variableName = $this->eatOptional1(TokenKind::VariableName);
- $catchClause->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $catchClause->compoundStatement = $this->parseCompoundStatement($catchClause);
-
- return $catchClause;
- }
-
- private function parseFinallyClause($parentNode) {
- $finallyClause = new FinallyClause();
- $finallyClause->parent = $parentNode;
- $finallyClause->finallyToken = $this->eat1(TokenKind::FinallyKeyword);
- $finallyClause->compoundStatement = $this->parseCompoundStatement($finallyClause);
-
- return $finallyClause;
- }
-
- private function parseDeclareStatement($parentNode) {
- $declareStatement = new DeclareStatement();
- $declareStatement->parent = $parentNode;
- $declareStatement->declareKeyword = $this->eat1(TokenKind::DeclareKeyword);
- $declareStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $this->parseAndSetDeclareDirectiveList($declareStatement);
- $declareStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
-
- if ($this->checkToken(TokenKind::SemicolonToken)) {
- $declareStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- } elseif ($this->checkToken(TokenKind::ColonToken)) {
- $declareStatement->colon = $this->eat1(TokenKind::ColonToken);
- $declareStatement->statements = $this->parseList($declareStatement, ParseContext::DeclareStatementElements);
- $declareStatement->enddeclareKeyword = $this->eat1(TokenKind::EndDeclareKeyword);
- $declareStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- } else {
- $declareStatement->statements = $this->parseStatement($declareStatement);
- }
-
- return $declareStatement;
- }
-
- /**
- * @param DeclareStatement $parentNode
- */
- private function parseAndSetDeclareDirectiveList($parentNode) {
- $declareDirectiveList = $this->parseDeclareDirectiveList($parentNode);
-
- $parentNode->declareDirectiveList = $declareDirectiveList ?? new MissingToken(TokenKind::Name, $this->token->fullStart);
- }
-
- /**
- * @param DeclareStatement $parentNode
- * @return DelimitedList\DeclareDirectiveList|null
- */
- private function parseDeclareDirectiveList($parentNode) {
- $declareDirectiveList = $this->parseDelimitedList(
- DelimitedList\DeclareDirectiveList::class,
- TokenKind::CommaToken,
- function ($token) {
- return $token->kind === TokenKind::Name;
- },
- $this->parseDeclareDirectiveFn(),
- $parentNode,
- false
- );
-
- return $declareDirectiveList;
- }
-
- private function parseDeclareDirectiveFn() {
- return function ($parentNode) {
- $declareDirective = new DeclareDirective();
- $declareDirective->parent = $parentNode;
- $declareDirective->name = $this->eat1(TokenKind::Name);
- $declareDirective->equals = $this->eat1(TokenKind::EqualsToken);
- $declareDirective->literal =
- $this->eat(
- TokenKind::FloatingLiteralToken,
- TokenKind::IntegerLiteralToken,
- TokenKind::DecimalLiteralToken,
- TokenKind::OctalLiteralToken,
- TokenKind::HexadecimalLiteralToken,
- TokenKind::BinaryLiteralToken,
- TokenKind::InvalidOctalLiteralToken,
- TokenKind::InvalidHexadecimalLiteral,
- TokenKind::InvalidBinaryLiteral,
- TokenKind::StringLiteralToken
- ); // TODO simplify
-
- return $declareDirective;
- };
- }
-
- private function parseSimpleVariable($parentNode) {
- return ($this->parseSimpleVariableFn())($parentNode);
- }
-
- private function parseSimpleVariableFn() {
- return function ($parentNode) {
- $token = $this->getCurrentToken();
- $variable = new Variable();
- $variable->parent = $parentNode;
-
- if ($token->kind === TokenKind::DollarToken) {
- $variable->dollar = $this->eat1(TokenKind::DollarToken);
- $token = $this->getCurrentToken();
-
- switch ($token->kind) {
- case TokenKind::OpenBraceToken:
- $variable->name = $this->parseBracedExpression($variable);
- break;
- case TokenKind::VariableName:
- case TokenKind::StringVarname:
- case TokenKind::DollarToken:
- $variable->name = $this->parseSimpleVariable($variable);
- break;
- default:
- $variable->name = new MissingToken(TokenKind::VariableName, $token->fullStart);
- break;
- }
- } elseif ($token->kind === TokenKind::VariableName || $token->kind === TokenKind::StringVarname) {
- // TODO consider splitting into dollar and name.
- // StringVarname is the variable name without $, used in a template string e.g. `"${foo}"`
- $variable->name = $this->eat(TokenKind::VariableName, TokenKind::StringVarname);
- } else {
- $variable->name = new MissingToken(TokenKind::VariableName, $token->fullStart);
- }
-
- return $variable;
- };
- }
-
- private function parseYieldExpression($parentNode) {
- $yieldExpression = new YieldExpression();
- $yieldExpression->parent = $parentNode;
- $yieldExpression->yieldOrYieldFromKeyword = $this->eat(
- TokenKind::YieldFromKeyword,
- TokenKind::YieldKeyword
- );
- if ($yieldExpression->yieldOrYieldFromKeyword->kind === TokenKind::YieldFromKeyword) {
- // Don't use parseArrayElement. E.g. `yield from &$varName` or `yield from $key => $varName` are both syntax errors
- $arrayElement = new ArrayElement();
- $arrayElement->parent = $yieldExpression;
- $arrayElement->elementValue = $this->parseExpression($arrayElement);
- $yieldExpression->arrayElement = $arrayElement;
- } else {
- // This is always an ArrayElement for backwards compatibilitiy.
- // TODO: Can this be changed to a non-ArrayElement in a future release?
- if ($this->isExpressionStart($this->getCurrentToken())) {
- // Both `yield expr;` and `yield;` are possible.
- $yieldExpression->arrayElement = $this->parseArrayElement($yieldExpression);
- } else {
- $yieldExpression->arrayElement = null;
- }
- }
-
- return $yieldExpression;
- }
-
- private function parseScriptInclusionExpression($parentNode) {
- $scriptInclusionExpression = new ScriptInclusionExpression();
- $scriptInclusionExpression->parent = $parentNode;
- $scriptInclusionExpression->requireOrIncludeKeyword =
- $this->eat(
- TokenKind::RequireKeyword, TokenKind::RequireOnceKeyword,
- TokenKind::IncludeKeyword, TokenKind::IncludeOnceKeyword
- );
- $scriptInclusionExpression->expression = $this->parseExpression($scriptInclusionExpression);
- return $scriptInclusionExpression;
- }
-
- /** @return EchoStatement */
- private function parseEchoStatement($parentNode) {
- $echoStatement = new EchoStatement();
- $echoStatement->parent = $parentNode;
- $echoStatement->echoKeyword = $this->eat1(TokenKind::EchoKeyword);
- $echoStatement->expressions =
- $this->parseExpressionList($echoStatement);
- $echoStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- return $echoStatement;
- }
-
- private function parseListIntrinsicExpression($parentNode) {
- $listExpression = new ListIntrinsicExpression();
- $listExpression->parent = $parentNode;
- $listExpression->listKeyword = $this->eat1(TokenKind::ListKeyword);
- $listExpression->openParen = $this->eat1(TokenKind::OpenParenToken);
- // TODO - parse loosely as ArrayElementList, and validate parse tree later
- $listExpression->listElements =
- $this->parseArrayElementList($listExpression, DelimitedList\ListExpressionList::class);
- $listExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
-
- return $listExpression;
- }
-
- private function isArrayElementStart($token) {
- return ($this->isArrayElementStartFn())($token);
- }
-
- private function isArrayElementStartFn() {
- return function ($token) {
- return $token->kind === TokenKind::AmpersandToken || $token->kind === TokenKind::DotDotDotToken || $this->isExpressionStart($token);
- };
- }
-
- private function parseArrayElement($parentNode) {
- return ($this->parseArrayElementFn())($parentNode);
- }
-
- private function parseArrayElementFn() {
- return function ($parentNode) {
- $arrayElement = new ArrayElement();
- $arrayElement->parent = $parentNode;
-
- if ($this->checkToken(TokenKind::AmpersandToken)) {
- $arrayElement->byRef = $this->eat1(TokenKind::AmpersandToken);
- $arrayElement->elementValue = $this->parseExpression($arrayElement);
- } elseif ($this->checkToken(TokenKind::DotDotDotToken)) {
- $arrayElement->dotDotDot = $this->eat1(TokenKind::DotDotDotToken);
- $arrayElement->elementValue = $this->parseExpression($arrayElement);
- } else {
- $expression = $this->parseExpression($arrayElement);
- if ($this->checkToken(TokenKind::DoubleArrowToken)) {
- $arrayElement->elementKey = $expression;
- $arrayElement->arrowToken = $this->eat1(TokenKind::DoubleArrowToken);
- $arrayElement->byRef = $this->eatOptional1(TokenKind::AmpersandToken); // TODO not okay for list expressions
- $arrayElement->elementValue = $this->parseExpression($arrayElement);
- } else {
- $arrayElement->elementValue = $expression;
- }
- }
-
- return $arrayElement;
- };
- }
-
- private function parseExpressionList($parentExpression) {
- return $this->parseDelimitedList(
- DelimitedList\ExpressionList::class,
- TokenKind::CommaToken,
- $this->isExpressionStartFn(),
- $this->parseExpressionFn(),
- $parentExpression
- );
- }
-
- private function parseUnsetStatement($parentNode) {
- $unsetStatement = new UnsetStatement();
- $unsetStatement->parent = $parentNode;
-
- $unsetStatement->unsetKeyword = $this->eat1(TokenKind::UnsetKeyword);
- $unsetStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $unsetStatement->expressions = $this->parseExpressionList($unsetStatement);
- $unsetStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $unsetStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- return $unsetStatement;
- }
-
- private function parseHaltCompilerStatement($parentNode) {
- $haltCompilerStatement = new HaltCompilerStatement();
- $haltCompilerStatement->parent = $parentNode;
-
- $haltCompilerStatement->haltCompilerKeyword = $this->eat1(TokenKind::HaltCompilerKeyword);
- $haltCompilerStatement->openParen = $this->eat1(TokenKind::OpenParenToken);
- $haltCompilerStatement->closeParen = $this->eat1(TokenKind::CloseParenToken);
- // There is an implicit ';' before the closing php tag.
- $haltCompilerStatement->semicolonOrCloseTag = $this->eat(TokenKind::SemicolonToken, TokenKind::ScriptSectionEndTag);
- // token_get_all() will return up to 3 tokens after __halt_compiler regardless of whether they're the right ones.
- // For invalid php snippets, combine the remaining tokens into InlineHtml
- $remainingTokens = [];
- while ($this->token->kind !== TokenKind::EndOfFileToken) {
- $remainingTokens[] = $this->token;
- $this->advanceToken();
- }
- if ($remainingTokens) {
- $firstToken = $remainingTokens[0];
- $lastToken = end($remainingTokens);
- $haltCompilerStatement->data = new Token(TokenKind::InlineHtml, $firstToken->fullStart, $firstToken->fullStart, $lastToken->fullStart + $lastToken->length - $firstToken->fullStart);
- }
- return $haltCompilerStatement;
- }
-
- private function parseArrayCreationExpression($parentNode) {
- $arrayExpression = new ArrayCreationExpression();
- $arrayExpression->parent = $parentNode;
-
- $arrayExpression->arrayKeyword = $this->eatOptional1(TokenKind::ArrayKeyword);
-
- $arrayExpression->openParenOrBracket = $arrayExpression->arrayKeyword !== null
- ? $this->eat1(TokenKind::OpenParenToken)
- : $this->eat1(TokenKind::OpenBracketToken);
-
- $arrayExpression->arrayElements = $this->parseArrayElementList($arrayExpression, DelimitedList\ArrayElementList::class);
-
- $arrayExpression->closeParenOrBracket = $arrayExpression->arrayKeyword !== null
- ? $this->eat1(TokenKind::CloseParenToken)
- : $this->eat1(TokenKind::CloseBracketToken);
-
- return $arrayExpression;
- }
-
- private function parseArrayElementList($listExpression, $className) {
- return $this->parseDelimitedList(
- $className,
- TokenKind::CommaToken,
- $this->isArrayElementStartFn(),
- $this->parseArrayElementFn(),
- $listExpression,
- true
- );
- }
-
- private function parseEmptyIntrinsicExpression($parentNode) {
- $emptyExpression = new EmptyIntrinsicExpression();
- $emptyExpression->parent = $parentNode;
-
- $emptyExpression->emptyKeyword = $this->eat1(TokenKind::EmptyKeyword);
- $emptyExpression->openParen = $this->eat1(TokenKind::OpenParenToken);
- $emptyExpression->expression = $this->parseExpression($emptyExpression);
- $emptyExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
-
- return $emptyExpression;
- }
-
- private function parseEvalIntrinsicExpression($parentNode) {
- $evalExpression = new EvalIntrinsicExpression();
- $evalExpression->parent = $parentNode;
-
- $evalExpression->evalKeyword = $this->eat1(TokenKind::EvalKeyword);
- $evalExpression->openParen = $this->eat1(TokenKind::OpenParenToken);
- $evalExpression->expression = $this->parseExpression($evalExpression);
- $evalExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
-
- return $evalExpression;
- }
-
- private function parseParenthesizedExpression($parentNode) {
- $parenthesizedExpression = new ParenthesizedExpression();
- $parenthesizedExpression->parent = $parentNode;
-
- $parenthesizedExpression->openParen = $this->eat1(TokenKind::OpenParenToken);
- $parenthesizedExpression->expression = $this->parseExpression($parenthesizedExpression);
- $parenthesizedExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
-
- return $parenthesizedExpression;
- }
-
- private function parseExitIntrinsicExpression($parentNode) {
- $exitExpression = new ExitIntrinsicExpression();
- $exitExpression->parent = $parentNode;
-
- $exitExpression->exitOrDieKeyword = $this->eat(TokenKind::ExitKeyword, TokenKind::DieKeyword);
- $exitExpression->openParen = $this->eatOptional1(TokenKind::OpenParenToken);
- if ($exitExpression->openParen !== null) {
- if ($this->isExpressionStart($this->getCurrentToken())) {
- $exitExpression->expression = $this->parseExpression($exitExpression);
- }
- $exitExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
- }
-
- return $exitExpression;
- }
-
- private function parsePrintIntrinsicExpression($parentNode) {
- $printExpression = new PrintIntrinsicExpression();
- $printExpression->parent = $parentNode;
-
- $printExpression->printKeyword = $this->eat1(TokenKind::PrintKeyword);
- $printExpression->expression = $this->parseExpression($printExpression);
-
- return $printExpression;
- }
-
- private function parseIssetIntrinsicExpression($parentNode) {
- $issetExpression = new IssetIntrinsicExpression();
- $issetExpression->parent = $parentNode;
-
- $issetExpression->issetKeyword = $this->eat1(TokenKind::IsSetKeyword);
- $issetExpression->openParen = $this->eat1(TokenKind::OpenParenToken);
- $issetExpression->expressions = $this->parseExpressionList($issetExpression);
- $issetExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
-
- return $issetExpression;
- }
-
- private function parseUnaryOpExpression($parentNode) {
- $unaryOpExpression = new UnaryOpExpression();
- $unaryOpExpression->parent = $parentNode;
- $unaryOpExpression->operator =
- $this->eat(TokenKind::PlusToken, TokenKind::MinusToken, TokenKind::ExclamationToken, TokenKind::TildeToken);
- $unaryOpExpression->operand = $this->parseUnaryExpressionOrHigher($unaryOpExpression);
-
- return $unaryOpExpression;
- }
-
- private function parseErrorControlExpression($parentNode) {
- $errorControlExpression = new ErrorControlExpression();
- $errorControlExpression->parent = $parentNode;
-
- $errorControlExpression->operator = $this->eat1(TokenKind::AtSymbolToken);
- $errorControlExpression->operand = $this->parseUnaryExpressionOrHigher($errorControlExpression);
-
- return $errorControlExpression;
- }
-
- private function parsePrefixUpdateExpression($parentNode) {
- $prefixUpdateExpression = new PrefixUpdateExpression();
- $prefixUpdateExpression->parent = $parentNode;
-
- $prefixUpdateExpression->incrementOrDecrementOperator = $this->eat(TokenKind::PlusPlusToken, TokenKind::MinusMinusToken);
-
- $prefixUpdateExpression->operand = $this->parsePrimaryExpression($prefixUpdateExpression);
-
- if (!($prefixUpdateExpression->operand instanceof MissingToken)) {
- $prefixUpdateExpression->operand = $this->parsePostfixExpressionRest($prefixUpdateExpression->operand, false);
- }
-
- // TODO also check operand expression validity
- return $prefixUpdateExpression;
- }
-
- private function parsePostfixExpressionRest($expression, $allowUpdateExpression = true) {
- $tokenKind = $this->getCurrentToken()->kind;
-
- // `--$a++` is invalid
- if ($allowUpdateExpression &&
- ($tokenKind === TokenKind::PlusPlusToken ||
- $tokenKind === TokenKind::MinusMinusToken)) {
- return $this->parseParsePostfixUpdateExpression($expression);
- }
-
- // TODO write tons of tests
- if (!($expression instanceof Variable ||
- $expression instanceof ParenthesizedExpression ||
- $expression instanceof QualifiedName ||
- $expression instanceof CallExpression ||
- $expression instanceof MemberAccessExpression ||
- $expression instanceof SubscriptExpression ||
- $expression instanceof ScopedPropertyAccessExpression ||
- $expression instanceof StringLiteral ||
- $expression instanceof ArrayCreationExpression
- )) {
- return $expression;
- }
- if ($tokenKind === TokenKind::ColonColonToken) {
- $expression = $this->parseScopedPropertyAccessExpression($expression, null);
- return $this->parsePostfixExpressionRest($expression);
- }
-
- $tokenKind = $this->getCurrentToken()->kind;
-
- if ($tokenKind === TokenKind::OpenBraceToken ||
- $tokenKind === TokenKind::OpenBracketToken) {
- $expression = $this->parseSubscriptExpression($expression);
- return $this->parsePostfixExpressionRest($expression);
- }
-
- if ($expression instanceof ArrayCreationExpression) {
- // Remaining postfix expressions are invalid, so abort
- return $expression;
- }
-
- if ($tokenKind === TokenKind::ArrowToken || $tokenKind === TokenKind::QuestionArrowToken) {
- $expression = $this->parseMemberAccessExpression($expression);
- return $this->parsePostfixExpressionRest($expression);
- }
-
- if ($tokenKind === TokenKind::OpenParenToken && !$this->isParsingUnparenthesizedObjectCreationExpression($expression)) {
- $expression = $this->parseCallExpressionRest($expression);
-
- if (!$this->checkToken(TokenKind::OpenParenToken)) {
- return $this->parsePostfixExpressionRest($expression);
- }
- if (
- $expression instanceof ParenthesizedExpression ||
- $expression instanceof CallExpression ||
- $expression instanceof SubscriptExpression) {
- // Continue parsing the remaining brackets for expressions
- // such as `(new Foo())()`, `foo()()`, `foo()['index']()`
- return $this->parsePostfixExpressionRest($expression);
- }
- return $expression;
- }
-
- // Reached the end of the postfix-expression, so return
- return $expression;
- }
-
- private function parseMemberName($parentNode) {
- $token = $this->getCurrentToken();
- switch ($token->kind) {
- case TokenKind::Name:
- $this->advanceToken(); // TODO all names should be Nodes
- return $token;
- case TokenKind::VariableName:
- case TokenKind::DollarToken:
- return $this->parseSimpleVariable($parentNode); // TODO should be simple-variable
- case TokenKind::OpenBraceToken:
- return $this->parseBracedExpression($parentNode);
-
- default:
- if (\in_array($token->kind, $this->nameOrKeywordOrReservedWordTokens)) {
- $this->advanceToken();
- $token->kind = TokenKind::Name;
- return $token;
- }
- }
- return new MissingToken(TokenKind::MemberName, $token->fullStart);
- }
-
- private function isArgumentExpressionStartFn() {
- return function ($token) {
- return
- isset($this->argumentStartTokensSet[$token->kind]) || $this->isExpressionStart($token);
- };
- }
-
- private function parseArgumentExpressionFn() {
- return function ($parentNode) {
- $argumentExpression = new ArgumentExpression();
- $argumentExpression->parent = $parentNode;
-
- $nextToken = $this->lexer->getTokensArray()[$this->lexer->getCurrentPosition()] ?? null;
- if ($nextToken && $nextToken->kind === TokenKind::ColonToken) {
- $name = $this->token;
- $this->advanceToken();
- if ($name->kind === TokenKind::YieldFromKeyword || !\in_array($name->kind, $this->nameOrKeywordOrReservedWordTokens)) {
- $name = new SkippedToken($name);
- } else {
- $name->kind = TokenKind::Name;
- }
- $argumentExpression->name = $name;
- $argumentExpression->colonToken = $this->eat1(TokenKind::ColonToken);
- } else {
- $argumentExpression->dotDotDotToken = $this->eatOptional1(TokenKind::DotDotDotToken);
- }
- $argumentExpression->expression = $this->parseExpression($argumentExpression);
- return $argumentExpression;
- };
- }
-
- private function parseCallExpressionRest($expression) {
- $callExpression = new CallExpression();
- $callExpression->parent = $expression->parent;
- $expression->parent = $callExpression;
- $callExpression->callableExpression = $expression;
- $callExpression->openParen = $this->eat1(TokenKind::OpenParenToken);
- $callExpression->argumentExpressionList =
- $this->parseArgumentExpressionList($callExpression);
- $callExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
- return $callExpression;
- }
-
- private function parseParsePostfixUpdateExpression($prefixExpression) {
- $postfixUpdateExpression = new PostfixUpdateExpression();
- $postfixUpdateExpression->operand = $prefixExpression;
- $postfixUpdateExpression->parent = $prefixExpression->parent;
- $prefixExpression->parent = $postfixUpdateExpression;
- $postfixUpdateExpression->incrementOrDecrementOperator =
- $this->eat(TokenKind::PlusPlusToken, TokenKind::MinusMinusToken);
- return $postfixUpdateExpression;
- }
-
- private function parseBracedExpression($parentNode) {
- $bracedExpression = new BracedExpression();
- $bracedExpression->parent = $parentNode;
-
- $bracedExpression->openBrace = $this->eat1(TokenKind::OpenBraceToken);
- $bracedExpression->expression = $this->parseExpression($bracedExpression);
- $bracedExpression->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
-
- return $bracedExpression;
- }
-
- private function parseSubscriptExpression($expression) : SubscriptExpression {
- $subscriptExpression = new SubscriptExpression();
- $subscriptExpression->parent = $expression->parent;
- $expression->parent = $subscriptExpression;
-
- $subscriptExpression->postfixExpression = $expression;
- $subscriptExpression->openBracketOrBrace = $this->eat(TokenKind::OpenBracketToken, TokenKind::OpenBraceToken);
- $subscriptExpression->accessExpression = $this->isExpressionStart($this->getCurrentToken())
- ? $this->parseExpression($subscriptExpression)
- : null; // TODO error if used in a getter
-
- if ($subscriptExpression->openBracketOrBrace->kind === TokenKind::OpenBraceToken) {
- $subscriptExpression->closeBracketOrBrace = $this->eat1(TokenKind::CloseBraceToken);
- } else {
- $subscriptExpression->closeBracketOrBrace = $this->eat1(TokenKind::CloseBracketToken);
- }
-
- return $subscriptExpression;
- }
-
- private function parseMemberAccessExpression($expression):MemberAccessExpression {
- $memberAccessExpression = new MemberAccessExpression();
- $memberAccessExpression->parent = $expression->parent;
- $expression->parent = $memberAccessExpression;
-
- $memberAccessExpression->dereferencableExpression = $expression;
- $memberAccessExpression->arrowToken = $this->eat(TokenKind::ArrowToken, TokenKind::QuestionArrowToken);
- $memberAccessExpression->memberName = $this->parseMemberName($memberAccessExpression);
-
- return $memberAccessExpression;
- }
-
- /**
- * @param Node|null $expression
- * @param Node|null $fallbackParentNode (Workaround for the invalid AST `use TraitName::foo as ::x`)
- */
- private function parseScopedPropertyAccessExpression($expression, $fallbackParentNode): ScopedPropertyAccessExpression {
- $scopedPropertyAccessExpression = new ScopedPropertyAccessExpression();
- $scopedPropertyAccessExpression->parent = $expression->parent ?? $fallbackParentNode;
- if ($expression instanceof Node) {
- $expression->parent = $scopedPropertyAccessExpression;
- $scopedPropertyAccessExpression->scopeResolutionQualifier = $expression; // TODO ensure always a Node
- }
-
- $scopedPropertyAccessExpression->doubleColon = $this->eat1(TokenKind::ColonColonToken);
- $scopedPropertyAccessExpression->memberName = $this->parseMemberName($scopedPropertyAccessExpression);
-
- return $scopedPropertyAccessExpression;
- }
-
- public function isParsingUnparenthesizedObjectCreationExpression($expression) {
- if (!$this->isParsingObjectCreationExpression) {
- return false;
- }
- if ($expression instanceof Token) {
- return true;
- }
- while ($expression->parent) {
- $expression = $expression->parent;
- if ($expression instanceof ObjectCreationExpression) {
- return true;
- } elseif ($expression instanceof ParenthesizedExpression) {
- return false;
- }
- }
- }
-
- private $isParsingObjectCreationExpression = false;
-
- private function parseObjectCreationExpression($parentNode) {
- $objectCreationExpression = new ObjectCreationExpression();
- $objectCreationExpression->parent = $parentNode;
- $objectCreationExpression->newKeword = $this->eat1(TokenKind::NewKeyword);
- // TODO - add tests for this scenario
- $oldIsParsingObjectCreationExpression = $this->isParsingObjectCreationExpression;
- $this->isParsingObjectCreationExpression = true;
-
- if ($this->getCurrentToken()->kind === TokenKind::AttributeToken) {
- // Attributes such as `new #[MyAttr] class` can only be used with anonymous class declarations.
- // But handle this like $objectCreationExpression->classMembers and leave it up to the applications to detect the invalid combination.
- $objectCreationExpression->attributes = $this->parseAttributeGroups($objectCreationExpression);
- }
- $objectCreationExpression->classTypeDesignator =
- $this->eatOptional1(TokenKind::ClassKeyword) ??
- $this->parseExpression($objectCreationExpression);
-
- $this->isParsingObjectCreationExpression = $oldIsParsingObjectCreationExpression;
-
- $objectCreationExpression->openParen = $this->eatOptional1(TokenKind::OpenParenToken);
- if ($objectCreationExpression->openParen !== null) {
- $objectCreationExpression->argumentExpressionList = $this->parseArgumentExpressionList($objectCreationExpression);
- $objectCreationExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
- }
-
- $objectCreationExpression->classBaseClause = $this->parseClassBaseClause($objectCreationExpression);
- $objectCreationExpression->classInterfaceClause = $this->parseClassInterfaceClause($objectCreationExpression);
-
- if ($this->getCurrentToken()->kind === TokenKind::OpenBraceToken) {
- $objectCreationExpression->classMembers = $this->parseClassMembers($objectCreationExpression);
- }
-
- return $objectCreationExpression;
- }
-
- /**
- * @return DelimitedList\ArgumentExpressionList|null
- */
- private function parseArgumentExpressionList($parentNode) {
- $list = $this->parseDelimitedList(
- DelimitedList\ArgumentExpressionList::class,
- TokenKind::CommaToken,
- $this->isArgumentExpressionStartFn(),
- $this->parseArgumentExpressionFn(),
- $parentNode
- );
- $children = $list->children ?? null;
- if (is_array($children) && \count($children) === 1) {
- $arg = $children[0];
- if ($arg instanceof ArgumentExpression) {
- if ($arg->dotDotDotToken && $arg->expression instanceof MissingToken && !$arg->colonToken && !$arg->name) {
- $arg->expression = null;
- }
- }
- }
- return $list;
- }
-
- /**
- * @param Node|Token $leftOperand (should only be a token for invalid ASTs)
- * @param Token $questionToken
- * @param Node $fallbackParentNode
- */
- private function parseTernaryExpression($leftOperand, $questionToken, $fallbackParentNode):TernaryExpression {
- $ternaryExpression = new TernaryExpression();
- if ($leftOperand instanceof Node) {
- $ternaryExpression->parent = $leftOperand->parent;
- $leftOperand->parent = $ternaryExpression;
- } else {
- $ternaryExpression->parent = $fallbackParentNode;
- }
- $ternaryExpression->condition = $leftOperand;
- $ternaryExpression->questionToken = $questionToken;
- $ternaryExpression->ifExpression = $this->isExpressionStart($this->getCurrentToken()) ? $this->parseExpression($ternaryExpression) : null;
- $ternaryExpression->colonToken = $this->eat1(TokenKind::ColonToken);
- $ternaryExpression->elseExpression = $this->parseBinaryExpressionOrHigher(9, $ternaryExpression);
- $leftOperand = $ternaryExpression;
- return $leftOperand;
- }
-
- private function parseClassInterfaceClause($parentNode) {
- $classInterfaceClause = new ClassInterfaceClause();
- $classInterfaceClause->parent = $parentNode;
- $classInterfaceClause->implementsKeyword = $this->eatOptional1(TokenKind::ImplementsKeyword);
-
- if ($classInterfaceClause->implementsKeyword === null) {
- return null;
- }
-
- $classInterfaceClause->interfaceNameList =
- $this->parseQualifiedNameList($classInterfaceClause);
- return $classInterfaceClause;
- }
-
- private function parseClassBaseClause($parentNode) {
- $classBaseClause = new ClassBaseClause();
- $classBaseClause->parent = $parentNode;
-
- $classBaseClause->extendsKeyword = $this->eatOptional1(TokenKind::ExtendsKeyword);
- if ($classBaseClause->extendsKeyword === null) {
- return null;
- }
- $classBaseClause->baseClass = $this->parseQualifiedName($classBaseClause) ?? new MissingToken(TokenKind::QualifiedName, $this->token->fullStart);
-
- return $classBaseClause;
- }
-
- private function parseClassConstDeclaration($parentNode, $modifiers) {
- $classConstDeclaration = new ClassConstDeclaration();
- $classConstDeclaration->parent = $parentNode;
-
- $classConstDeclaration->modifiers = $modifiers;
- $classConstDeclaration->constKeyword = $this->eat1(TokenKind::ConstKeyword);
- $classConstDeclaration->constElements = $this->parseConstElements($classConstDeclaration);
- $classConstDeclaration->semicolon = $this->eat1(TokenKind::SemicolonToken);
-
- return $classConstDeclaration;
- }
-
- private function parseEnumCaseDeclaration($parentNode) {
- $classConstDeclaration = new EnumCaseDeclaration();
- $classConstDeclaration->parent = $parentNode;
- $classConstDeclaration->caseKeyword = $this->eat1(TokenKind::CaseKeyword);
- $classConstDeclaration->name = $this->eat($this->nameOrKeywordOrReservedWordTokens);
- $classConstDeclaration->equalsToken = $this->eatOptional1(TokenKind::EqualsToken);
- if ($classConstDeclaration->equalsToken !== null) {
- // TODO add post-parse rule that checks for invalid assignments
- $classConstDeclaration->assignment = $this->parseExpression($classConstDeclaration);
- }
- $classConstDeclaration->semicolon = $this->eat1(TokenKind::SemicolonToken);
-
- return $classConstDeclaration;
- }
-
- /**
- * @param Node $parentNode
- * @param Token[] $modifiers
- * @param Token|null $questionToken
- */
- private function parseRemainingPropertyDeclarationOrMissingMemberDeclaration($parentNode, $modifiers, $questionToken = null)
- {
- $typeDeclarationList = $this->tryParseParameterTypeDeclarationList(null);
- if ($this->getCurrentToken()->kind !== TokenKind::VariableName) {
- return $this->makeMissingMemberDeclaration($parentNode, $modifiers, $questionToken, $typeDeclarationList);
- }
- return $this->parsePropertyDeclaration($parentNode, $modifiers, $questionToken, $typeDeclarationList);
- }
-
- /**
- * @param Node $parentNode
- * @param Token[] $modifiers
- * @param Token|null $questionToken
- * @param DelimitedList\QualifiedNameList|null $typeDeclarationList
- */
- private function parsePropertyDeclaration($parentNode, $modifiers, $questionToken = null, $typeDeclarationList = null) {
- $propertyDeclaration = new PropertyDeclaration();
- $propertyDeclaration->parent = $parentNode;
-
- $propertyDeclaration->modifiers = $modifiers;
- $propertyDeclaration->questionToken = $questionToken;
- if ($typeDeclarationList) {
- $propertyDeclaration->typeDeclarationList = $typeDeclarationList;
- $typeDeclarationList->parent = $propertyDeclaration;
- } elseif ($questionToken) {
- $propertyDeclaration->typeDeclarationList = new MissingToken(TokenKind::PropertyType, $this->token->fullStart);
- }
- $propertyDeclaration->propertyElements = $this->parseExpressionList($propertyDeclaration);
- $propertyDeclaration->semicolon = $this->eat1(TokenKind::SemicolonToken);
-
- return $propertyDeclaration;
- }
-
- /**
- * Parse a comma separated qualified name list (e.g. interfaces implemented by a class)
- *
- * @param Node $parentNode
- * @return DelimitedList\QualifiedNameList
- */
- private function parseQualifiedNameList($parentNode) {
- return $this->parseDelimitedList(
- DelimitedList\QualifiedNameList::class,
- TokenKind::CommaToken,
- $this->isQualifiedNameStartFn(),
- $this->parseQualifiedNameFn(),
- $parentNode);
- }
-
- private function parseQualifiedNameCatchList($parentNode) {
- // catch blocks don't support intersection types.
- $result = $this->parseDelimitedList(
- DelimitedList\QualifiedNameList::class,
- TokenKind::BarToken,
- $this->isQualifiedNameStartForCatchFn(),
- $this->parseQualifiedNameFn(),
- $parentNode);
-
- // Add a MissingToken so that this will Warn about `catch (T| $x) {}`
- // TODO: Make this a reusable abstraction?
- if ($result && (end($result->children)->kind ?? null) === TokenKind::BarToken) {
- $result->children[] = new MissingToken(TokenKind::Name, $this->token->fullStart);
- }
- return $result;
- }
-
- private function parseInterfaceDeclaration($parentNode) {
- $interfaceDeclaration = new InterfaceDeclaration(); // TODO verify not nested
- $interfaceDeclaration->parent = $parentNode;
- $interfaceDeclaration->interfaceKeyword = $this->eat1(TokenKind::InterfaceKeyword);
- $interfaceDeclaration->name = $this->eat1(TokenKind::Name);
- $interfaceDeclaration->interfaceBaseClause = $this->parseInterfaceBaseClause($interfaceDeclaration);
- $interfaceDeclaration->interfaceMembers = $this->parseInterfaceMembers($interfaceDeclaration);
- return $interfaceDeclaration;
- }
-
- private function parseInterfaceMembers($parentNode) : Node {
- $interfaceMembers = new InterfaceMembers();
- $interfaceMembers->openBrace = $this->eat1(TokenKind::OpenBraceToken);
- $interfaceMembers->interfaceMemberDeclarations = $this->parseList($interfaceMembers, ParseContext::InterfaceMembers);
- $interfaceMembers->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
- $interfaceMembers->parent = $parentNode;
- return $interfaceMembers;
- }
-
- private function isInterfaceMemberDeclarationStart(Token $token) {
- switch ($token->kind) {
- // visibility-modifier
- case TokenKind::PublicKeyword:
- case TokenKind::ProtectedKeyword:
- case TokenKind::PrivateKeyword:
-
- // static-modifier
- case TokenKind::StaticKeyword:
-
- // readonly-modifier
- case TokenKind::ReadonlyKeyword:
-
- // class-modifier
- case TokenKind::AbstractKeyword:
- case TokenKind::FinalKeyword:
-
- case TokenKind::ConstKeyword:
-
- case TokenKind::FunctionKeyword:
-
- case TokenKind::AttributeToken:
- return true;
- }
- return false;
- }
-
- private function parseInterfaceElementFn() {
- return function ($parentNode) {
- $modifiers = $this->parseModifiers();
-
- $token = $this->getCurrentToken();
- switch ($token->kind) {
- case TokenKind::ConstKeyword:
- return $this->parseClassConstDeclaration($parentNode, $modifiers);
-
- case TokenKind::FunctionKeyword:
- return $this->parseMethodDeclaration($parentNode, $modifiers);
-
- case TokenKind::AttributeToken:
- return $this->parseAttributeStatement($parentNode);
-
- default:
- $missingInterfaceMemberDeclaration = new MissingMemberDeclaration();
- $missingInterfaceMemberDeclaration->parent = $parentNode;
- $missingInterfaceMemberDeclaration->modifiers = $modifiers;
- return $missingInterfaceMemberDeclaration;
- }
- };
- }
-
- private function parseInterfaceBaseClause($parentNode) {
- $interfaceBaseClause = new InterfaceBaseClause();
- $interfaceBaseClause->parent = $parentNode;
-
- $interfaceBaseClause->extendsKeyword = $this->eatOptional1(TokenKind::ExtendsKeyword);
- if (isset($interfaceBaseClause->extendsKeyword)) {
- $interfaceBaseClause->interfaceNameList = $this->parseQualifiedNameList($interfaceBaseClause);
- } else {
- return null;
- }
-
- return $interfaceBaseClause;
- }
-
- private function parseNamespaceDefinition($parentNode) {
- $namespaceDefinition = new NamespaceDefinition();
- $namespaceDefinition->parent = $parentNode;
-
- $namespaceDefinition->namespaceKeyword = $this->eat1(TokenKind::NamespaceKeyword);
-
- if (!$this->checkToken(TokenKind::NamespaceKeyword)) {
- $namespaceDefinition->name = $this->parseQualifiedName($namespaceDefinition);
- }
-
- if ($this->checkToken(TokenKind::OpenBraceToken)) {
- $namespaceDefinition->compoundStatementOrSemicolon = $this->parseCompoundStatement($namespaceDefinition);
- } else {
- if (!$namespaceDefinition->name) {
- // only optional with compound statement block
- $namespaceDefinition->name = new MissingToken(TokenKind::QualifiedName, $this->token->fullStart);
- }
- $namespaceDefinition->compoundStatementOrSemicolon = $this->eatSemicolonOrAbortStatement();
- }
-
- return $namespaceDefinition;
- }
-
- private function parseNamespaceUseDeclaration($parentNode) {
- $namespaceUseDeclaration = new NamespaceUseDeclaration();
- $namespaceUseDeclaration->parent = $parentNode;
- $namespaceUseDeclaration->useKeyword = $this->eat1(TokenKind::UseKeyword);
- $namespaceUseDeclaration->functionOrConst = $this->eatOptional(TokenKind::FunctionKeyword, TokenKind::ConstKeyword);
- $namespaceUseDeclaration->useClauses = $this->parseNamespaceUseClauseList($namespaceUseDeclaration);
- $namespaceUseDeclaration->semicolon = $this->eatSemicolonOrAbortStatement();
- return $namespaceUseDeclaration;
- }
-
- private function parseNamespaceUseClauseList($parentNode) {
- return $this->parseDelimitedList(
- DelimitedList\NamespaceUseClauseList::class,
- TokenKind::CommaToken,
- function ($token) {
- return $this->isQualifiedNameStart($token) || $token->kind === TokenKind::FunctionKeyword || $token->kind === TokenKind::ConstKeyword;
- },
- function ($parentNode) {
- $namespaceUseClause = new NamespaceUseClause();
- $namespaceUseClause->parent = $parentNode;
- $namespaceUseClause->namespaceName = $this->parseQualifiedName($namespaceUseClause);
- if ($this->checkToken(TokenKind::OpenBraceToken)) {
- $namespaceUseClause->openBrace = $this->eat1(TokenKind::OpenBraceToken);
- $namespaceUseClause->groupClauses = $this->parseNamespaceUseGroupClauseList($namespaceUseClause);
- $namespaceUseClause->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
- } else {
- if (!$namespaceUseClause->namespaceName) {
- $namespaceUseClause->namespaceName = new MissingToken(TokenKind::QualifiedName, $this->token->fullStart);
- }
- if ($this->checkToken(TokenKind::AsKeyword)) {
- $namespaceUseClause->namespaceAliasingClause = $this->parseNamespaceAliasingClause($namespaceUseClause);
- }
- }
-
- return $namespaceUseClause;
- },
- $parentNode
- );
- }
-
- private function parseNamespaceUseGroupClauseList($parentNode) {
- return $this->parseDelimitedList(
- DelimitedList\NamespaceUseGroupClauseList::class,
- TokenKind::CommaToken,
- function ($token) {
- return $this->isQualifiedNameStart($token) || $token->kind === TokenKind::FunctionKeyword || $token->kind === TokenKind::ConstKeyword;
- },
- function ($parentNode) {
- $namespaceUseGroupClause = new NamespaceUseGroupClause();
- $namespaceUseGroupClause->parent = $parentNode;
-
- $namespaceUseGroupClause->functionOrConst = $this->eatOptional(TokenKind::FunctionKeyword, TokenKind::ConstKeyword);
- $namespaceUseGroupClause->namespaceName = $this->parseQualifiedName($namespaceUseGroupClause) ?? new MissingToken(TokenKind::QualifiedName, $this->token->fullStart);
- if ($this->checkToken(TokenKind::AsKeyword)) {
- $namespaceUseGroupClause->namespaceAliasingClause = $this->parseNamespaceAliasingClause($namespaceUseGroupClause);
- }
-
- return $namespaceUseGroupClause;
- },
- $parentNode
- );
- }
-
- private function parseNamespaceAliasingClause($parentNode) {
- $namespaceAliasingClause = new NamespaceAliasingClause();
- $namespaceAliasingClause->parent = $parentNode;
- $namespaceAliasingClause->asKeyword = $this->eat1(TokenKind::AsKeyword);
- $namespaceAliasingClause->name = $this->eat1(TokenKind::Name);
- return $namespaceAliasingClause;
- }
-
- private function parseTraitDeclaration($parentNode) {
- $traitDeclaration = new TraitDeclaration();
- $traitDeclaration->parent = $parentNode;
-
- $traitDeclaration->traitKeyword = $this->eat1(TokenKind::TraitKeyword);
- $traitDeclaration->name = $this->eat1(TokenKind::Name);
-
- $traitDeclaration->traitMembers = $this->parseTraitMembers($traitDeclaration);
-
- return $traitDeclaration;
- }
-
- private function parseTraitMembers($parentNode) {
- $traitMembers = new TraitMembers();
- $traitMembers->parent = $parentNode;
-
- $traitMembers->openBrace = $this->eat1(TokenKind::OpenBraceToken);
-
- $traitMembers->traitMemberDeclarations = $this->parseList($traitMembers, ParseContext::TraitMembers);
-
- $traitMembers->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
-
- return $traitMembers;
- }
-
- private function isTraitMemberDeclarationStart($token) {
- switch ($token->kind) {
- // property-declaration
- case TokenKind::VariableName:
-
- // modifiers
- case TokenKind::PublicKeyword:
- case TokenKind::ProtectedKeyword:
- case TokenKind::PrivateKeyword:
- case TokenKind::VarKeyword:
- case TokenKind::StaticKeyword:
- case TokenKind::AbstractKeyword:
- case TokenKind::FinalKeyword:
- case TokenKind::ReadonlyKeyword:
- case TokenKind::ConstKeyword:
-
- // method-declaration
- case TokenKind::FunctionKeyword:
-
- // trait-use-clauses
- case TokenKind::UseKeyword:
-
- // attributes
- case TokenKind::AttributeToken:
- return true;
- }
- return false;
- }
-
- private function parseTraitElementFn() {
- return function ($parentNode) {
- $modifiers = $this->parseModifiers();
-
- $token = $this->getCurrentToken();
- switch ($token->kind) {
- case TokenKind::ConstKeyword:
- return $this->parseClassConstDeclaration($parentNode, $modifiers);
-
- case TokenKind::FunctionKeyword:
- return $this->parseMethodDeclaration($parentNode, $modifiers);
-
- case TokenKind::QuestionToken:
- return $this->parseRemainingPropertyDeclarationOrMissingMemberDeclaration(
- $parentNode,
- $modifiers,
- $this->eat1(TokenKind::QuestionToken)
- );
- case TokenKind::VariableName:
- return $this->parsePropertyDeclaration($parentNode, $modifiers);
-
- case TokenKind::UseKeyword:
- return $this->parseTraitUseClause($parentNode);
-
- case TokenKind::AttributeToken:
- return $this->parseAttributeStatement($parentNode);
-
- default:
- return $this->parseRemainingPropertyDeclarationOrMissingMemberDeclaration($parentNode, $modifiers);
- }
- };
- }
-
- private function parseEnumDeclaration($parentNode) {
- $enumDeclaration = new EnumDeclaration();
- $enumDeclaration->parent = $parentNode;
-
- $enumDeclaration->enumKeyword = $this->eat1(TokenKind::EnumKeyword);
- $enumDeclaration->name = $this->eat1(TokenKind::Name);
- $enumDeclaration->colonToken = $this->eatOptional1(TokenKind::ColonToken);
- if ($enumDeclaration->colonToken !== null) {
- $enumDeclaration->enumType = $this->tryParseParameterTypeDeclaration($enumDeclaration)
- ?: new MissingToken(TokenKind::EnumType, $this->token->fullStart);
- }
-
- $enumDeclaration->enumMembers = $this->parseEnumMembers($enumDeclaration);
-
- return $enumDeclaration;
- }
-
- private function parseEnumMembers($parentNode) {
- $enumMembers = new EnumMembers();
- $enumMembers->parent = $parentNode;
-
- $enumMembers->openBrace = $this->eat1(TokenKind::OpenBraceToken);
-
- $enumMembers->enumMemberDeclarations = $this->parseList($enumMembers, ParseContext::EnumMembers);
-
- $enumMembers->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
-
- return $enumMembers;
- }
-
- private function isEnumMemberDeclarationStart($token) {
- switch ($token->kind) {
- // modifiers
- case TokenKind::PublicKeyword:
- case TokenKind::ProtectedKeyword:
- case TokenKind::PrivateKeyword:
- case TokenKind::StaticKeyword:
- case TokenKind::AbstractKeyword:
- case TokenKind::FinalKeyword:
-
- // method-declaration
- case TokenKind::FunctionKeyword:
-
- // trait-use-clauses (enums can use traits)
- case TokenKind::UseKeyword:
-
- // cases and constants
- case TokenKind::CaseKeyword:
- case TokenKind::ConstKeyword:
-
- // attributes
- case TokenKind::AttributeToken:
- return true;
- }
- return false;
- }
-
- private function parseEnumElementFn() {
- return function ($parentNode) {
- $modifiers = $this->parseModifiers();
-
- $token = $this->getCurrentToken();
- switch ($token->kind) {
- // TODO: CaseKeyword
- case TokenKind::CaseKeyword:
- return $this->parseEnumCaseDeclaration($parentNode);
-
- case TokenKind::ConstKeyword:
- return $this->parseClassConstDeclaration($parentNode, $modifiers);
-
- case TokenKind::FunctionKeyword:
- return $this->parseMethodDeclaration($parentNode, $modifiers);
-
- case TokenKind::QuestionToken:
- return $this->parseRemainingPropertyDeclarationOrMissingMemberDeclaration(
- $parentNode,
- $modifiers,
- $this->eat1(TokenKind::QuestionToken)
- );
- case TokenKind::VariableName:
- return $this->parsePropertyDeclaration($parentNode, $modifiers);
-
- case TokenKind::UseKeyword:
- return $this->parseTraitUseClause($parentNode);
-
- case TokenKind::AttributeToken:
- return $this->parseAttributeStatement($parentNode);
-
- default:
- return $this->parseRemainingPropertyDeclarationOrMissingMemberDeclaration($parentNode, $modifiers);
- }
- };
- }
-
-
- /**
- * @param Node $parentNode
- * @param Token[] $modifiers
- * @param Token $questionToken
- * @param DelimitedList\QualifiedNameList|null $typeDeclarationList
- */
- private function makeMissingMemberDeclaration($parentNode, $modifiers, $questionToken = null, $typeDeclarationList = null) {
- $missingTraitMemberDeclaration = new MissingMemberDeclaration();
- $missingTraitMemberDeclaration->parent = $parentNode;
- $missingTraitMemberDeclaration->modifiers = $modifiers;
- $missingTraitMemberDeclaration->questionToken = $questionToken;
- if ($typeDeclarationList) {
- $missingTraitMemberDeclaration->typeDeclarationList = $typeDeclarationList;
- $missingTraitMemberDeclaration->typeDeclarationList->parent = $missingTraitMemberDeclaration;
- } elseif ($questionToken) {
- $missingTraitMemberDeclaration->typeDeclarationList = new MissingToken(TokenKind::PropertyType, $this->token->fullStart);
- }
- return $missingTraitMemberDeclaration;
- }
-
- private function parseTraitUseClause($parentNode) {
- $traitUseClause = new TraitUseClause();
- $traitUseClause->parent = $parentNode;
-
- $traitUseClause->useKeyword = $this->eat1(TokenKind::UseKeyword);
- $traitUseClause->traitNameList = $this->parseQualifiedNameList($traitUseClause);
-
- $traitUseClause->semicolonOrOpenBrace = $this->eat(TokenKind::OpenBraceToken, TokenKind::SemicolonToken);
- if ($traitUseClause->semicolonOrOpenBrace->kind === TokenKind::OpenBraceToken) {
- $traitUseClause->traitSelectAndAliasClauses = $this->parseTraitSelectAndAliasClauseList($traitUseClause);
- $traitUseClause->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
- }
-
- return $traitUseClause;
- }
-
- private function parseTraitSelectAndAliasClauseList($parentNode) {
- return $this->parseDelimitedList(
- DelimitedList\TraitSelectOrAliasClauseList::class,
- TokenKind::SemicolonToken,
- $this->isQualifiedNameStartFn(),
- $this->parseTraitSelectOrAliasClauseFn(),
- $parentNode
- );
- }
-
- private function parseTraitSelectOrAliasClauseFn() {
- return function ($parentNode) {
- $traitSelectAndAliasClause = new TraitSelectOrAliasClause();
- $traitSelectAndAliasClause->parent = $parentNode;
- $traitSelectAndAliasClause->name = // TODO update spec
- $this->parseQualifiedNameOrScopedPropertyAccessExpression($traitSelectAndAliasClause);
-
- $traitSelectAndAliasClause->asOrInsteadOfKeyword = $this->eat(TokenKind::AsKeyword, TokenKind::InsteadOfKeyword);
- $traitSelectAndAliasClause->modifiers = $this->parseModifiers(); // TODO accept all modifiers, verify later
-
- if ($traitSelectAndAliasClause->asOrInsteadOfKeyword->kind === TokenKind::InsteadOfKeyword) {
- $traitSelectAndAliasClause->targetNameList = $this->parseQualifiedNameList($traitSelectAndAliasClause);
- } else {
- $traitSelectAndAliasClause->targetNameList =
- $this->parseQualifiedNameOrScopedPropertyAccessExpression($traitSelectAndAliasClause);
- }
-
- // TODO errors for insteadof/as
- return $traitSelectAndAliasClause;
- };
- }
-
- private function parseQualifiedNameOrScopedPropertyAccessExpression($parentNode) {
- $qualifiedNameOrScopedProperty = $this->parseQualifiedName($parentNode);
- if ($this->getCurrentToken()->kind === TokenKind::ColonColonToken) {
- $qualifiedNameOrScopedProperty = $this->parseScopedPropertyAccessExpression($qualifiedNameOrScopedProperty, $parentNode);
- }
- return $qualifiedNameOrScopedProperty;
- }
-
- private function parseGlobalDeclaration($parentNode) {
- $globalDeclaration = new GlobalDeclaration();
- $globalDeclaration->parent = $parentNode;
-
- $globalDeclaration->globalKeyword = $this->eat1(TokenKind::GlobalKeyword);
- $globalDeclaration->variableNameList = $this->parseDelimitedList(
- DelimitedList\VariableNameList::class,
- TokenKind::CommaToken,
- $this->isVariableNameStartFn(),
- $this->parseSimpleVariableFn(),
- $globalDeclaration
- );
-
- $globalDeclaration->semicolon = $this->eatSemicolonOrAbortStatement();
-
- return $globalDeclaration;
- }
-
- private function parseFunctionStaticDeclaration($parentNode) {
- $functionStaticDeclaration = new FunctionStaticDeclaration();
- $functionStaticDeclaration->parent = $parentNode;
-
- $functionStaticDeclaration->staticKeyword = $this->eat1(TokenKind::StaticKeyword);
- $functionStaticDeclaration->staticVariableNameList = $this->parseDelimitedList(
- DelimitedList\StaticVariableNameList::class,
- TokenKind::CommaToken,
- function ($token) {
- return $token->kind === TokenKind::VariableName;
- },
- $this->parseStaticVariableDeclarationFn(),
- $functionStaticDeclaration
- );
- $functionStaticDeclaration->semicolon = $this->eatSemicolonOrAbortStatement();
-
- return $functionStaticDeclaration;
- }
-
- private function isVariableNameStartFn() {
- return function ($token) {
- return $token->kind === TokenKind::VariableName || $token->kind === TokenKind::DollarToken;
- };
- }
-
- private function parseStaticVariableDeclarationFn() {
- return function ($parentNode) {
- $staticVariableDeclaration = new StaticVariableDeclaration();
- $staticVariableDeclaration->parent = $parentNode;
- $staticVariableDeclaration->variableName = $this->eat1(TokenKind::VariableName);
- $staticVariableDeclaration->equalsToken = $this->eatOptional1(TokenKind::EqualsToken);
- if ($staticVariableDeclaration->equalsToken !== null) {
- // TODO add post-parse rule that checks for invalid assignments
- $staticVariableDeclaration->assignment = $this->parseExpression($staticVariableDeclaration);
- }
- return $staticVariableDeclaration;
- };
- }
-
- private function parseConstDeclaration($parentNode) {
- $constDeclaration = new ConstDeclaration();
- $constDeclaration->parent = $parentNode;
-
- $constDeclaration->constKeyword = $this->eat1(TokenKind::ConstKeyword);
- $constDeclaration->constElements = $this->parseConstElements($constDeclaration);
- $constDeclaration->semicolon = $this->eatSemicolonOrAbortStatement();
-
- return $constDeclaration;
- }
-
- private function parseConstElements($parentNode) {
- return $this->parseDelimitedList(
- DelimitedList\ConstElementList::class,
- TokenKind::CommaToken,
- function ($token) {
- return \in_array($token->kind, $this->nameOrKeywordOrReservedWordTokens);
- },
- $this->parseConstElementFn(),
- $parentNode
- );
- }
-
- private function parseConstElementFn() {
- return function ($parentNode) {
- $constElement = new ConstElement();
- $constElement->parent = $parentNode;
- $constElement->name = $this->getCurrentToken();
- $this->advanceToken();
- $constElement->name->kind = TokenKind::Name; // to support keyword names
- $constElement->equalsToken = $this->eat1(TokenKind::EqualsToken);
- // TODO add post-parse rule that checks for invalid assignments
- $constElement->assignment = $this->parseExpression($constElement);
- return $constElement;
- };
- }
-
- private function parseCastExpression($parentNode) {
- $castExpression = new CastExpression();
- $castExpression->parent = $parentNode;
- $castExpression->castType = $this->eat(
- TokenKind::ArrayCastToken,
- TokenKind::BoolCastToken,
- TokenKind::DoubleCastToken,
- TokenKind::IntCastToken,
- TokenKind::ObjectCastToken,
- TokenKind::StringCastToken,
- TokenKind::UnsetCastToken
- );
-
- $castExpression->operand = $this->parseUnaryExpressionOrHigher($castExpression);
-
- return $castExpression;
- }
-
- private function parseCastExpressionGranular($parentNode) {
- $castExpression = new CastExpression();
- $castExpression->parent = $parentNode;
-
- $castExpression->openParen = $this->eat1(TokenKind::OpenParenToken);
- $castExpression->castType = $this->eat(
- TokenKind::ArrayKeyword,
- TokenKind::BinaryReservedWord,
- TokenKind::BoolReservedWord,
- TokenKind::BooleanReservedWord,
- TokenKind::DoubleReservedWord,
- TokenKind::IntReservedWord,
- TokenKind::IntegerReservedWord,
- TokenKind::FloatReservedWord,
- TokenKind::ObjectReservedWord,
- TokenKind::RealReservedWord,
- TokenKind::StringReservedWord,
- TokenKind::UnsetKeyword
- );
- $castExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $castExpression->operand = $this->parseUnaryExpressionOrHigher($castExpression);
-
- return $castExpression;
- }
-
- private function parseAnonymousFunctionCreationExpression($parentNode) {
- $staticModifier = $this->eatOptional1(TokenKind::StaticKeyword);
- if ($this->getCurrentToken()->kind === TokenKind::FnKeyword) {
- return $this->parseArrowFunctionCreationExpression($parentNode, $staticModifier);
- }
- $anonymousFunctionCreationExpression = new AnonymousFunctionCreationExpression();
- $anonymousFunctionCreationExpression->parent = $parentNode;
-
- $anonymousFunctionCreationExpression->staticModifier = $staticModifier;
- $this->parseFunctionType($anonymousFunctionCreationExpression, false, true);
-
- return $anonymousFunctionCreationExpression;
- }
-
- private function parseArrowFunctionCreationExpression($parentNode, $staticModifier) : ArrowFunctionCreationExpression {
- $arrowFunction = new ArrowFunctionCreationExpression();
- $arrowFunction->parent = $parentNode;
- $arrowFunction->staticModifier = $staticModifier;
-
- $arrowFunction->functionKeyword = $this->eat1(TokenKind::FnKeyword);
- $arrowFunction->byRefToken = $this->eatOptional1(TokenKind::AmpersandToken);
- $arrowFunction->name = $this->eatOptional($this->nameOrKeywordOrReservedWordTokens);
-
- if (isset($arrowFunction->name)) {
- // Anonymous functions should not have names.
- // This is based on the code for AnonymousFunctionCreationExpression.
- $arrowFunction->name->kind = TokenKind::Name;
- $arrowFunction->name = new SkippedToken($arrowFunction->name); // TODO instead handle this during post-walk
- }
-
- $arrowFunction->openParen = $this->eat1(TokenKind::OpenParenToken);
- $arrowFunction->parameters = $this->parseDelimitedList(
- DelimitedList\ParameterDeclarationList::class,
- TokenKind::CommaToken,
- $this->isParameterStartFn(),
- $this->parseParameterFn(),
- $arrowFunction);
- $arrowFunction->closeParen = $this->eat1(TokenKind::CloseParenToken);
-
- if ($this->checkToken(TokenKind::ColonToken)) {
- $arrowFunction->colonToken = $this->eat1(TokenKind::ColonToken);
- $arrowFunction->questionToken = $this->eatOptional1(TokenKind::QuestionToken);
- $this->parseAndSetReturnTypeDeclarationList($arrowFunction);
- }
-
- $arrowFunction->arrowToken = $this->eat1(TokenKind::DoubleArrowToken);
- $arrowFunction->resultExpression = $this->parseExpression($arrowFunction);
-
- return $arrowFunction;
- }
-
- private function parseAnonymousFunctionUseClause($parentNode) {
- $anonymousFunctionUseClause = new AnonymousFunctionUseClause();
- $anonymousFunctionUseClause->parent = $parentNode;
-
- $anonymousFunctionUseClause->useKeyword = $this->eatOptional1(TokenKind::UseKeyword);
- if ($anonymousFunctionUseClause->useKeyword === null) {
- return null;
- }
- $anonymousFunctionUseClause->openParen = $this->eat1(TokenKind::OpenParenToken);
- $anonymousFunctionUseClause->useVariableNameList = $this->parseDelimitedList(
- DelimitedList\UseVariableNameList::class,
- TokenKind::CommaToken,
- function ($token) {
- return $token->kind === TokenKind::AmpersandToken || $token->kind === TokenKind::VariableName;
- },
- function ($parentNode) {
- $useVariableName = new UseVariableName();
- $useVariableName->parent = $parentNode;
- $useVariableName->byRef = $this->eatOptional1(TokenKind::AmpersandToken);
- $useVariableName->variableName = $this->eat1(TokenKind::VariableName);
- return $useVariableName;
- },
- $anonymousFunctionUseClause
- ) ?: (new MissingToken(TokenKind::VariableName, $this->token->fullStart));
- $anonymousFunctionUseClause->closeParen = $this->eat1(TokenKind::CloseParenToken);
-
- return $anonymousFunctionUseClause;
- }
-
- private function parseMatchExpression($parentNode) {
- $matchExpression = new MatchExpression();
- $matchExpression->parent = $parentNode;
- $matchExpression->matchToken = $this->eat1(TokenKind::MatchKeyword);
- $matchExpression->openParen = $this->eat1(TokenKind::OpenParenToken);
- $matchExpression->expression = $this->parseExpression($matchExpression);
- $matchExpression->closeParen = $this->eat1(TokenKind::CloseParenToken);
- $matchExpression->openBrace = $this->eat1(TokenKind::OpenBraceToken);
- $matchExpression->arms = $this->parseDelimitedList(
- DelimitedList\MatchExpressionArmList::class,
- TokenKind::CommaToken,
- $this->isMatchConditionStartFn(),
- $this->parseMatchArmFn(),
- $matchExpression);
- $matchExpression->closeBrace = $this->eat1(TokenKind::CloseBraceToken);
- return $matchExpression;
- }
-
- private function isMatchConditionStartFn() {
- return function ($token) {
- return $token->kind === TokenKind::DefaultKeyword ||
- $this->isExpressionStart($token);
- };
- }
-
- private function parseMatchArmFn() {
- return function ($parentNode) {
- $matchArm = new MatchArm();
- $matchArm->parent = $parentNode;
- $matchArmConditionList = $this->parseDelimitedList(
- DelimitedList\MatchArmConditionList::class,
- TokenKind::CommaToken,
- $this->isMatchConditionStartFn(),
- $this->parseMatchConditionFn(),
- $matchArm
- );
- $matchArmConditionList->parent = $matchArm;
- $matchArm->conditionList = $matchArmConditionList;
- $matchArm->arrowToken = $this->eat1(TokenKind::DoubleArrowToken);
- $matchArm->body = $this->parseExpression($matchArm);
- return $matchArm;
- };
- }
-
- private function parseMatchConditionFn() {
- return function ($parentNode) {
- if ($this->token->kind === TokenKind::DefaultKeyword) {
- return $this->eat1(TokenKind::DefaultKeyword);
- }
- return $this->parseExpression($parentNode);
- };
- }
-
- private function parseCloneExpression($parentNode) {
- $cloneExpression = new CloneExpression();
- $cloneExpression->parent = $parentNode;
-
- $cloneExpression->cloneKeyword = $this->eat1(TokenKind::CloneKeyword);
- $cloneExpression->expression = $this->parseUnaryExpressionOrHigher($cloneExpression);
-
- return $cloneExpression;
- }
-
- private function eatSemicolonOrAbortStatement() {
- if ($this->getCurrentToken()->kind !== TokenKind::ScriptSectionEndTag) {
- return $this->eat1(TokenKind::SemicolonToken);
- }
- return null;
- }
-
- private function parseInlineHtml($parentNode) {
- $inlineHtml = new InlineHtml();
- $inlineHtml->parent = $parentNode;
- $inlineHtml->scriptSectionEndTag = $this->eatOptional1(TokenKind::ScriptSectionEndTag);
- $inlineHtml->text = $this->eatOptional1(TokenKind::InlineHtml);
- $inlineHtml->scriptSectionStartTag = $this->eatOptional(TokenKind::ScriptSectionStartTag, TokenKind::ScriptSectionStartWithEchoTag);
-
- // This is the easiest way to represent `= "expr", "other" `
- if (($inlineHtml->scriptSectionStartTag->kind ?? null) === TokenKind::ScriptSectionStartWithEchoTag) {
- $echoStatement = new EchoStatement();
- $expressionList = $this->parseExpressionList($echoStatement) ?? (new MissingToken(TokenKind::Expression, $this->token->fullStart));
- $echoStatement->expressions = $expressionList;
-
- $echoStatement->semicolon = $this->eatSemicolonOrAbortStatement();
- $echoStatement->parent = $inlineHtml;
- // Deliberately leave echoKeyword as null instead of MissingToken
-
- $inlineHtml->echoStatement = $echoStatement;
- }
-
- return $inlineHtml;
- }
-}
-
-class Associativity {
- const None = 0;
- const Left = 1;
- const Right = 2;
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/PhpTokenizer.php b/vendor/microsoft/tolerant-php-parser/src/PhpTokenizer.php
deleted file mode 100644
index 08c57884..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/PhpTokenizer.php
+++ /dev/null
@@ -1,413 +0,0 @@
-tokensArray = $this->getTokensArrayFromContent($content);
- $this->endOfFilePos = \count($this->tokensArray) - 1;
- $this->pos = 0;
- }
-
- public function scanNextToken() : Token {
- return $this->pos >= $this->endOfFilePos
- ? $this->tokensArray[$this->endOfFilePos]
- : $this->tokensArray[$this->pos++];
- }
-
- public function getCurrentPosition() : int {
- return $this->pos;
- }
-
- public function setCurrentPosition(int $pos) {
- $this->pos = $pos;
- }
-
- public function getEndOfFilePosition() : int {
- return $this->endOfFilePos;
- }
-
- public function getTokensArray() : array {
- return $this->tokensArray;
- }
-
- /**
- * Return an array of Token object instances created from $content.
- *
- * This method is optimized heavily - this processes every single token being created.
- *
- * @param string $content the raw php code
- * @param ?int $parseContext can be SourceElements when extracting doc comments
- * @param int $initialPos
- * @param bool $treatCommentsAsTrivia
- * @return Token[]
- */
- public static function getTokensArrayFromContent(
- $content, $parseContext = null, $initialPos = 0, $treatCommentsAsTrivia = true
- ) : array {
- if ($parseContext !== null) {
- // If needed, add a prefix so that token_get_all will tokenize the remaining $contents
- $prefix = self::PARSE_CONTEXT_TO_PREFIX[$parseContext];
- $content = $prefix . $content;
- }
-
- $tokens = static::tokenGetAll($content, $parseContext);
-
- $arr = [];
- $fullStart = $start = $pos = $initialPos;
- if ($parseContext !== null) {
- // If needed, skip over the prefix we added for token_get_all and remove those tokens.
- // This was moved out of the below main loop as an optimization.
- // (the common case of parsing an entire file uses a null parseContext)
- foreach ($tokens as $i => $token) {
- unset($tokens[$i]);
- if (\is_array($token)) {
- $pos += \strlen($token[1]);
- } else {
- $pos += \strlen($token);
- }
- if (\strlen($prefix) < $pos) {
- $fullStart = $start = $pos = $initialPos;
- break;
- }
- }
- }
-
- // Convert tokens from token_get_all to Token instances,
- // skipping whitespace and (usually, when parseContext is null) comments.
- foreach ($tokens as $token) {
- if (\is_array($token)) {
- $tokenKind = $token[0];
- $strlen = \strlen($token[1]);
- } else {
- $pos += \strlen($token);
- $newTokenKind = self::TOKEN_MAP[$token] ?? TokenKind::Unknown;
- $arr[] = new Token($newTokenKind, $fullStart, $start, $pos - $fullStart);
- $start = $fullStart = $pos;
- continue;
- }
-
- $pos += $strlen;
-
- // Optimization note: In PHP < 7.2, the switch statement would check case by case,
- // so putting the most common cases first is slightly faster
- switch ($tokenKind) {
- case \T_WHITESPACE:
- $start += $strlen;
- break;
- case \T_STRING:
- $name = \strtolower($token[1]);
- $newTokenKind = TokenStringMaps::RESERVED_WORDS[$name] ?? TokenKind::Name;
- $arr[] = new Token($newTokenKind, $fullStart, $start, $pos - $fullStart);
- $start = $fullStart = $pos;
- break;
- case \T_OPEN_TAG:
- $arr[] = new Token(TokenKind::ScriptSectionStartTag, $fullStart, $start, $pos-$fullStart);
- $start = $fullStart = $pos;
- break;
- case \PHP_VERSION_ID >= 80000 ? \T_NAME_QUALIFIED : -1000:
- case \PHP_VERSION_ID >= 80000 ? \T_NAME_FULLY_QUALIFIED : -1001:
- // NOTE: This switch is called on every token of every file being parsed, so this traded performance for readability.
- //
- // PHP's Opcache is able to optimize switches that are exclusively known longs,
- // but not switches that mix strings and longs or have unknown longs.
- // Longs are only known if they're declared within the same *class* or an internal constant (tokenizer).
- //
- // For some reason, the SWITCH_LONG opcode was not generated when the expression was part of a class constant.
- // (seen with php -d opcache.opt_debug_level=0x20000)
- //
- // Use negative values because that's not expected to overlap with token kinds that token_get_all() will return.
- //
- // T_NAME_* was added in php 8.0 to forbid whitespace between parts of names.
- // Here, emulate the tokenization of php 7 by splitting it up into 1 or more tokens.
- foreach (\explode('\\', $token[1]) as $i => $name) {
- if ($i) {
- $arr[] = new Token(TokenKind::BackslashToken, $fullStart, $start, 1 + $start - $fullStart);
- $start++;
- $fullStart = $start;
- }
- if ($name === '') {
- continue;
- }
- // TODO: TokenStringMaps::RESERVED_WORDS[$name] ?? TokenKind::Name for compatibility?
- $len = \strlen($name);
- $arr[] = new Token(TokenKind::Name, $fullStart, $start, $len + $start - $fullStart);
- $start += $len;
- $fullStart = $start;
- }
- break;
- case \PHP_VERSION_ID >= 80000 ? \T_NAME_RELATIVE : -1002:
- // This is a namespace-relative name: namespace\...
- foreach (\explode('\\', $token[1]) as $i => $name) {
- $len = \strlen($name);
- if (!$i) {
- $arr[] = new Token(TokenKind::NamespaceKeyword, $fullStart, $start, $len + $start - $fullStart);
- $start += $len;
- $fullStart = $start;
- continue;
- }
- $arr[] = new Token(TokenKind::BackslashToken, $fullStart, $start, 1);
- $start++;
-
- // TODO: TokenStringMaps::RESERVED_WORDS[$name] ?? TokenKind::Name for compatibility?
- $arr[] = new Token(TokenKind::Name, $start, $start, $len);
-
- $start += $len;
- $fullStart = $start;
- }
- break;
- case \T_COMMENT:
- case \T_DOC_COMMENT:
- if ($treatCommentsAsTrivia) {
- $start += $strlen;
- break;
- }
- // fall through
- default:
- $newTokenKind = self::TOKEN_MAP[$tokenKind] ?? TokenKind::Unknown;
- $arr[] = new Token($newTokenKind, $fullStart, $start, $pos - $fullStart);
- $start = $fullStart = $pos;
- break;
- }
- }
-
- $arr[] = new Token(TokenKind::EndOfFileToken, $fullStart, $start, $pos - $fullStart);
- return $arr;
- }
-
- /**
- * @param string $content the raw php code
- * @param ?int $parseContext can be SourceElements when extracting doc comments.
- * Having this available may be useful for subclasses to decide whether or not to post-process results, cache results, etc.
- * @return array[]|string[] an array of tokens. When concatenated, these tokens must equal $content.
- *
- * This exists so that it can be overridden in subclasses, e.g. to cache the result of tokenizing entire files.
- * Applications using tolerant-php-parser may often end up needing to use the token stream for other reasons that are hard to do in the resulting AST,
- * such as iterating over T_COMMENTS, checking for inline html,
- * looking up all tokens (including skipped tokens) on a given line, etc.
- */
- protected static function tokenGetAll(string $content, $parseContext): array
- {
- return @\token_get_all($content);
- }
-
- const TOKEN_MAP = [
- T_CLASS_C => TokenKind::Name,
- T_DIR => TokenKind::Name,
- T_FILE => TokenKind::Name,
- T_FUNC_C => TokenKind::Name,
- T_METHOD_C => TokenKind::Name,
- T_NS_C => TokenKind::Name,
- T_TRAIT_C => TokenKind::Name,
- T_LINE => TokenKind::Name,
-
- T_STRING => TokenKind::Name,
- T_VARIABLE => TokenKind::VariableName,
-
- T_ABSTRACT => TokenKind::AbstractKeyword,
- T_LOGICAL_AND => TokenKind::AndKeyword,
- T_ARRAY => TokenKind::ArrayKeyword,
- T_AS => TokenKind::AsKeyword,
- T_BREAK => TokenKind::BreakKeyword,
- T_CALLABLE => TokenKind::CallableKeyword,
- T_CASE => TokenKind::CaseKeyword,
- T_CATCH => TokenKind::CatchKeyword,
- T_CLASS => TokenKind::ClassKeyword,
- T_CLONE => TokenKind::CloneKeyword,
- T_CONST => TokenKind::ConstKeyword,
- T_CONTINUE => TokenKind::ContinueKeyword,
- T_DECLARE => TokenKind::DeclareKeyword,
- T_DEFAULT => TokenKind::DefaultKeyword,
- T_DO => TokenKind::DoKeyword,
- T_ECHO => TokenKind::EchoKeyword,
- T_ELSE => TokenKind::ElseKeyword,
- T_ELSEIF => TokenKind::ElseIfKeyword,
- T_EMPTY => TokenKind::EmptyKeyword,
- T_ENDDECLARE => TokenKind::EndDeclareKeyword,
- T_ENDFOR => TokenKind::EndForKeyword,
- T_ENDFOREACH => TokenKind::EndForEachKeyword,
- T_ENDIF => TokenKind::EndIfKeyword,
- T_ENDSWITCH => TokenKind::EndSwitchKeyword,
- T_ENDWHILE => TokenKind::EndWhileKeyword,
- T_ENUM => TokenKind::EnumKeyword,
- T_EVAL => TokenKind::EvalKeyword,
- T_EXIT => TokenKind::ExitKeyword,
- T_EXTENDS => TokenKind::ExtendsKeyword,
- T_FINAL => TokenKind::FinalKeyword,
- T_FINALLY => TokenKind::FinallyKeyword,
- T_FOR => TokenKind::ForKeyword,
- T_FOREACH => TokenKind::ForeachKeyword,
- T_FN => TokenKind::FnKeyword,
- T_FUNCTION => TokenKind::FunctionKeyword,
- T_GLOBAL => TokenKind::GlobalKeyword,
- T_GOTO => TokenKind::GotoKeyword,
- T_HALT_COMPILER => TokenKind::HaltCompilerKeyword,
- T_IF => TokenKind::IfKeyword,
- T_IMPLEMENTS => TokenKind::ImplementsKeyword,
- T_INCLUDE => TokenKind::IncludeKeyword,
- T_INCLUDE_ONCE => TokenKind::IncludeOnceKeyword,
- T_INSTANCEOF => TokenKind::InstanceOfKeyword,
- T_INSTEADOF => TokenKind::InsteadOfKeyword,
- T_INTERFACE => TokenKind::InterfaceKeyword,
- T_ISSET => TokenKind::IsSetKeyword,
- T_LIST => TokenKind::ListKeyword,
- T_MATCH => TokenKind::MatchKeyword,
- T_NAMESPACE => TokenKind::NamespaceKeyword,
- T_NEW => TokenKind::NewKeyword,
- T_LOGICAL_OR => TokenKind::OrKeyword,
- T_PRINT => TokenKind::PrintKeyword,
- T_PRIVATE => TokenKind::PrivateKeyword,
- T_PROTECTED => TokenKind::ProtectedKeyword,
- T_PUBLIC => TokenKind::PublicKeyword,
- T_READONLY => TokenKind::ReadonlyKeyword,
- T_REQUIRE => TokenKind::RequireKeyword,
- T_REQUIRE_ONCE => TokenKind::RequireOnceKeyword,
- T_RETURN => TokenKind::ReturnKeyword,
- T_STATIC => TokenKind::StaticKeyword,
- T_SWITCH => TokenKind::SwitchKeyword,
- T_THROW => TokenKind::ThrowKeyword,
- T_TRAIT => TokenKind::TraitKeyword,
- T_TRY => TokenKind::TryKeyword,
- T_UNSET => TokenKind::UnsetKeyword,
- T_USE => TokenKind::UseKeyword,
- T_VAR => TokenKind::VarKeyword,
- T_WHILE => TokenKind::WhileKeyword,
- T_LOGICAL_XOR => TokenKind::XorKeyword,
- T_YIELD => TokenKind::YieldKeyword,
- T_YIELD_FROM => TokenKind::YieldFromKeyword,
-
- "[" => TokenKind::OpenBracketToken,
- "]" => TokenKind::CloseBracketToken,
- "(" => TokenKind::OpenParenToken,
- ")" => TokenKind::CloseParenToken,
- "{" => TokenKind::OpenBraceToken,
- "}" => TokenKind::CloseBraceToken,
- "." => TokenKind::DotToken,
- T_OBJECT_OPERATOR => TokenKind::ArrowToken,
- T_NULLSAFE_OBJECT_OPERATOR => TokenKind::QuestionArrowToken,
- T_ATTRIBUTE => TokenKind::AttributeToken,
- T_INC => TokenKind::PlusPlusToken,
- T_DEC => TokenKind::MinusMinusToken,
- T_POW => TokenKind::AsteriskAsteriskToken,
- "*" => TokenKind::AsteriskToken,
- "+" => TokenKind::PlusToken,
- "-" => TokenKind::MinusToken,
- "~" => TokenKind::TildeToken,
- "!" => TokenKind::ExclamationToken,
- "$" => TokenKind::DollarToken,
- "/" => TokenKind::SlashToken,
- "%" => TokenKind::PercentToken,
- T_SL => TokenKind::LessThanLessThanToken,
- T_SR => TokenKind::GreaterThanGreaterThanToken,
- "<" => TokenKind::LessThanToken,
- ">" => TokenKind::GreaterThanToken,
- T_IS_SMALLER_OR_EQUAL => TokenKind::LessThanEqualsToken,
- T_IS_GREATER_OR_EQUAL => TokenKind::GreaterThanEqualsToken,
- T_IS_EQUAL => TokenKind::EqualsEqualsToken,
- T_IS_IDENTICAL => TokenKind::EqualsEqualsEqualsToken,
- T_IS_NOT_EQUAL => TokenKind::ExclamationEqualsToken,
- T_IS_NOT_IDENTICAL => TokenKind::ExclamationEqualsEqualsToken,
- "^" => TokenKind::CaretToken,
- "|" => TokenKind::BarToken,
- "&" => TokenKind::AmpersandToken,
- T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG => TokenKind::AmpersandToken,
- T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG => TokenKind::AmpersandToken,
- T_BOOLEAN_AND => TokenKind::AmpersandAmpersandToken,
- T_BOOLEAN_OR => TokenKind::BarBarToken,
- ":" => TokenKind::ColonToken,
- ";" => TokenKind::SemicolonToken,
- "=" => TokenKind::EqualsToken,
- T_POW_EQUAL => TokenKind::AsteriskAsteriskEqualsToken,
- T_MUL_EQUAL => TokenKind::AsteriskEqualsToken,
- T_DIV_EQUAL => TokenKind::SlashEqualsToken,
- T_MOD_EQUAL => TokenKind::PercentEqualsToken,
- T_PLUS_EQUAL => TokenKind::PlusEqualsToken,
- T_MINUS_EQUAL => TokenKind::MinusEqualsToken,
- T_CONCAT_EQUAL => TokenKind::DotEqualsToken,
- T_SL_EQUAL => TokenKind::LessThanLessThanEqualsToken,
- T_SR_EQUAL => TokenKind::GreaterThanGreaterThanEqualsToken,
- T_AND_EQUAL => TokenKind::AmpersandEqualsToken,
- T_XOR_EQUAL => TokenKind::CaretEqualsToken,
- T_OR_EQUAL => TokenKind::BarEqualsToken,
- "," => TokenKind::CommaToken,
- namespace\T_COALESCE_EQUAL => TokenKind::QuestionQuestionEqualsToken,
- T_COALESCE => TokenKind::QuestionQuestionToken,
- T_SPACESHIP => TokenKind::LessThanEqualsGreaterThanToken,
- T_ELLIPSIS => TokenKind::DotDotDotToken,
- T_NS_SEPARATOR => TokenKind::BackslashToken,
- T_PAAMAYIM_NEKUDOTAYIM => TokenKind::ColonColonToken,
- T_DOUBLE_ARROW => TokenKind::DoubleArrowToken, // TODO missing from spec
-
- "@" => TokenKind::AtSymbolToken,
- "`" => TokenKind::BacktickToken,
- "?" => TokenKind::QuestionToken,
-
- T_LNUMBER => TokenKind::IntegerLiteralToken,
-
- T_DNUMBER => TokenKind::FloatingLiteralToken,
-
- T_OPEN_TAG => TokenKind::ScriptSectionStartTag,
- T_OPEN_TAG_WITH_ECHO => TokenKind::ScriptSectionStartWithEchoTag,
- T_CLOSE_TAG => TokenKind::ScriptSectionEndTag,
-
- T_INLINE_HTML => TokenKind::InlineHtml,
-
- "\"" => TokenKind::DoubleQuoteToken,
- "'" => TokenKind::SingleQuoteToken,
- T_ENCAPSED_AND_WHITESPACE => TokenKind::EncapsedAndWhitespace,
- T_DOLLAR_OPEN_CURLY_BRACES => TokenKind::DollarOpenBraceToken,
- T_CURLY_OPEN => TokenKind::OpenBraceDollarToken,
- T_CONSTANT_ENCAPSED_STRING => TokenKind::StringLiteralToken,
-
- T_ARRAY_CAST => TokenKind::ArrayCastToken,
- T_BOOL_CAST => TokenKind::BoolCastToken,
- T_DOUBLE_CAST => TokenKind::DoubleCastToken,
- T_INT_CAST => TokenKind::IntCastToken,
- T_OBJECT_CAST => TokenKind::ObjectCastToken,
- T_STRING_CAST => TokenKind::StringCastToken,
- T_UNSET_CAST => TokenKind::UnsetCastToken,
-
- T_START_HEREDOC => TokenKind::HeredocStart,
- T_END_HEREDOC => TokenKind::HeredocEnd,
- T_STRING_VARNAME => TokenKind::StringVarname,
- T_COMMENT => TokenKind::CommentToken,
- T_DOC_COMMENT => TokenKind::DocCommentToken,
- T_NUM_STRING => TokenKind::IntegerLiteralToken
- ];
-
- const PARSE_CONTEXT_TO_PREFIX = [
- ParseContext::SourceElements => "= $textLength) {
- $pos = $textLength;
- } elseif ($pos < 0) {
- $pos = 0;
- }
-
- // Start strrpos check from the character before the current character,
- // in case the current character is a newline
- $startAt = max(-($textLength - $pos) - 1, -$textLength);
- $lastNewlinePos = \strrpos($text, "\n", $startAt);
- $char = $pos - ($lastNewlinePos === false ? 0 : $lastNewlinePos + 1);
- $line = $pos > 0 ? \substr_count($text, "\n", 0, $pos) : 0;
- return new LineCharacterPosition($line, $char);
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Range.php b/vendor/microsoft/tolerant-php-parser/src/Range.php
deleted file mode 100644
index 36acf40c..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Range.php
+++ /dev/null
@@ -1,17 +0,0 @@
-start = $start;
- $this->end = $end;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/ResolvedName.php b/vendor/microsoft/tolerant-php-parser/src/ResolvedName.php
deleted file mode 100644
index 34acf4ff..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/ResolvedName.php
+++ /dev/null
@@ -1,44 +0,0 @@
-kind === TokenKind::Name) {
- $name->parts[] = $token->getText($content);
- }
- }
- return $name;
- }
-
- public function addNameParts(array $parts, $content) {
- foreach ($parts as $part) {
- if ($part->kind === TokenKind::Name && !($part instanceof MissingToken)) {
- $this->parts[] = $part->getText($content);
- }
- }
- }
-
- public function getNameParts() {
- return $this->parts;
- }
-
- public function getFullyQualifiedNameText() : string {
- return join("\\", $this->parts);
- }
-
- public function __toString() {
- return $this->getFullyQualifiedNameText();
- }
-}
\ No newline at end of file
diff --git a/vendor/microsoft/tolerant-php-parser/src/SkippedToken.php b/vendor/microsoft/tolerant-php-parser/src/SkippedToken.php
deleted file mode 100644
index 34594db4..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/SkippedToken.php
+++ /dev/null
@@ -1,23 +0,0 @@
-kind, $token->fullStart, $token->start, $token->length);
- }
-
- #[ReturnTypeWillChange]
- public function jsonSerialize() {
- return array_merge(
- ["error" => $this->getTokenKindNameFromValue(TokenKind::SkippedToken)],
- parent::jsonSerialize()
- );
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/TextEdit.php b/vendor/microsoft/tolerant-php-parser/src/TextEdit.php
deleted file mode 100644
index a967b381..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/TextEdit.php
+++ /dev/null
@@ -1,53 +0,0 @@
-start = $start;
- $this->length = $length;
- $this->content = $content;
- }
-
- /**
- * Applies array of edits to the document, and returns the resulting text.
- * Supplied $edits must not overlap, and be ordered by increasing start position.
- *
- * Note that after applying edits, the original AST should be invalidated.
- *
- * @param TextEdit[] $edits
- * @param string $text
- * @return string
- */
- public static function applyEdits(array $edits, string $text) : string {
- $prevEditStart = PHP_INT_MAX;
- for ($i = \count($edits) - 1; $i >= 0; $i--) {
- $edit = $edits[$i];
- \assert(
- $prevEditStart > $edit->start && $prevEditStart > $edit->start + $edit->length,
- "Supplied TextEdit[] must not overlap, and be in increasing start position order."
- );
- if ($edit->start < 0 || $edit->length < 0 || $edit->start + $edit->length > \strlen($text)) {
- throw new \OutOfBoundsException("Applied TextEdit range out of bounds.");
- }
- $prevEditStart = $edit->start;
- $head = \substr($text, 0, $edit->start);
- $tail = \substr($text, $edit->start + $edit->length);
- $text = $head . $edit->content . $tail;
- }
- return $text;
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/Token.php b/vendor/microsoft/tolerant-php-parser/src/Token.php
deleted file mode 100644
index 5fa1595d..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/Token.php
+++ /dev/null
@@ -1,137 +0,0 @@
-getEndPosition() - $this->fullStart. */
- public $length;
-
- /**
- * @param int $kind
- * @param int $fullStart
- * @param int $start
- * @param int $length
- */
- public function __construct($kind, $fullStart, $start, $length) {
- $this->kind = $kind;
- $this->fullStart = $fullStart;
- $this->start = $start;
- $this->length = $length;
- }
-
- public function getLeadingCommentsAndWhitespaceText(string $document) : string {
- return substr($document, $this->fullStart, $this->start - $this->fullStart);
- }
-
- /**
- * @param string|null $document
- * @return bool|null|string
- */
- public function getText(string $document = null) {
- if ($document === null) {
- return null;
- }
- return substr($document, $this->start, $this->length - ($this->start - $this->fullStart));
- }
-
- public function getFullText(string $document) : string {
- return substr($document, $this->fullStart, $this->length);
- }
-
- /**
- * @return int
- */
- public function getStartPosition() {
- return $this->start;
- }
-
- /**
- * @return int
- */
- public function getFullStartPosition() {
- return $this->fullStart;
- }
-
- /**
- * @return int
- */
- public function getWidth() {
- return $this->length + $this->fullStart - $this->start;
- }
-
- /**
- * @return int
- */
- public function getFullWidth() {
- return $this->length;
- }
-
- /**
- * @return int
- */
- public function getEndPosition() {
- return $this->fullStart + $this->length;
- }
-
- /**
- * @return string[] - A hash map of the format [int $tokenKind => string $tokenName]
- */
- private static function getTokenKindNameFromValueMap() {
- static $mapToKindName;
- if ($mapToKindName === null) {
- $constants = (new \ReflectionClass("Microsoft\\PhpParser\\TokenKind"))->getConstants();
- $mapToKindName = \array_flip($constants);
- }
- return $mapToKindName;
- }
-
- /**
- * Returns the token kind name as a string, or the token number if the name
- * was not found.
- *
- * @param int $kind
- * @return int|string
- */
- public static function getTokenKindNameFromValue($kind) {
- $mapToKindName = self::getTokenKindNameFromValueMap();
- return $mapToKindName[$kind] ?? $kind;
- }
-
- #[ReturnTypeWillChange]
- public function jsonSerialize() {
- $kindName = $this->getTokenKindNameFromValue($this->kind);
-
- if (!isset($GLOBALS["SHORT_TOKEN_SERIALIZE"])) {
- $GLOBALS["SHORT_TOKEN_SERIALIZE"] = false;
- }
-
- if ($GLOBALS["SHORT_TOKEN_SERIALIZE"]) {
- return [
- "kind" => $kindName,
- "textLength" => $this->length - ($this->start - $this->fullStart)
- ];
- } else {
- return [
- "kind" => $kindName,
- "fullStart" => $this->fullStart,
- "start" => $this->start,
- "length" => $this->length
- ];
- }
- }
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/TokenKind.php b/vendor/microsoft/tolerant-php-parser/src/TokenKind.php
deleted file mode 100644
index b4d59c2d..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/TokenKind.php
+++ /dev/null
@@ -1,226 +0,0 @@
- TokenKind::AbstractKeyword,
- "and" => TokenKind::AndKeyword,
- "array" => TokenKind::ArrayKeyword,
- "as" => TokenKind::AsKeyword,
- "break" => TokenKind::BreakKeyword,
- "callable" => TokenKind::CallableKeyword,
- "case" => TokenKind::CaseKeyword,
- "catch" => TokenKind::CatchKeyword,
- "class" => TokenKind::ClassKeyword,
- "clone" => TokenKind::CloneKeyword,
- "const" => TokenKind::ConstKeyword,
- "continue" => TokenKind::ContinueKeyword,
- "declare" => TokenKind::DeclareKeyword,
- "default" => TokenKind::DefaultKeyword,
- "die" => TokenKind::DieKeyword,
- "do" => TokenKind::DoKeyword,
- "echo" => TokenKind::EchoKeyword,
- "else" => TokenKind::ElseKeyword,
- "elseif" => TokenKind::ElseIfKeyword,
- "empty" => TokenKind::EmptyKeyword,
- "enddeclare" => TokenKind::EndDeclareKeyword,
- "endfor" => TokenKind::EndForKeyword,
- "endforeach" => TokenKind::EndForEachKeyword,
- "endif" => TokenKind::EndIfKeyword,
- "endswitch" => TokenKind::EndSwitchKeyword,
- "endwhile" => TokenKind::EndWhileKeyword,
- "enum" => TokenKind::EnumKeyword,
- "eval" => TokenKind::EvalKeyword,
- "exit" => TokenKind::ExitKeyword,
- "extends" => TokenKind::ExtendsKeyword,
- "final" => TokenKind::FinalKeyword,
- "finally" => TokenKind::FinallyKeyword,
- "for" => TokenKind::ForKeyword,
- "foreach" => TokenKind::ForeachKeyword,
- "fn" => TokenKind::FnKeyword,
- "function" => TokenKind::FunctionKeyword,
- "global" => TokenKind::GlobalKeyword,
- "goto" => TokenKind::GotoKeyword,
- "if" => TokenKind::IfKeyword,
- "implements" => TokenKind::ImplementsKeyword,
- "include" => TokenKind::IncludeKeyword,
- "include_once" => TokenKind::IncludeOnceKeyword,
- "instanceof" => TokenKind::InstanceOfKeyword,
- "insteadof" => TokenKind::InsteadOfKeyword,
- "interface" => TokenKind::InterfaceKeyword,
- "isset" => TokenKind::IsSetKeyword,
- "list" => TokenKind::ListKeyword,
- "match" => TokenKind::MatchKeyword,
- "namespace" => TokenKind::NamespaceKeyword,
- "new" => TokenKind::NewKeyword,
- "or" => TokenKind::OrKeyword,
- "print" => TokenKind::PrintKeyword,
- "private" => TokenKind::PrivateKeyword,
- "protected" => TokenKind::ProtectedKeyword,
- "public" => TokenKind::PublicKeyword,
- "readonly" => TokenKind::ReadonlyKeyword,
- "require" => TokenKind::RequireKeyword,
- "require_once" => TokenKind::RequireOnceKeyword,
- "return" => TokenKind::ReturnKeyword,
- "static" => TokenKind::StaticKeyword,
- "switch" => TokenKind::SwitchKeyword,
- "throw" => TokenKind::ThrowKeyword,
- "trait" => TokenKind::TraitKeyword,
- "try" => TokenKind::TryKeyword,
- "unset" => TokenKind::UnsetKeyword,
- "use" => TokenKind::UseKeyword,
- "var" => TokenKind::VarKeyword,
- "while" => TokenKind::WhileKeyword,
- "xor" => TokenKind::XorKeyword,
- "yield" => TokenKind::YieldKeyword,
- "yield from" => TokenKind::YieldFromKeyword,
-
-
- // TODO soft reserved words?
- ];
-
- const RESERVED_WORDS = [
- // http://php.net/manual/en/reserved.constants.php
- // TRUE, FALSE, NULL are special predefined constants
- // TODO - also consider adding other constants
- "true" => TokenKind::TrueReservedWord,
- "false" => TokenKind::FalseReservedWord,
- "null" => TokenKind::NullReservedWord,
-
- // RESERVED WORDS:
- // http://php.net/manual/en/reserved.other-reserved-words.php
- "int" => TokenKind::IntReservedWord,
- "float" => TokenKind::FloatReservedWord,
- "bool" => TokenKind::BoolReservedWord,
- "string" => TokenKind::StringReservedWord,
- "binary" => TokenKind::BinaryReservedWord,
- "boolean" => TokenKind::BooleanReservedWord,
- "double" => TokenKind::DoubleReservedWord,
- "integer" => TokenKind::IntegerReservedWord,
- "object" => TokenKind::ObjectReservedWord,
- "real" => TokenKind::RealReservedWord,
- "void" => TokenKind::VoidReservedWord,
- "iterable" => TokenKind::IterableReservedWord,
- "mixed" => TokenKind::MixedReservedWord,
- "never" => TokenKind::NeverReservedWord,
- ];
-
- const OPERATORS_AND_PUNCTUATORS = [
- "[" => TokenKind::OpenBracketToken,
- "]" => TokenKind::CloseBracketToken,
- "(" => TokenKind::OpenParenToken,
- ")" => TokenKind::CloseParenToken,
- "{" => TokenKind::OpenBraceToken,
- "}" => TokenKind::CloseBraceToken,
- "." => TokenKind::DotToken,
- "->" => TokenKind::ArrowToken,
- "=>" => TokenKind::DoubleArrowToken,
- "++" => TokenKind::PlusPlusToken,
- "--" => TokenKind::MinusMinusToken,
- "**" => TokenKind::AsteriskAsteriskToken,
- "*" => TokenKind::AsteriskToken,
- "+" => TokenKind::PlusToken,
- "-" => TokenKind::MinusToken,
- "~" => TokenKind::TildeToken,
- "!" => TokenKind::ExclamationToken,
- "$" => TokenKind::DollarToken,
- "/" => TokenKind::SlashToken,
- "%" => TokenKind::PercentToken,
- "<<" => TokenKind::LessThanLessThanToken,
- ">>" => TokenKind::GreaterThanGreaterThanToken,
- "<" => TokenKind::LessThanToken,
- ">" => TokenKind::GreaterThanToken,
- "<=" => TokenKind::LessThanEqualsToken,
- ">=" => TokenKind::GreaterThanEqualsToken,
- "==" => TokenKind::EqualsEqualsToken,
- "===" => TokenKind::EqualsEqualsEqualsToken,
- "!=" => TokenKind::ExclamationEqualsToken,
- "!==" => TokenKind::ExclamationEqualsEqualsToken,
- "^" => TokenKind::CaretToken,
- "|" => TokenKind::BarToken,
- "&" => TokenKind::AmpersandToken,
- "&&" => TokenKind::AmpersandAmpersandToken,
- "||" => TokenKind::BarBarToken,
- "?" => TokenKind::QuestionToken,
- ":" => TokenKind::ColonToken,
- "::" => TokenKind::ColonColonToken,
- ";" => TokenKind::SemicolonToken,
- "=" => TokenKind::EqualsToken,
- "**=" => TokenKind::AsteriskAsteriskEqualsToken,
- "*=" => TokenKind::AsteriskEqualsToken,
- "/=" => TokenKind::SlashEqualsToken,
- "%=" => TokenKind::PercentEqualsToken,
- "+=" => TokenKind::PlusEqualsToken,
- "-=" => TokenKind::MinusEqualsToken,
- ".=" => TokenKind::DotEqualsToken,
- "<<=" => TokenKind::LessThanLessThanEqualsToken,
- ">>=" => TokenKind::GreaterThanGreaterThanEqualsToken,
- "&=" => TokenKind::AmpersandEqualsToken,
- "^=" => TokenKind::CaretEqualsToken,
- "|=" => TokenKind::BarEqualsToken,
- "," => TokenKind::CommaToken,
- "?->" => TokenKind::QuestionArrowToken,
- "??" => TokenKind::QuestionQuestionToken,
- "??=" => TokenKind::QuestionQuestionEqualsToken,
- "<=>" => TokenKind::LessThanEqualsGreaterThanToken,
- "<>" => TokenKind::LessThanGreaterThanToken,
- "..." => TokenKind::DotDotDotToken,
- "\\" => TokenKind::BackslashToken,
- "=" => TokenKind::ScriptSectionStartWithEchoTag, // TODO, technically not an operator
- " TokenKind::ScriptSectionStartTag, // TODO, technically not an operator
- " TokenKind::ScriptSectionStartTag, // TODO add tests
- " TokenKind::ScriptSectionStartTag,
- " TokenKind::ScriptSectionStartTag,
- " TokenKind::ScriptSectionStartTag,
- "?>" => TokenKind::ScriptSectionEndTag, // TODO, technically not an operator
- "?>\n" => TokenKind::ScriptSectionEndTag, // TODO, technically not an operator
- "?>\r\n" => TokenKind::ScriptSectionEndTag, // TODO, technically not an operator
- "?>\r" => TokenKind::ScriptSectionEndTag, // TODO, technically not an operator
- "@" => TokenKind::AtSymbolToken, // TODO not in spec
- "`" => TokenKind::BacktickToken
- ];
-
-// TODO add new tokens
-}
diff --git a/vendor/microsoft/tolerant-php-parser/src/bootstrap.php b/vendor/microsoft/tolerant-php-parser/src/bootstrap.php
deleted file mode 100644
index 821c5444..00000000
--- a/vendor/microsoft/tolerant-php-parser/src/bootstrap.php
+++ /dev/null
@@ -1,12 +0,0 @@
-> $GITHUB_OUTPUT
-
- - name: Cache dependencies
- uses: actions/cache@v3
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-composer-${{ matrix.php-versions }}-${{ hashFiles('**/composer.lock') }}
- restore-keys: ${{ runner.os }}-composer-${{ matrix.php-versions }}-
-
- - name: Install dependencies
- run: composer install --no-interaction --prefer-dist
-
- - name: Run unit tests
- run: XDEBUG_MODE=coverage ./vendor/bin/phpunit --coverage-text
-
- - name: Check codestyle
- run: ./vendor/bin/phpcs --standard=PEAR src/
diff --git a/vendor/netresearch/jsonmapper/LICENSE b/vendor/netresearch/jsonmapper/LICENSE
deleted file mode 100644
index 2ebd4813..00000000
--- a/vendor/netresearch/jsonmapper/LICENSE
+++ /dev/null
@@ -1,47 +0,0 @@
-Open Software License v. 3.0 (OSL-3.0)
-
-This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work:
-
- Licensed under the Open Software License version 3.0
-
-1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following:
-
- a) to reproduce the Original Work in copies, either alone or as part of a collective work;
-
- b) to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work;
-
- c) to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License;
-
- d) to perform the Original Work publicly; and
-
- e) to display the Original Work publicly.
-
-2) Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works.
-
-3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work.
-
-4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor’s trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license.
-
-5) External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c).
-
-6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work.
-
-7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer.
-
-8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation.
-
-9) Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including “fair use” or “fair dealing”). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c).
-
-10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware.
-
-11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License.
-
-12) Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License.
-
-13) Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
-
-14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.
-
-16) Modification of This License. This License is Copyright (c) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process.
\ No newline at end of file
diff --git a/vendor/netresearch/jsonmapper/composer.json b/vendor/netresearch/jsonmapper/composer.json
deleted file mode 100644
index 0c5c699e..00000000
--- a/vendor/netresearch/jsonmapper/composer.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "netresearch/jsonmapper",
- "description": "Map nested JSON structures onto PHP classes",
- "license": "OSL-3.0",
- "autoload": {
- "psr-0": {"JsonMapper": "src/"}
- },
- "authors": [
- {
- "name": "Christian Weiske",
- "email": "cweiske@cweiske.de",
- "homepage": "http://github.com/cweiske/jsonmapper/",
- "role": "Developer"
- }
- ],
- "support": {
- "email": "cweiske@cweiske.de",
- "issues": "https://github.com/cweiske/jsonmapper/issues"
- },
- "require":{
- "php": ">=7.1",
- "ext-spl": "*",
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*"
- },
- "require-dev": {
- "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0",
- "squizlabs/php_codesniffer": "~3.5"
- }
-}
diff --git a/vendor/netresearch/jsonmapper/contributing.rst b/vendor/netresearch/jsonmapper/contributing.rst
deleted file mode 100644
index 1e40f12c..00000000
--- a/vendor/netresearch/jsonmapper/contributing.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-**************************************
-How to add your features to JsonMapper
-**************************************
-
-If you want to add a new feature or a fix to this library, please consider these aspects:
-
-- Respect the original code style and continue using it - it uses `PEAR Coding Standards`__.
-- Pull requests fixing a bug should include a test case that illustrates the wrong behaviour.
-- Pull requests adding a new feature should also include a test for the new feature.
-
- __ http://pear.php.net/manual/en/standards.php
-
-Having test cases included in your pull request greatly helps reviewing it and will increase the chance of it being merged.
diff --git a/vendor/netresearch/jsonmapper/phpunit.xml b/vendor/netresearch/jsonmapper/phpunit.xml
deleted file mode 100644
index 306182e1..00000000
--- a/vendor/netresearch/jsonmapper/phpunit.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
- src/
-
-
-
-
- tests
-
-
-
diff --git a/vendor/netresearch/jsonmapper/src/JsonMapper.php b/vendor/netresearch/jsonmapper/src/JsonMapper.php
deleted file mode 100644
index 5ae3895b..00000000
--- a/vendor/netresearch/jsonmapper/src/JsonMapper.php
+++ /dev/null
@@ -1,924 +0,0 @@
-
- * @license OSL-3.0 http://opensource.org/licenses/osl-3.0
- * @link http://cweiske.de/
- */
-
-/**
- * Automatically map JSON structures into objects.
- *
- * @category Netresearch
- * @package JsonMapper
- * @author Christian Weiske
- * @license OSL-3.0 http://opensource.org/licenses/osl-3.0
- * @link http://cweiske.de/
- */
-class JsonMapper
-{
- /**
- * PSR-3 compatible logger object
- *
- * @link http://www.php-fig.org/psr/psr-3/
- * @var object
- * @see setLogger()
- */
- protected $logger;
-
- /**
- * Throw an exception when JSON data contain a property
- * that is not defined in the PHP class
- *
- * @var boolean
- */
- public $bExceptionOnUndefinedProperty = false;
-
- /**
- * Throw an exception if the JSON data miss a property
- * that is marked with @required in the PHP class
- *
- * @var boolean
- */
- public $bExceptionOnMissingData = false;
-
- /**
- * If the types of map() parameters shall be checked.
- *
- * You have to disable it if you're using the json_decode "assoc" parameter.
- *
- * json_decode($str, false)
- *
- * @var boolean
- */
- public $bEnforceMapType = true;
-
- /**
- * Throw an exception when an object is expected but the JSON contains
- * a non-object type.
- *
- * @var boolean
- */
- public $bStrictObjectTypeChecking = false;
-
- /**
- * Throw an exception, if null value is found
- * but the type of attribute does not allow nulls.
- *
- * @var bool
- */
- public $bStrictNullTypes = true;
-
- /**
- * Allow mapping of private and protected properties.
- *
- * @var boolean
- */
- public $bIgnoreVisibility = false;
-
- /**
- * Remove attributes that were not passed in JSON,
- * to avoid confusion between them and NULL values.
- *
- * @var boolean
- */
- public $bRemoveUndefinedAttributes = false;
-
- /**
- * Override class names that JsonMapper uses to create objects.
- * Useful when your setter methods accept abstract classes or interfaces.
- *
- * @var array
- */
- public $classMap = array();
-
- /**
- * Callback used when an undefined property is found.
- *
- * Works only when $bExceptionOnUndefinedProperty is disabled.
- *
- * Parameters to this function are:
- * 1. Object that is being filled
- * 2. Name of the unknown JSON property
- * 3. JSON value of the property
- *
- * @var callable
- */
- public $undefinedPropertyHandler = null;
-
- /**
- * Runtime cache for inspected classes. This is particularly effective if
- * mapArray() is called with a large number of objects
- *
- * @var array property inspection result cache
- */
- protected $arInspectedClasses = array();
-
- /**
- * Method to call on each object after deserialization is done.
- *
- * Is only called if it exists on the object.
- *
- * @var string|null
- */
- public $postMappingMethod = null;
-
- /**
- * Map data all data in $json into the given $object instance.
- *
- * @param object|array $json JSON object structure from json_decode()
- * @param object|class-string $object Object to map $json data into
- *
- * @return mixed Mapped object is returned.
- * @see mapArray()
- */
- public function map($json, $object)
- {
- if ($this->bEnforceMapType && !is_object($json)) {
- throw new InvalidArgumentException(
- 'JsonMapper::map() requires first argument to be an object'
- . ', ' . gettype($json) . ' given.'
- );
- }
- if (!is_object($object) && (!is_string($object) || !class_exists($object))) {
- throw new InvalidArgumentException(
- 'JsonMapper::map() requires second argument to '
- . 'be an object or existing class name'
- . ', ' . gettype($object) . ' given.'
- );
- }
-
- if (is_string($object)) {
- $object = $this->createInstance($object);
- }
-
- $strClassName = get_class($object);
- $rc = new ReflectionClass($object);
- $strNs = $rc->getNamespaceName();
- $providedProperties = array();
- foreach ($json as $key => $jvalue) {
- $key = $this->getSafeName($key);
- $providedProperties[$key] = true;
-
- // Store the property inspection results so we don't have to do it
- // again for subsequent objects of the same type
- if (!isset($this->arInspectedClasses[$strClassName][$key])) {
- $this->arInspectedClasses[$strClassName][$key]
- = $this->inspectProperty($rc, $key);
- }
-
- list($hasProperty, $accessor, $type, $isNullable)
- = $this->arInspectedClasses[$strClassName][$key];
-
- if (!$hasProperty) {
- if ($this->bExceptionOnUndefinedProperty) {
- throw new JsonMapper_Exception(
- 'JSON property "' . $key . '" does not exist'
- . ' in object of type ' . $strClassName
- );
- } else if ($this->undefinedPropertyHandler !== null) {
- $undefinedPropertyKey = call_user_func(
- $this->undefinedPropertyHandler,
- $object, $key, $jvalue
- );
-
- if (is_string($undefinedPropertyKey)) {
- list($hasProperty, $accessor, $type, $isNullable)
- = $this->inspectProperty($rc, $undefinedPropertyKey);
- }
- } else {
- $this->log(
- 'info',
- 'Property {property} does not exist in {class}',
- array('property' => $key, 'class' => $strClassName)
- );
- }
-
- if (!$hasProperty) {
- continue;
- }
- }
-
- if ($accessor === null) {
- if ($this->bExceptionOnUndefinedProperty) {
- throw new JsonMapper_Exception(
- 'JSON property "' . $key . '" has no public setter method'
- . ' in object of type ' . $strClassName
- );
- }
- $this->log(
- 'info',
- 'Property {property} has no public setter method in {class}',
- array('property' => $key, 'class' => $strClassName)
- );
- continue;
- }
-
- if ($isNullable || !$this->bStrictNullTypes) {
- if ($jvalue === null) {
- $this->setProperty($object, $accessor, null);
- continue;
- }
- $type = $this->removeNullable($type);
- } else if ($jvalue === null) {
- throw new JsonMapper_Exception(
- 'JSON property "' . $key . '" in class "'
- . $strClassName . '" must not be NULL'
- );
- }
-
- $type = $this->getFullNamespace($type, $strNs);
- $type = $this->getMappedType($type, $jvalue);
-
- if ($type === null || $type === 'mixed') {
- //no given type - simply set the json data
- $this->setProperty($object, $accessor, $jvalue);
- continue;
- } else if ($this->isObjectOfSameType($type, $jvalue)) {
- $this->setProperty($object, $accessor, $jvalue);
- continue;
- } else if ($this->isSimpleType($type)
- && !(is_array($jvalue) && $this->hasVariadicArrayType($accessor))
- ) {
- if ($type === 'string' && is_object($jvalue)) {
- throw new JsonMapper_Exception(
- 'JSON property "' . $key . '" in class "'
- . $strClassName . '" is an object and'
- . ' cannot be converted to a string'
- );
- }
- settype($jvalue, $type);
- $this->setProperty($object, $accessor, $jvalue);
- continue;
- }
-
- //FIXME: check if type exists, give detailed error message if not
- if ($type === '') {
- throw new JsonMapper_Exception(
- 'Empty type at property "'
- . $strClassName . '::$' . $key . '"'
- );
- } else if (strpos($type, '|')) {
- throw new JsonMapper_Exception(
- 'Cannot decide which of the union types shall be used: '
- . $type
- );
- }
-
- $array = null;
- $subtype = null;
- if ($this->isArrayOfType($type)) {
- //array
- $array = array();
- $subtype = substr($type, 0, -2);
- } else if (substr($type, -1) == ']') {
- list($proptype, $subtype) = explode('[', substr($type, 0, -1));
- if ($proptype == 'array') {
- $array = array();
- } else {
- $array = $this->createInstance($proptype, false, $jvalue);
- }
- } else if (is_array($jvalue) && $this->hasVariadicArrayType($accessor)) {
- $array = array();
- $subtype = $type;
- } else {
- if (is_a($type, 'ArrayAccess', true)) {
- $array = $this->createInstance($type, false, $jvalue);
- }
- }
-
- if ($array !== null) {
- if (!is_array($jvalue) && $this->isFlatType(gettype($jvalue))) {
- throw new JsonMapper_Exception(
- 'JSON property "' . $key . '" must be an array, '
- . gettype($jvalue) . ' given'
- );
- }
-
- $cleanSubtype = $this->removeNullable($subtype);
- $subtype = $this->getFullNamespace($cleanSubtype, $strNs);
- $child = $this->mapArray($jvalue, $array, $subtype, $key);
- } else if ($this->isFlatType(gettype($jvalue))) {
- //use constructor parameter if we have a class
- // but only a flat type (i.e. string, int)
- if ($this->bStrictObjectTypeChecking) {
- throw new JsonMapper_Exception(
- 'JSON property "' . $key . '" must be an object, '
- . gettype($jvalue) . ' given'
- );
- }
- $child = $this->createInstance($type, true, $jvalue);
- } else {
- $child = $this->createInstance($type, false, $jvalue);
- $this->map($jvalue, $child);
- }
- $this->setProperty($object, $accessor, $child);
- }
-
- if ($this->bExceptionOnMissingData) {
- $this->checkMissingData($providedProperties, $rc);
- }
-
- if ($this->bRemoveUndefinedAttributes) {
- $this->removeUndefinedAttributes($object, $providedProperties);
- }
-
- if ($this->postMappingMethod !== null
- && $rc->hasMethod($this->postMappingMethod)
- ) {
- $refDeserializePostMethod = $rc->getMethod(
- $this->postMappingMethod
- );
- $refDeserializePostMethod->setAccessible(true);
- $refDeserializePostMethod->invoke($object);
- }
-
- return $object;
- }
-
- /**
- * Convert a type name to a fully namespaced type name.
- *
- * @param string $type Type name (simple type or class name)
- * @param string $strNs Base namespace that gets prepended to the type name
- *
- * @return string Fully-qualified type name with namespace
- */
- protected function getFullNamespace($type, $strNs)
- {
- if ($type === null || $type === '' || $type[0] === '\\' || $strNs === '') {
- return $type;
- }
- list($first) = explode('[', $type, 2);
- if ($first === 'mixed' || $this->isSimpleType($first)) {
- return $type;
- }
-
- //create a full qualified namespace
- return '\\' . $strNs . '\\' . $type;
- }
-
- /**
- * Check required properties exist in json
- *
- * @param array $providedProperties array with json properties
- * @param object $rc Reflection class to check
- *
- * @throws JsonMapper_Exception
- *
- * @return void
- */
- protected function checkMissingData($providedProperties, ReflectionClass $rc)
- {
- foreach ($rc->getProperties() as $property) {
- $rprop = $rc->getProperty($property->name);
- $docblock = $rprop->getDocComment();
- $annotations = static::parseAnnotations($docblock);
- if (isset($annotations['required'])
- && !isset($providedProperties[$property->name])
- ) {
- throw new JsonMapper_Exception(
- 'Required property "' . $property->name . '" of class '
- . $rc->getName()
- . ' is missing in JSON data'
- );
- }
- }
- }
-
- /**
- * Remove attributes from object that were not passed in JSON data.
- *
- * This is to avoid confusion between those that were actually passed
- * as NULL, and those that weren't provided at all.
- *
- * @param object $object Object to remove properties from
- * @param array $providedProperties Array with JSON properties
- *
- * @return void
- */
- protected function removeUndefinedAttributes($object, $providedProperties)
- {
- foreach (get_object_vars($object) as $propertyName => $dummy) {
- if (!isset($providedProperties[$propertyName])) {
- unset($object->{$propertyName});
- }
- }
- }
-
- /**
- * Map an array
- *
- * @param array $json JSON array structure from json_decode()
- * @param mixed $array Array or ArrayObject that gets filled with
- * data from $json
- * @param string $class Class name for children objects.
- * All children will get mapped onto this type.
- * Supports class names and simple types
- * like "string" and nullability "string|null".
- * Pass "null" to not convert any values
- * @param string $parent_key Defines the key this array belongs to
- * in order to aid debugging.
- *
- * @return mixed Mapped $array is returned
- */
- public function mapArray($json, $array, $class = null, $parent_key = '')
- {
- $originalClass = $class;
- foreach ($json as $key => $jvalue) {
- $class = $this->getMappedType($originalClass, $jvalue);
- if ($class === null) {
- $array[$key] = $jvalue;
- } else if ($this->isArrayOfType($class)) {
- $array[$key] = $this->mapArray(
- $jvalue,
- array(),
- substr($class, 0, -2)
- );
- } else if ($this->isFlatType(gettype($jvalue))) {
- //use constructor parameter if we have a class
- // but only a flat type (i.e. string, int)
- if ($jvalue === null) {
- $array[$key] = null;
- } else {
- if ($this->isSimpleType($class)) {
- settype($jvalue, $class);
- $array[$key] = $jvalue;
- } else {
- $array[$key] = $this->createInstance(
- $class, true, $jvalue
- );
- }
- }
- } else if ($this->isFlatType($class)) {
- throw new JsonMapper_Exception(
- 'JSON property "' . ($parent_key ? $parent_key : '?') . '"'
- . ' is an array of type "' . $class . '"'
- . ' but contained a value of type'
- . ' "' . gettype($jvalue) . '"'
- );
- } else if (is_a($class, 'ArrayObject', true)) {
- $array[$key] = $this->mapArray(
- $jvalue,
- $this->createInstance($class)
- );
- } else {
- $array[$key] = $this->map(
- $jvalue, $this->createInstance($class, false, $jvalue)
- );
- }
- }
- return $array;
- }
-
- /**
- * Try to find out if a property exists in a given class.
- * Checks property first, falls back to setter method.
- *
- * @param ReflectionClass $rc Reflection class to check
- * @param string $name Property name
- *
- * @return array First value: if the property exists
- * Second value: the accessor to use (
- * ReflectionMethod or ReflectionProperty, or null)
- * Third value: type of the property
- * Fourth value: if the property is nullable
- */
- protected function inspectProperty(ReflectionClass $rc, $name)
- {
- //try setter method first
- $setter = 'set' . $this->getCamelCaseName($name);
-
- if ($rc->hasMethod($setter)) {
- $rmeth = $rc->getMethod($setter);
- if ($rmeth->isPublic() || $this->bIgnoreVisibility) {
- $isNullable = false;
- $rparams = $rmeth->getParameters();
- if (count($rparams) > 0) {
- $isNullable = $rparams[0]->allowsNull();
- $ptype = $rparams[0]->getType();
- if ($ptype !== null) {
- $typeName = $this->stringifyReflectionType($ptype);
- //allow overriding an "array" type hint
- // with a more specific class in the docblock
- if ($typeName !== 'array') {
- return array(
- true, $rmeth,
- $typeName,
- $isNullable,
- );
- }
- }
- }
-
- $docblock = $rmeth->getDocComment();
- $annotations = static::parseAnnotations($docblock);
-
- if (!isset($annotations['param'][0])) {
- return array(true, $rmeth, null, $isNullable);
- }
- list($type) = explode(' ', trim($annotations['param'][0]));
- return array(true, $rmeth, $type, $this->isNullable($type));
- }
- }
-
- //now try to set the property directly
- //we have to look it up in the class hierarchy
- $class = $rc;
- $rprop = null;
- do {
- if ($class->hasProperty($name)) {
- $rprop = $class->getProperty($name);
- }
- } while ($rprop === null && $class = $class->getParentClass());
-
- if ($rprop === null) {
- //case-insensitive property matching
- foreach ($rc->getProperties() as $p) {
- if ((strcasecmp($p->name, $name) === 0)) {
- $rprop = $p;
- break;
- }
- }
- }
- if ($rprop !== null) {
- if ($rprop->isPublic() || $this->bIgnoreVisibility) {
- $docblock = $rprop->getDocComment();
- $annotations = static::parseAnnotations($docblock);
-
- if (!isset($annotations['var'][0])) {
- // If there is no annotations (higher priority) inspect
- // if there's a scalar type being defined
- if (PHP_VERSION_ID >= 70400 && $rprop->hasType()) {
- $rPropType = $rprop->getType();
- $propTypeName = $this->stringifyReflectionType($rPropType);
- if ($this->isSimpleType($propTypeName)) {
- return array(
- true,
- $rprop,
- $propTypeName,
- $rPropType->allowsNull()
- );
- }
-
- return array(
- true,
- $rprop,
- '\\' . ltrim($propTypeName, '\\'),
- $rPropType->allowsNull()
- );
- }
-
- return array(true, $rprop, null, false);
- }
-
- //support "@var type description"
- list($type) = explode(' ', $annotations['var'][0]);
-
- return array(true, $rprop, $type, $this->isNullable($type));
- } else {
- //no setter, private property
- return array(true, null, null, false);
- }
- }
-
- //no setter, no property
- return array(false, null, null, false);
- }
-
- /**
- * Removes - and _ and makes the next letter uppercase
- *
- * @param string $name Property name
- *
- * @return string CamelCasedVariableName
- */
- protected function getCamelCaseName($name)
- {
- return str_replace(
- ' ', '', ucwords(str_replace(array('_', '-'), ' ', $name))
- );
- }
-
- /**
- * Since hyphens cannot be used in variables we have to uppercase them.
- *
- * Technically you may use them, but they are awkward to access.
- *
- * @param string $name Property name
- *
- * @return string Name without hyphen
- */
- protected function getSafeName($name)
- {
- if (strpos($name, '-') !== false) {
- $name = $this->getCamelCaseName($name);
- }
-
- return $name;
- }
-
- /**
- * Set a property on a given object to a given value.
- *
- * Checks if the setter or the property are public are made before
- * calling this method.
- *
- * @param object $object Object to set property on
- * @param object $accessor ReflectionMethod or ReflectionProperty
- * @param mixed $value Value of property
- *
- * @return void
- */
- protected function setProperty(
- $object, $accessor, $value
- ) {
- if (!$accessor->isPublic() && $this->bIgnoreVisibility) {
- $accessor->setAccessible(true);
- }
- if ($accessor instanceof ReflectionProperty) {
- $accessor->setValue($object, $value);
- } else if (is_array($value) && $this->hasVariadicArrayType($accessor)) {
- $accessor->invoke($object, ...$value);
- } else {
- //setter method
- $accessor->invoke($object, $value);
- }
- }
-
- /**
- * Create a new object of the given type.
- *
- * This method exists to be overwritten in child classes,
- * so you can do dependency injection or so.
- *
- * @param string $class Class name to instantiate
- * @param boolean $useParameter Pass $parameter to the constructor or not
- * @param mixed $jvalue Constructor parameter (the json value)
- *
- * @return object Freshly created object
- */
- protected function createInstance(
- $class, $useParameter = false, $jvalue = null
- ) {
- if ($useParameter) {
- if (PHP_VERSION_ID >= 80100
- && is_subclass_of($class, \BackedEnum::class)
- ) {
- return $class::from($jvalue);
- }
-
- return new $class($jvalue);
- } else {
- $reflectClass = new ReflectionClass($class);
- $constructor = $reflectClass->getConstructor();
- if (null === $constructor
- || $constructor->getNumberOfRequiredParameters() > 0
- ) {
- return $reflectClass->newInstanceWithoutConstructor();
- }
- return $reflectClass->newInstance();
- }
- }
-
- /**
- * Get the mapped class/type name for this class.
- * Returns the incoming classname if not mapped.
- *
- * @param string $type Type name to map
- * @param mixed $jvalue Constructor parameter (the json value)
- *
- * @return string The mapped type/class name
- */
- protected function getMappedType($type, $jvalue = null)
- {
- if (isset($this->classMap[$type])) {
- $target = $this->classMap[$type];
- } else if (is_string($type) && $type !== '' && $type[0] == '\\'
- && isset($this->classMap[substr($type, 1)])
- ) {
- $target = $this->classMap[substr($type, 1)];
- } else {
- $target = null;
- }
-
- if ($target) {
- if (is_callable($target)) {
- $type = $target($type, $jvalue);
- } else {
- $type = $target;
- }
- }
- return $type;
- }
-
- /**
- * Checks if the given type is a "simple type"
- *
- * @param string $type type name from gettype()
- *
- * @return boolean True if it is a simple PHP type
- *
- * @see isFlatType()
- */
- protected function isSimpleType($type)
- {
- return $type == 'string'
- || $type == 'boolean' || $type == 'bool'
- || $type == 'integer' || $type == 'int'
- || $type == 'double' || $type == 'float'
- || $type == 'array' || $type == 'object';
- }
-
- /**
- * Checks if the object is of this type or has this type as one of its parents
- *
- * @param string $type class name of type being required
- * @param mixed $value Some PHP value to be tested
- *
- * @return boolean True if $object has type of $type
- */
- protected function isObjectOfSameType($type, $value)
- {
- if (false === is_object($value)) {
- return false;
- }
-
- return is_a($value, $type);
- }
-
- /**
- * Checks if the given type is a type that is not nested
- * (simple type except array and object)
- *
- * @param string $type type name from gettype()
- *
- * @return boolean True if it is a non-nested PHP type
- *
- * @see isSimpleType()
- */
- protected function isFlatType($type)
- {
- return $type == 'NULL'
- || $type == 'string'
- || $type == 'boolean' || $type == 'bool'
- || $type == 'integer' || $type == 'int'
- || $type == 'double' || $type == 'float';
- }
-
- /**
- * Returns true if type is an array of elements
- * (bracket notation)
- *
- * @param string $strType type to be matched
- *
- * @return bool
- */
- protected function isArrayOfType($strType)
- {
- return substr($strType, -2) === '[]';
- }
-
- /**
- * Returns true if accessor is a method and has only one parameter
- * which is variadic.
- *
- * @param ReflectionMethod|ReflectionProperty|null $accessor accessor
- * to set value
- *
- * @return bool
- */
- protected function hasVariadicArrayType($accessor)
- {
- if (!$accessor instanceof ReflectionMethod) {
- return false;
- }
-
- $parameters = $accessor->getParameters();
-
- if (count($parameters) !== 1) {
- return false;
- }
-
- $parameter = $parameters[0];
-
- return $parameter->isVariadic();
- }
-
- /**
- * Checks if the given type is nullable
- *
- * @param string $type type name from the phpdoc param
- *
- * @return boolean True if it is nullable
- */
- protected function isNullable($type)
- {
- return stripos('|' . $type . '|', '|null|') !== false;
- }
-
- /**
- * Remove the 'null' section of a type
- *
- * @param string $type type name from the phpdoc param
- *
- * @return string The new type value
- */
- protected function removeNullable($type)
- {
- if ($type === null) {
- return null;
- }
- return substr(
- str_ireplace('|null|', '|', '|' . $type . '|'),
- 1, -1
- );
- }
-
- /**
- * Get a string representation of the reflection type.
- * Required because named, union and intersection types need to be handled.
- *
- * @param ReflectionType $type Native PHP type
- *
- * @return string "foo|bar"
- */
- protected function stringifyReflectionType(ReflectionType $type)
- {
- if ($type instanceof ReflectionNamedType) {
- return ($type->isBuiltin() ? '' : '\\') . $type->getName();
- }
-
- return implode(
- '|',
- array_map(
- function (ReflectionNamedType $type) {
- return ($type->isBuiltin() ? '' : '\\') . $type->getName();
- },
- $type->getTypes()
- )
- );
- }
-
- /**
- * Copied from PHPUnit 3.7.29, Util/Test.php
- *
- * @param string $docblock Full method docblock
- *
- * @return array Array of arrays.
- * Key is the "@"-name like "param",
- * each value is an array of the rest of the @-lines
- */
- protected static function parseAnnotations($docblock)
- {
- $annotations = array();
- // Strip away the docblock header and footer
- // to ease parsing of one line annotations
- $docblock = substr($docblock, 3, -2);
-
- $re = '/@(?P[A-Za-z_-]+)(?:[ \t]+(?P.*?))?[ \t]*\r?$/m';
- if (preg_match_all($re, $docblock, $matches)) {
- $numMatches = count($matches[0]);
-
- for ($i = 0; $i < $numMatches; ++$i) {
- $annotations[$matches['name'][$i]][] = $matches['value'][$i];
- }
- }
-
- return $annotations;
- }
-
- /**
- * Log a message to the $logger object
- *
- * @param string $level Logging level
- * @param string $message Text to log
- * @param array $context Additional information
- *
- * @return null
- */
- protected function log($level, $message, array $context = array())
- {
- if ($this->logger) {
- $this->logger->log($level, $message, $context);
- }
- }
-
- /**
- * Sets a logger instance on the object
- *
- * @param LoggerInterface $logger PSR-3 compatible logger object
- *
- * @return null
- */
- public function setLogger($logger)
- {
- $this->logger = $logger;
- }
-}
-?>
diff --git a/vendor/netresearch/jsonmapper/src/JsonMapper/Exception.php b/vendor/netresearch/jsonmapper/src/JsonMapper/Exception.php
deleted file mode 100644
index bb8040c6..00000000
--- a/vendor/netresearch/jsonmapper/src/JsonMapper/Exception.php
+++ /dev/null
@@ -1,26 +0,0 @@
-
- * @license OSL-3.0 http://opensource.org/licenses/osl-3.0
- * @link http://cweiske.de/
- */
-
-/**
- * Simple exception
- *
- * @category Netresearch
- * @package JsonMapper
- * @author Christian Weiske
- * @license OSL-3.0 http://opensource.org/licenses/osl-3.0
- * @link http://cweiske.de/
- */
-class JsonMapper_Exception extends Exception
-{
-}
-?>
diff --git a/vendor/nikic/php-parser/LICENSE b/vendor/nikic/php-parser/LICENSE
deleted file mode 100644
index 2e567183..00000000
--- a/vendor/nikic/php-parser/LICENSE
+++ /dev/null
@@ -1,29 +0,0 @@
-BSD 3-Clause License
-
-Copyright (c) 2011, Nikita Popov
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/nikic/php-parser/README.md b/vendor/nikic/php-parser/README.md
deleted file mode 100644
index 36de23cd..00000000
--- a/vendor/nikic/php-parser/README.md
+++ /dev/null
@@ -1,225 +0,0 @@
-PHP Parser
-==========
-
-[](https://coveralls.io/github/nikic/PHP-Parser?branch=master)
-
-This is a PHP 5.2 to PHP 8.2 parser written in PHP. Its purpose is to simplify static code analysis and
-manipulation.
-
-[**Documentation for version 4.x**][doc_4_x] (stable; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 8.2).
-
-[Documentation for version 3.x][doc_3_x] (unsupported; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.2).
-
-Features
---------
-
-The main features provided by this library are:
-
- * Parsing PHP 5, PHP 7, and PHP 8 code into an abstract syntax tree (AST).
- * Invalid code can be parsed into a partial AST.
- * The AST contains accurate location information.
- * Dumping the AST in human-readable form.
- * Converting an AST back to PHP code.
- * Experimental: Formatting can be preserved for partially changed ASTs.
- * Infrastructure to traverse and modify ASTs.
- * Resolution of namespaced names.
- * Evaluation of constant expressions.
- * Builders to simplify AST construction for code generation.
- * Converting an AST into JSON and back.
-
-Quick Start
------------
-
-Install the library using [composer](https://getcomposer.org):
-
- php composer.phar require nikic/php-parser
-
-Parse some PHP code into an AST and dump the result in human-readable form:
-
-```php
-create(ParserFactory::PREFER_PHP7);
-try {
- $ast = $parser->parse($code);
-} catch (Error $error) {
- echo "Parse error: {$error->getMessage()}\n";
- return;
-}
-
-$dumper = new NodeDumper;
-echo $dumper->dump($ast) . "\n";
-```
-
-This dumps an AST looking something like this:
-
-```
-array(
- 0: Stmt_Function(
- byRef: false
- name: Identifier(
- name: test
- )
- params: array(
- 0: Param(
- type: null
- byRef: false
- variadic: false
- var: Expr_Variable(
- name: foo
- )
- default: null
- )
- )
- returnType: null
- stmts: array(
- 0: Stmt_Expression(
- expr: Expr_FuncCall(
- name: Name(
- parts: array(
- 0: var_dump
- )
- )
- args: array(
- 0: Arg(
- value: Expr_Variable(
- name: foo
- )
- byRef: false
- unpack: false
- )
- )
- )
- )
- )
- )
-)
-```
-
-Let's traverse the AST and perform some kind of modification. For example, drop all function bodies:
-
-```php
-use PhpParser\Node;
-use PhpParser\Node\Stmt\Function_;
-use PhpParser\NodeTraverser;
-use PhpParser\NodeVisitorAbstract;
-
-$traverser = new NodeTraverser();
-$traverser->addVisitor(new class extends NodeVisitorAbstract {
- public function enterNode(Node $node) {
- if ($node instanceof Function_) {
- // Clean out the function body
- $node->stmts = [];
- }
- }
-});
-
-$ast = $traverser->traverse($ast);
-echo $dumper->dump($ast) . "\n";
-```
-
-This gives us an AST where the `Function_::$stmts` are empty:
-
-```
-array(
- 0: Stmt_Function(
- byRef: false
- name: Identifier(
- name: test
- )
- params: array(
- 0: Param(
- type: null
- byRef: false
- variadic: false
- var: Expr_Variable(
- name: foo
- )
- default: null
- )
- )
- returnType: null
- stmts: array(
- )
- )
-)
-```
-
-Finally, we can convert the new AST back to PHP code:
-
-```php
-use PhpParser\PrettyPrinter;
-
-$prettyPrinter = new PrettyPrinter\Standard;
-echo $prettyPrinter->prettyPrintFile($ast);
-```
-
-This gives us our original code, minus the `var_dump()` call inside the function:
-
-```php
- [
- 'startLine', 'endLine', 'startFilePos', 'endFilePos', 'comments'
-]]);
-$parser = (new PhpParser\ParserFactory)->create(
- PhpParser\ParserFactory::PREFER_PHP7,
- $lexer
-);
-$dumper = new PhpParser\NodeDumper([
- 'dumpComments' => true,
- 'dumpPositions' => $attributes['with-positions'],
-]);
-$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-
-$traverser = new PhpParser\NodeTraverser();
-$traverser->addVisitor(new PhpParser\NodeVisitor\NameResolver);
-
-foreach ($files as $file) {
- if (strpos($file, ' Code $code\n");
- } else {
- if (!file_exists($file)) {
- fwrite(STDERR, "File $file does not exist.\n");
- exit(1);
- }
-
- $code = file_get_contents($file);
- fwrite(STDERR, "====> File $file:\n");
- }
-
- if ($attributes['with-recovery']) {
- $errorHandler = new PhpParser\ErrorHandler\Collecting;
- $stmts = $parser->parse($code, $errorHandler);
- foreach ($errorHandler->getErrors() as $error) {
- $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
- fwrite(STDERR, $message . "\n");
- }
- if (null === $stmts) {
- continue;
- }
- } else {
- try {
- $stmts = $parser->parse($code);
- } catch (PhpParser\Error $error) {
- $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
- fwrite(STDERR, $message . "\n");
- exit(1);
- }
- }
-
- foreach ($operations as $operation) {
- if ('dump' === $operation) {
- fwrite(STDERR, "==> Node dump:\n");
- echo $dumper->dump($stmts, $code), "\n";
- } elseif ('pretty-print' === $operation) {
- fwrite(STDERR, "==> Pretty print:\n");
- echo $prettyPrinter->prettyPrintFile($stmts), "\n";
- } elseif ('json-dump' === $operation) {
- fwrite(STDERR, "==> JSON dump:\n");
- echo json_encode($stmts, JSON_PRETTY_PRINT), "\n";
- } elseif ('var-dump' === $operation) {
- fwrite(STDERR, "==> var_dump():\n");
- var_dump($stmts);
- } elseif ('resolve-names' === $operation) {
- fwrite(STDERR, "==> Resolved names.\n");
- $stmts = $traverser->traverse($stmts);
- }
- }
-}
-
-function formatErrorMessage(PhpParser\Error $e, $code, $withColumnInfo) {
- if ($withColumnInfo && $e->hasColumnInfo()) {
- return $e->getMessageWithColumnInfo($code);
- } else {
- return $e->getMessage();
- }
-}
-
-function showHelp($error = '') {
- if ($error) {
- fwrite(STDERR, $error . "\n\n");
- }
- fwrite($error ? STDERR : STDOUT, <<