diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ce9d61c5..7914fad0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,13 +16,13 @@ jobs: php-version: '8.1' - name: Setup Docker - run: docker-compose up -d --build + run: docker compose up -d --build - name: Wait for Server to be ready run: sleep 10 - name: Run FPM Tests run: docker compose exec fpm vendor/bin/phpunit --configuration phpunit.xml - + - name: Run Swoole Tests - run: docker compose exec swoole vendor/bin/phpunit --configuration phpunit.xml \ No newline at end of file + run: docker compose exec swoole vendor/bin/phpunit --configuration phpunit.xml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4701ba07..9fa002eb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -66,9 +66,9 @@ $ git push origin [name_of_your_new_branch] ### Testing -- `docker-compose up -d` -- `docker-compose exec web vendor/bin/phpunit --configuration phpunit.xml` -- `docker-compose exec web vendor/bin/psalm --show-info=true` +- `docker compose up -d` +- `docker compose exec web vendor/bin/phpunit --configuration phpunit.xml` +- `docker compose exec web vendor/bin/psalm --show-info=true` ## Introducing New Features diff --git a/src/Http/Response.php b/src/Http/Response.php index e6e7f2ad..d01fa222 100755 --- a/src/Http/Response.php +++ b/src/Http/Response.php @@ -42,90 +42,72 @@ abstract class Response * HTTP response status codes */ public const STATUS_CODE_CONTINUE = 100; - public const STATUS_CODE_SWITCHING_PROTOCOLS = 101; + public const STATUS_CODE_PROCESSING = 102; + public const STATUS_CODE_EARLY_HINTS = 103; public const STATUS_CODE_OK = 200; - public const STATUS_CODE_CREATED = 201; - public const STATUS_CODE_ACCEPTED = 202; - public const STATUS_CODE_NON_AUTHORITATIVE_INFORMATION = 203; - public const STATUS_CODE_NOCONTENT = 204; - public const STATUS_CODE_RESETCONTENT = 205; - public const STATUS_CODE_PARTIALCONTENT = 206; + public const STATUS_CODE_MULTI_STATUS = 207; + public const STATUS_CODE_ALREADY_REPORTED = 208; + public const STATUS_CODE_IM_USED = 226; public const STATUS_CODE_MULTIPLE_CHOICES = 300; - public const STATUS_CODE_MOVED_PERMANENTLY = 301; - public const STATUS_CODE_FOUND = 302; - public const STATUS_CODE_SEE_OTHER = 303; - public const STATUS_CODE_NOT_MODIFIED = 304; - public const STATUS_CODE_USE_PROXY = 305; - public const STATUS_CODE_UNUSED = 306; - public const STATUS_CODE_TEMPORARY_REDIRECT = 307; + public const STATUS_CODE_PERMANENT_REDIRECT = 308; public const STATUS_CODE_BAD_REQUEST = 400; - public const STATUS_CODE_UNAUTHORIZED = 401; - public const STATUS_CODE_PAYMENT_REQUIRED = 402; - public const STATUS_CODE_FORBIDDEN = 403; - public const STATUS_CODE_NOT_FOUND = 404; - public const STATUS_CODE_METHOD_NOT_ALLOWED = 405; - public const STATUS_CODE_NOT_ACCEPTABLE = 406; - public const STATUS_CODE_PROXY_AUTHENTICATION_REQUIRED = 407; - public const STATUS_CODE_REQUEST_TIMEOUT = 408; - public const STATUS_CODE_CONFLICT = 409; - public const STATUS_CODE_GONE = 410; - public const STATUS_CODE_LENGTH_REQUIRED = 411; - public const STATUS_CODE_PRECONDITION_FAILED = 412; - public const STATUS_CODE_REQUEST_ENTITY_TOO_LARGE = 413; - public const STATUS_CODE_REQUEST_URI_TOO_LONG = 414; - public const STATUS_CODE_UNSUPPORTED_MEDIA_TYPE = 415; - public const STATUS_CODE_REQUESTED_RANGE_NOT_SATISFIABLE = 416; - public const STATUS_CODE_EXPECTATION_FAILED = 417; - + public const STATUS_CODE_IM_A_TEAPOT = 418; + public const STATUS_CODE_MISDIRECTED_REQUEST = 421; + public const STATUS_CODE_UNPROCESSABLE_ENTITY = 422; + public const STATUS_CODE_LOCKED = 423; + public const STATUS_CODE_FAILED_DEPENDENCY = 424; public const STATUS_CODE_TOO_EARLY = 425; - + public const STATUS_CODE_UPGRADE_REQUIRED = 426; + public const STATUS_CODE_PRECONDITION_REQUIRED = 428; public const STATUS_CODE_TOO_MANY_REQUESTS = 429; + public const STATUS_CODE_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; + public const STATUS_CODE_UNAVAILABLE_FOR_LEGAL_REASONS = 451; public const STATUS_CODE_INTERNAL_SERVER_ERROR = 500; - public const STATUS_CODE_NOT_IMPLEMENTED = 501; - public const STATUS_CODE_BAD_GATEWAY = 502; - public const STATUS_CODE_SERVICE_UNAVAILABLE = 503; - public const STATUS_CODE_GATEWAY_TIMEOUT = 504; - public const STATUS_CODE_HTTP_VERSION_NOT_SUPPORTED = 505; + public const STATUS_CODE_VARIANT_ALSO_NEGOTIATES = 506; + public const STATUS_CODE_INSUFFICIENT_STORAGE = 507; + public const STATUS_CODE_LOOP_DETECTED = 508; + public const STATUS_CODE_NOT_EXTENDED = 510; + public const STATUS_CODE_NETWORK_AUTHENTICATION_REQUIRED = 511; /** * @var array @@ -133,6 +115,8 @@ abstract class Response protected $statusCodes = [ self::STATUS_CODE_CONTINUE => 'Continue', self::STATUS_CODE_SWITCHING_PROTOCOLS => 'Switching Protocols', + self::STATUS_CODE_PROCESSING => 'Processing', + self::STATUS_CODE_EARLY_HINTS => 'Early Hints', self::STATUS_CODE_OK => 'OK', self::STATUS_CODE_CREATED => 'Created', self::STATUS_CODE_ACCEPTED => 'Accepted', @@ -140,6 +124,9 @@ abstract class Response self::STATUS_CODE_NOCONTENT => 'No Content', self::STATUS_CODE_RESETCONTENT => 'Reset Content', self::STATUS_CODE_PARTIALCONTENT => 'Partial Content', + self::STATUS_CODE_MULTI_STATUS => 'Multi-Status', + self::STATUS_CODE_ALREADY_REPORTED => 'Already Reported', + self::STATUS_CODE_IM_USED => 'IM Used', self::STATUS_CODE_MULTIPLE_CHOICES => 'Multiple Choices', self::STATUS_CODE_MOVED_PERMANENTLY => 'Moved Permanently', self::STATUS_CODE_FOUND => 'Found', @@ -148,6 +135,7 @@ abstract class Response self::STATUS_CODE_USE_PROXY => 'Use Proxy', self::STATUS_CODE_UNUSED => '(Unused)', self::STATUS_CODE_TEMPORARY_REDIRECT => 'Temporary Redirect', + self::STATUS_CODE_PERMANENT_REDIRECT => 'Permanent Redirect', self::STATUS_CODE_BAD_REQUEST => 'Bad Request', self::STATUS_CODE_UNAUTHORIZED => 'Unauthorized', self::STATUS_CODE_PAYMENT_REQUIRED => 'Payment Required', @@ -166,14 +154,28 @@ abstract class Response self::STATUS_CODE_UNSUPPORTED_MEDIA_TYPE => 'Unsupported Media Type', self::STATUS_CODE_REQUESTED_RANGE_NOT_SATISFIABLE => 'Requested Range Not Satisfiable', self::STATUS_CODE_EXPECTATION_FAILED => 'Expectation Failed', + self::STATUS_CODE_IM_A_TEAPOT => 'I\'m a teapot', + self::STATUS_CODE_MISDIRECTED_REQUEST => 'Misdirected Request', + self::STATUS_CODE_UNPROCESSABLE_ENTITY => 'Unprocessable Entity', + self::STATUS_CODE_LOCKED => 'Locked', + self::STATUS_CODE_FAILED_DEPENDENCY => 'Failed Dependency', self::STATUS_CODE_TOO_EARLY => 'Too Early', + self::STATUS_CODE_UPGRADE_REQUIRED => 'Upgrade Required', + self::STATUS_CODE_PRECONDITION_REQUIRED => 'Precondition Required', self::STATUS_CODE_TOO_MANY_REQUESTS => 'Too Many Requests', + self::STATUS_CODE_REQUEST_HEADER_FIELDS_TOO_LARGE => 'Request Header Fields Too Large', + self::STATUS_CODE_UNAVAILABLE_FOR_LEGAL_REASONS => 'Unavailable For Legal Reasons', self::STATUS_CODE_INTERNAL_SERVER_ERROR => 'Internal Server Error', self::STATUS_CODE_NOT_IMPLEMENTED => 'Not Implemented', self::STATUS_CODE_BAD_GATEWAY => 'Bad Gateway', self::STATUS_CODE_SERVICE_UNAVAILABLE => 'Service Unavailable', self::STATUS_CODE_GATEWAY_TIMEOUT => 'Gateway Timeout', self::STATUS_CODE_HTTP_VERSION_NOT_SUPPORTED => 'HTTP Version Not Supported', + self::STATUS_CODE_VARIANT_ALSO_NEGOTIATES => 'Variant Also Negotiates', + self::STATUS_CODE_INSUFFICIENT_STORAGE => 'Insufficient Storage', + self::STATUS_CODE_LOOP_DETECTED => 'Loop Detected', + self::STATUS_CODE_NOT_EXTENDED => 'Not Extended', + self::STATUS_CODE_NETWORK_AUTHENTICATION_REQUIRED => 'Network Authentication Required', ]; /**