Compare commits
1 Commits
01d29ee023
...
v1.4.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 83794a7464 |
@@ -13,8 +13,7 @@
|
||||
"keywords": ["postman", "collection", "converter", "http", "wget", "curl", "api", "convert"],
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"ext-json": "*",
|
||||
"ext-mbstring": "*"
|
||||
"ext-json": "*"
|
||||
},
|
||||
"bin": ["pm-convert"],
|
||||
"autoload": {
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace PmConverter;
|
||||
|
||||
use JsonException;
|
||||
use Stringable;
|
||||
|
||||
/**
|
||||
* Class that describes a request collection
|
||||
*
|
||||
* @property array|object $item
|
||||
* @property object $info
|
||||
* @property object|null $variable
|
||||
*/
|
||||
class Collection implements Stringable
|
||||
{
|
||||
/**
|
||||
* Closed constructor so that we could use factory methods
|
||||
*
|
||||
* @param object $json
|
||||
*/
|
||||
private function __construct(protected object $json)
|
||||
{
|
||||
// specific case when collection has been exported via postman api
|
||||
if (isset($json->collection)) {
|
||||
$json = $json->collection;
|
||||
}
|
||||
$this->json = $json;
|
||||
}
|
||||
|
||||
/**
|
||||
* Factory that creates new Collection from content read from file path
|
||||
*
|
||||
* @param string $path
|
||||
* @return static
|
||||
* @throws JsonException
|
||||
*/
|
||||
public static function fromFile(string $path): static
|
||||
{
|
||||
$content = file_get_contents(FileSystem::normalizePath($path));
|
||||
$json = json_decode($content, flags: JSON_THROW_ON_ERROR);
|
||||
return new static($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function __toString(): string
|
||||
{
|
||||
return json_encode($this->json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns reference to the parsed json structure
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
public function &raw(): object
|
||||
{
|
||||
return $this->json;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns reference to any part of the parsed json structure
|
||||
*
|
||||
* @param string $name
|
||||
* @return mixed
|
||||
*/
|
||||
public function &__get(string $name): mixed
|
||||
{
|
||||
return $this->json->$name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns collection name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function name(): string
|
||||
{
|
||||
return $this->json->info->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection version
|
||||
*
|
||||
* @return CollectionVersion
|
||||
*/
|
||||
public function version(): CollectionVersion
|
||||
{
|
||||
return match (true) {
|
||||
str_contains($this->json->info->schema, '/v2.0.') => CollectionVersion::Version20,
|
||||
str_contains($this->json->info->schema, '/v2.1.') => CollectionVersion::Version21,
|
||||
default => CollectionVersion::Unknown
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PmConverter;
|
||||
|
||||
enum CollectionVersion: string
|
||||
{
|
||||
case Version20 = 'v2.0';
|
||||
case Version21 = 'v2.1';
|
||||
case Unknown = 'unknown';
|
||||
}
|
||||
@@ -5,15 +5,11 @@ declare(strict_types=1);
|
||||
namespace PmConverter\Converters\Abstract;
|
||||
|
||||
use Exception;
|
||||
use PmConverter\Collection;
|
||||
use PmConverter\Converters\{
|
||||
ConverterContract,
|
||||
RequestContract};
|
||||
use PmConverter\Environment;
|
||||
use PmConverter\Exceptions\{
|
||||
CannotCreateDirectoryException,
|
||||
DirectoryIsNotWriteableException,
|
||||
InvalidHttpVersionException};
|
||||
use PmConverter\Exceptions\InvalidHttpVersionException;
|
||||
use PmConverter\FileSystem;
|
||||
|
||||
/**
|
||||
@@ -22,9 +18,9 @@ use PmConverter\FileSystem;
|
||||
abstract class AbstractConverter implements ConverterContract
|
||||
{
|
||||
/**
|
||||
* @var Collection|null
|
||||
* @var object|null
|
||||
*/
|
||||
protected ?Collection $collection = null;
|
||||
protected ?object $collection = null;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
@@ -49,32 +45,14 @@ abstract class AbstractConverter implements ConverterContract
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new directory to save a converted collection into
|
||||
* Converts collection requests
|
||||
*
|
||||
* @param string $outputPath
|
||||
* @return void
|
||||
* @throws CannotCreateDirectoryException
|
||||
* @throws DirectoryIsNotWriteableException
|
||||
* @throws Exception
|
||||
*/
|
||||
protected function prepareOutputDir(string $outputPath): void
|
||||
public function convert(object $collection, string $outputPath): void
|
||||
{
|
||||
$outputPath = sprintf('%s%s%s', $outputPath, DIRECTORY_SEPARATOR, static::OUTPUT_DIR);
|
||||
$this->outputPath = FileSystem::makeDir($outputPath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts collection requests
|
||||
*
|
||||
* @param Collection $collection
|
||||
* @param string $outputPath
|
||||
* @return void
|
||||
* @throws CannotCreateDirectoryException
|
||||
* @throws DirectoryIsNotWriteableException
|
||||
* @throws Exception
|
||||
*/
|
||||
public function convert(Collection $collection, string $outputPath): void
|
||||
{
|
||||
$this->prepareOutputDir($outputPath);
|
||||
$this->collection = $collection;
|
||||
$this->setVariables();
|
||||
foreach ($collection->item as $item) {
|
||||
@@ -116,9 +94,7 @@ abstract class AbstractConverter implements ConverterContract
|
||||
*/
|
||||
protected function isItemFolder(object $item): bool
|
||||
{
|
||||
return !empty($item->item)
|
||||
&& is_array($item->item)
|
||||
&& empty($item->request);
|
||||
return !empty($item->item) && empty($item->request);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -156,19 +132,19 @@ abstract class AbstractConverter implements ConverterContract
|
||||
{
|
||||
$request_class = static::REQUEST_CLASS;
|
||||
|
||||
/** @var RequestContract $request */
|
||||
$request = new $request_class();
|
||||
$request->setName($item->name);
|
||||
$request->setHttpVersion(1.1); //TODO http version?
|
||||
$request->setDescription($item->request?->description ?? null);
|
||||
$request->setVerb($item->request->method);
|
||||
$request->setUrl($item->request->url->raw);
|
||||
$request->setHeaders($item->request->header);
|
||||
$request->setAuth($item->request?->auth ?? $this->collection?->auth ?? null);
|
||||
/** @var RequestContract $result */
|
||||
$result = new $request_class();
|
||||
$result->setName($item->name);
|
||||
$result->setHttpVersion(1.1); //TODO http version?
|
||||
$result->setDescription($item->request?->description ?? null);
|
||||
$result->setVerb($item->request->method);
|
||||
$result->setUrl($item->request->url->raw);
|
||||
$result->setHeaders($item->request->header);
|
||||
$result->setAuth($item->request?->auth ?? $this->collection?->auth ?? null);
|
||||
if ($item->request->method !== 'GET' && !empty($item->request->body)) {
|
||||
$request->setBody($item->request->body);
|
||||
$result->setBody($item->request->body);
|
||||
}
|
||||
return $request;
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@ use PmConverter\Converters\RequestContract;
|
||||
use PmConverter\Exceptions\{
|
||||
EmptyHttpVerbException,
|
||||
InvalidHttpVersionException};
|
||||
use PmConverter\HttpVersion;
|
||||
use PmConverter\HttpVersions;
|
||||
use Stringable;
|
||||
|
||||
/**
|
||||
@@ -61,9 +61,9 @@ abstract class AbstractRequest implements Stringable, RequestContract
|
||||
*/
|
||||
public function setHttpVersion(float $version): static
|
||||
{
|
||||
if (!in_array($version, HttpVersion::values())) {
|
||||
if (!in_array($version, HttpVersions::values())) {
|
||||
throw new InvalidHttpVersionException(
|
||||
'Only these HTTP versions are supported: ' . implode(', ', HttpVersion::values())
|
||||
'Only these HTTP versions are supported: ' . implode(', ', HttpVersions::values())
|
||||
);
|
||||
}
|
||||
$this->httpVersion = $version;
|
||||
@@ -219,12 +219,11 @@ abstract class AbstractRequest implements Stringable, RequestContract
|
||||
{
|
||||
$this->setBodymode($body->mode);
|
||||
if ($body->mode === 'formdata') {
|
||||
$this->setHeader('Content-Type', 'multipart/form-data')->setFormdataBody($body);
|
||||
} elseif ($body->mode === 'raw') {
|
||||
$this->setBodyAsIs($body);
|
||||
if (!empty($body->options) && $body->options->{$this->bodymode}->language === 'json') {
|
||||
$this->setHeader('Content-Type', 'application/json');
|
||||
}
|
||||
$this->setHeader('Content-Type', 'multipart/form-data')
|
||||
->setFormdataBody($body);
|
||||
} elseif (!empty($body->options) && $body->options->{$this->bodymode}->language === 'json') {
|
||||
$this->setHeader('Content-Type', 'application/json')
|
||||
->setJsonBody($body);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
@@ -252,7 +251,7 @@ abstract class AbstractRequest implements Stringable, RequestContract
|
||||
* @param object $body
|
||||
* @return $this
|
||||
*/
|
||||
protected function setBodyAsIs(object $body): static
|
||||
protected function setJsonBody(object $body): static
|
||||
{
|
||||
$this->body = $body->{$this->getBodymode()};
|
||||
return $this;
|
||||
|
||||
@@ -8,8 +8,6 @@ namespace PmConverter\Converters;
|
||||
use PmConverter\Converters\{
|
||||
Curl\CurlConverter,
|
||||
Http\HttpConverter,
|
||||
Postman20\Postman20Converter,
|
||||
Postman21\Postman21Converter,
|
||||
Wget\WgetConverter};
|
||||
|
||||
enum ConvertFormat: string
|
||||
@@ -17,6 +15,4 @@ enum ConvertFormat: string
|
||||
case Http = HttpConverter::class;
|
||||
case Curl = CurlConverter::class;
|
||||
case Wget = WgetConverter::class;
|
||||
case Postman20 = Postman20Converter::class;
|
||||
case Postman21 = Postman21Converter::class;
|
||||
}
|
||||
|
||||
@@ -4,10 +4,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace PmConverter\Converters;
|
||||
|
||||
use PmConverter\Collection;
|
||||
|
||||
interface ConverterContract
|
||||
{
|
||||
public function convert(Collection $collection, string $outputPath): void;
|
||||
public function convert(object $collection, string $outputPath): void;
|
||||
public function getOutputPath(): string;
|
||||
}
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PmConverter\Converters\Postman20;
|
||||
|
||||
use PmConverter\Collection;
|
||||
use PmConverter\Converters\{
|
||||
Abstract\AbstractConverter,
|
||||
ConverterContract};
|
||||
use PmConverter\Exceptions\CannotCreateDirectoryException;
|
||||
use PmConverter\Exceptions\DirectoryIsNotWriteableException;
|
||||
use PmConverter\FileSystem;
|
||||
|
||||
/**
|
||||
* Converts Postman Collection v2.1 to v2.0
|
||||
*/
|
||||
class Postman20Converter extends AbstractConverter implements ConverterContract
|
||||
{
|
||||
protected const FILE_EXT = 'v20.postman_collection.json';
|
||||
|
||||
protected const OUTPUT_DIR = 'pm-v2.0';
|
||||
|
||||
/**
|
||||
* Converts collection requests
|
||||
*
|
||||
* @param Collection $collection
|
||||
* @param string $outputPath
|
||||
* @return void
|
||||
* @throws CannotCreateDirectoryException
|
||||
* @throws DirectoryIsNotWriteableException
|
||||
*/
|
||||
public function convert(Collection $collection, string $outputPath): void
|
||||
{
|
||||
$this->collection = $collection;
|
||||
$this->collection->info->schema = str_replace('/v2.1.', '/v2.0.', $this->collection->info->schema);
|
||||
$this->prepareOutputDir($outputPath);
|
||||
$this->convertAuth($this->collection->raw());
|
||||
foreach ($this->collection->item as $item) {
|
||||
$this->convertItem($item);
|
||||
}
|
||||
$this->writeCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes converted collection into file
|
||||
*
|
||||
* @return bool
|
||||
* @throws CannotCreateDirectoryException
|
||||
* @throws DirectoryIsNotWriteableException
|
||||
*/
|
||||
protected function writeCollection(): bool
|
||||
{
|
||||
$filedir = FileSystem::makeDir($this->outputPath);
|
||||
$filepath = sprintf('%s%s%s.%s', $filedir, DIRECTORY_SEPARATOR, $this->collection->name(), static::FILE_EXT);
|
||||
return file_put_contents($filepath, $this->collection) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes some requests fields in place
|
||||
*
|
||||
* @param mixed $item
|
||||
* @return void
|
||||
*/
|
||||
protected function convertItem(mixed $item): void
|
||||
{
|
||||
if ($this->isItemFolder($item)) {
|
||||
foreach ($item->item as $subitem) {
|
||||
if ($this->isItemFolder($subitem)) {
|
||||
$this->convertItem($subitem);
|
||||
} else {
|
||||
$this->convertAuth($subitem->request);
|
||||
$this->convertRequestUrl($subitem->request);
|
||||
$this->convertResponseUrls($subitem->response);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->convertAuth($item->request);
|
||||
$this->convertRequestUrl($item->request);
|
||||
$this->convertResponseUrls($item->response);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts auth object from v2.1 to v2.0
|
||||
*
|
||||
* @param object $request
|
||||
* @return void
|
||||
*/
|
||||
protected function convertAuth(object $request): void
|
||||
{
|
||||
if (empty($request->auth)) {
|
||||
return;
|
||||
}
|
||||
$type = $request->auth->type;
|
||||
if ($type !== 'noauth' && is_array($request->auth->$type)) {
|
||||
$auth = [];
|
||||
foreach ($request->auth->$type as $param) {
|
||||
$auth[$param->key] = $param->value;
|
||||
}
|
||||
$request->auth->$type = (object)$auth;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts requests URLs from object v2.1 to string v2.0
|
||||
*
|
||||
* @param object $request
|
||||
* @return void
|
||||
*/
|
||||
protected function convertRequestUrl(object $request): void
|
||||
{
|
||||
if (is_object($request->url)) {
|
||||
$request->url = $request->url->raw;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts URLs response examples from object v2.1 to string v2.0
|
||||
*
|
||||
* @param array $responses
|
||||
* @return void
|
||||
*/
|
||||
protected function convertResponseUrls(array $responses): void
|
||||
{
|
||||
foreach ($responses as $response) {
|
||||
if (is_object($response->originalRequest->url)) {
|
||||
$response->originalRequest->url = $response->originalRequest->url->raw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,164 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PmConverter\Converters\Postman21;
|
||||
|
||||
use PmConverter\Collection;
|
||||
use PmConverter\Converters\{
|
||||
Abstract\AbstractConverter,
|
||||
ConverterContract};
|
||||
use PmConverter\Exceptions\CannotCreateDirectoryException;
|
||||
use PmConverter\Exceptions\DirectoryIsNotWriteableException;
|
||||
use PmConverter\FileSystem;
|
||||
|
||||
/**
|
||||
* Converts Postman Collection v2.0 to v2.1
|
||||
*/
|
||||
class Postman21Converter extends AbstractConverter implements ConverterContract
|
||||
{
|
||||
protected const FILE_EXT = 'v21.postman_collection.json';
|
||||
|
||||
protected const OUTPUT_DIR = 'pm-v2.1';
|
||||
|
||||
/**
|
||||
* Converts collection requests
|
||||
*
|
||||
* @param Collection $collection
|
||||
* @param string $outputPath
|
||||
* @return void
|
||||
* @throws CannotCreateDirectoryException
|
||||
* @throws DirectoryIsNotWriteableException
|
||||
*/
|
||||
public function convert(Collection $collection, string $outputPath): void
|
||||
{
|
||||
$this->collection = $collection;
|
||||
$this->collection->info->schema = str_replace('/v2.0.', '/v2.1.', $this->collection->info->schema);
|
||||
$this->prepareOutputDir($outputPath);
|
||||
$this->convertAuth($this->collection->raw());
|
||||
foreach ($this->collection->item as $item) {
|
||||
$this->convertItem($item);
|
||||
}
|
||||
$this->writeCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes converted collection into file
|
||||
*
|
||||
* @return bool
|
||||
* @throws CannotCreateDirectoryException
|
||||
* @throws DirectoryIsNotWriteableException
|
||||
*/
|
||||
protected function writeCollection(): bool
|
||||
{
|
||||
$filedir = FileSystem::makeDir($this->outputPath);
|
||||
$filepath = sprintf('%s%s%s.%s', $filedir, DIRECTORY_SEPARATOR, $this->collection->name(), static::FILE_EXT);
|
||||
return file_put_contents($filepath, $this->collection) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes some requests fields in place
|
||||
*
|
||||
* @param mixed $item
|
||||
* @return void
|
||||
*/
|
||||
protected function convertItem(mixed $item): void
|
||||
{
|
||||
if ($this->isItemFolder($item)) {
|
||||
foreach ($item->item as $subitem) {
|
||||
if ($this->isItemFolder($subitem)) {
|
||||
$this->convertItem($subitem);
|
||||
} else {
|
||||
$this->convertAuth($subitem->request);
|
||||
$this->convertRequestUrl($subitem->request);
|
||||
$this->convertResponseUrls($subitem->response);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->convertAuth($item->request);
|
||||
$this->convertRequestUrl($item->request);
|
||||
$this->convertResponseUrls($item->response);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts auth object from v2.0 to v2.1
|
||||
*
|
||||
* @param object $request
|
||||
* @return void
|
||||
*/
|
||||
protected function convertAuth(object $request): void
|
||||
{
|
||||
if (empty($request->auth)) {
|
||||
return;
|
||||
}
|
||||
$type = $request->auth->type;
|
||||
if ($type !== 'noauth' && isset($request->auth->$type)) {
|
||||
$auth = [];
|
||||
foreach ($request->auth->$type as $key => $value) {
|
||||
$auth[] = (object)[
|
||||
'key' => $key,
|
||||
'value' => $value,
|
||||
'type' => 'string',
|
||||
];
|
||||
}
|
||||
$request->auth->$type = $auth;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts requests URLs from string v2.0 to object v2.1
|
||||
*
|
||||
* @param object $request
|
||||
* @return void
|
||||
*/
|
||||
protected function convertRequestUrl(object $request): void
|
||||
{
|
||||
if (is_string($request->url) && mb_strlen($request->url) > 0) {
|
||||
$data = array_values(array_filter(explode('/', $request->url))); //TODO URL parsing
|
||||
if (count($data) === 1) {
|
||||
$url = [
|
||||
'raw' => $request->url,
|
||||
'host' => [$data[0] ?? $request->url],
|
||||
];
|
||||
} else {
|
||||
$url = [
|
||||
'raw' => $request->url,
|
||||
'protocol' => str_replace(':', '', $data[0]),
|
||||
'host' => [$data[1] ?? $request->url],
|
||||
'path' => array_slice($data, 2),
|
||||
];
|
||||
}
|
||||
$request->url = (object)$url;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts URLs response examples from string v2.0 to object v2.1
|
||||
*
|
||||
* @param array $responses
|
||||
* @return void
|
||||
*/
|
||||
protected function convertResponseUrls(array $responses): void
|
||||
{
|
||||
foreach ($responses as $response) {
|
||||
if (is_string($response->originalRequest->url)) {
|
||||
$data = array_values(array_filter(explode('/', $response->originalRequest->url))); //TODO URL parsing
|
||||
if (count($data) === 1) {
|
||||
$url = [
|
||||
'raw' => $response->originalRequest->url,
|
||||
'host' => [$data[0] ?? $response->originalRequest->url],
|
||||
];
|
||||
} else {
|
||||
$url = [
|
||||
'raw' => $response->originalRequest->url,
|
||||
'protocol' => str_replace(':', '', $data[0]),
|
||||
'host' => [$data[1] ?? $response->originalRequest->url],
|
||||
'path' => array_slice($data, 2),
|
||||
];
|
||||
}
|
||||
$response->originalRequest->url = (object)$url;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,16 +12,14 @@ class Environment implements \ArrayAccess
|
||||
protected array $vars = [];
|
||||
|
||||
/**
|
||||
* @param object|null $env
|
||||
* @param object $env
|
||||
*/
|
||||
public function __construct(protected ?object $env)
|
||||
public function __construct(protected object $env)
|
||||
{
|
||||
if (!empty($env->values)) {
|
||||
foreach ($env->values as $var) {
|
||||
$this->vars[static::formatKey($var->key)] = $var->value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if there are some vars or not
|
||||
|
||||
@@ -4,7 +4,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace PmConverter;
|
||||
|
||||
use JsonException;
|
||||
use PmConverter\Exceptions\{
|
||||
CannotCreateDirectoryException,
|
||||
DirectoryIsNotReadableException,
|
||||
@@ -111,14 +110,16 @@ class FileSystem
|
||||
*
|
||||
* @param string $path
|
||||
* @return bool
|
||||
* @throws JsonException
|
||||
*/
|
||||
public static function isCollectionFile(string $path): bool
|
||||
{
|
||||
return (!empty($path = trim(static::normalizePath($path))))
|
||||
$path = static::normalizePath($path);
|
||||
return !empty($path = trim($path))
|
||||
&& str_ends_with($path, '.postman_collection.json')
|
||||
&& file_exists($path)
|
||||
&& is_readable($path)
|
||||
&& Collection::fromFile($path)->version() !== CollectionVersion::Unknown;
|
||||
&& ($json = json_decode(file_get_contents($path), true))
|
||||
&& json_last_error() === JSON_ERROR_NONE
|
||||
&& isset($json['collection']['info']['name']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace PmConverter;
|
||||
|
||||
enum HttpVersion: string
|
||||
enum HttpVersions: string
|
||||
{
|
||||
case Version10 = '1.0';
|
||||
case Version11 = '1.1';
|
||||
@@ -21,7 +21,7 @@ class Processor
|
||||
/**
|
||||
* Converter version
|
||||
*/
|
||||
public const VERSION = '1.4.1';
|
||||
public const VERSION = '1.4.0';
|
||||
|
||||
/**
|
||||
* @var string[] Paths to collection files
|
||||
@@ -54,7 +54,7 @@ class Processor
|
||||
protected array $converters = [];
|
||||
|
||||
/**
|
||||
* @var Collection[] Collections that will be converted into choosen formats
|
||||
* @var object[] Collections that will be converted into choosen formats
|
||||
*/
|
||||
protected array $collections = [];
|
||||
|
||||
@@ -93,7 +93,6 @@ class Processor
|
||||
* Parses an array of arguments came from cli
|
||||
*
|
||||
* @return void
|
||||
* @throws JsonException
|
||||
*/
|
||||
protected function parseArgs(): void
|
||||
{
|
||||
@@ -108,7 +107,7 @@ class Processor
|
||||
$normpath = FileSystem::normalizePath($rawpath);
|
||||
if (!FileSystem::isCollectionFile($normpath)) {
|
||||
throw new InvalidArgumentException(
|
||||
sprintf("not a valid collection:%s\t%s %s", PHP_EOL, $arg, $rawpath)
|
||||
sprintf("this is not a valid collection file:%s\t%s %s", PHP_EOL, $arg, $rawpath)
|
||||
);
|
||||
}
|
||||
$this->collectionPaths[] = $this->argv[$idx + 1];
|
||||
@@ -157,14 +156,6 @@ class Processor
|
||||
$this->formats[ConvertFormat::Wget->name] = ConvertFormat::Wget;
|
||||
break;
|
||||
|
||||
case '--v2.0':
|
||||
$this->formats[ConvertFormat::Postman20->name] = ConvertFormat::Postman20;
|
||||
break;
|
||||
|
||||
case '--v2.1':
|
||||
$this->formats[ConvertFormat::Postman21->name] = ConvertFormat::Postman21;
|
||||
break;
|
||||
|
||||
case '--var':
|
||||
[$var, $value] = explode('=', trim($this->argv[$idx + 1]));
|
||||
$this->vars[$var] = $value;
|
||||
@@ -228,8 +219,12 @@ class Processor
|
||||
protected function initCollections(): void
|
||||
{
|
||||
foreach ($this->collectionPaths as $collectionPath) {
|
||||
$collection = Collection::fromFile($collectionPath);
|
||||
$this->collections[$collection->name()] = $collection;
|
||||
$content = file_get_contents(FileSystem::normalizePath($collectionPath));
|
||||
$content = json_decode($content, flags: JSON_THROW_ON_ERROR);
|
||||
if (!property_exists($content, 'collection') || empty($content?->collection)) {
|
||||
throw new JsonException("not a valid collection: $collectionPath");
|
||||
}
|
||||
$this->collections[$content->collection->info->name] = $content->collection;
|
||||
}
|
||||
unset($this->collectionPaths, $content);
|
||||
}
|
||||
@@ -302,13 +297,8 @@ class Processor
|
||||
protected function printStats(int $success, int $count): void
|
||||
{
|
||||
$time = (hrtime(true) - $this->initTime) / 1_000_000;
|
||||
$timeFmt = 'ms';
|
||||
if ($time > 1000) {
|
||||
$time /= 1000;
|
||||
$timeFmt = 'sec';
|
||||
}
|
||||
$ram = (memory_get_peak_usage(true) - $this->initRam) / 1024 / 1024;
|
||||
printf("Converted %d/%d in %.2f $timeFmt using up to %.2f MiB RAM%s", $success, $count, $time, $ram, PHP_EOL);
|
||||
printf('Converted %d of %d in %.3f ms using up to %.3f MiB RAM%s', $success, $count, $time, $ram, PHP_EOL);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,7 +11,7 @@ class AbstractRequestTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest
|
||||
* @covers PmConverter\HttpVersion
|
||||
* @covers PmConverter\HttpVersions
|
||||
* @return void
|
||||
* @throws InvalidHttpVersionException
|
||||
*/
|
||||
@@ -26,7 +26,7 @@ class AbstractRequestTest extends TestCase
|
||||
/**
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest::getVerb()
|
||||
* @covers PmConverter\HttpVersion
|
||||
* @covers PmConverter\HttpVersions
|
||||
* @return void
|
||||
* @throws InvalidHttpVersionException
|
||||
*/
|
||||
@@ -215,7 +215,7 @@ class AbstractRequestTest extends TestCase
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest::setBodymode()
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest::setHeader()
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest::setBody()
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest::setBodyAsIs()
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest::setJsonBody()
|
||||
* @covers PmConverter\Converters\Abstract\AbstractRequest::getBody()
|
||||
* @return void
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user