use the streams php-jcs library until the floats issue will be fixed upstream. see here for reference https://codeberg.org/streams/streams/issues/151

This commit is contained in:
Mario
2024-03-14 10:18:51 +00:00
parent 55097c47c5
commit 81ce67df94
16 changed files with 144 additions and 415 deletions

View File

@@ -54,7 +54,7 @@
"spomky-labs/otphp": "^11.1",
"patrickschur/language-detection": "^5.3",
"stephenhill/base58": "^1.1",
"mmccook/php-json-canonicalization-scheme": "^1.0",
"streams/php-jcs": "^1.0.1",
"scssphp/scssphp": "^1.12"
},
"require-dev": {
@@ -85,7 +85,7 @@
"repositories": [
{
"type": "vcs",
"url": "https://github.com/simplepie/simplepie"
"url": "https://codeberg.org/streams/php-jcs"
}
]
}

116
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "a1e6e50cc266ffa9e8cd2a4a64c1dbb6",
"content-hash": "6f742c93e921d4e93b52c1fbfa177931",
"packages": [
{
"name": "blueimp/jquery-file-upload",
@@ -741,64 +741,6 @@
},
"time": "2022-09-26T12:21:08+00:00"
},
{
"name": "mmccook/php-json-canonicalization-scheme",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/mmccook/php-json-canonicalization-scheme.git",
"reference": "cd6d3e7645a2c1e62574a9a2437d68e9e74e799f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mmccook/php-json-canonicalization-scheme/zipball/cd6d3e7645a2c1e62574a9a2437d68e9e74e799f",
"reference": "cd6d3e7645a2c1e62574a9a2437d68e9e74e799f",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.13",
"pestphp/pest": "^1.20",
"phpstan/phpstan": "^1.10",
"spatie/ray": "^1.28"
},
"type": "library",
"autoload": {
"psr-4": {
"Mmccook\\JsonCanonicalizator\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mark M. McCook",
"email": "mark.mccook@gmail.com",
"role": "Developer"
}
],
"description": "This is my package php-json-canonicalization-scheme",
"homepage": "https://github.com/mmccook/php-json-canonicalization-scheme",
"keywords": [
"mmccook",
"php-json-canonicalization-scheme"
],
"support": {
"issues": "https://github.com/mmccook/php-json-canonicalization-scheme/issues",
"source": "https://github.com/mmccook/php-json-canonicalization-scheme/tree/1.0.0"
},
"funding": [
{
"url": "https://github.com/mmccook",
"type": "github"
}
],
"time": "2023-08-07T18:12:27+00:00"
},
{
"name": "paragonie/constant_time_encoding",
"version": "v2.6.3",
@@ -2092,6 +2034,62 @@
},
"time": "2019-08-22T16:51:59+00:00"
},
{
"name": "streams/php-jcs",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://codeberg.org/streams/php-jcs",
"reference": "a0953ad4f4d3586d5e008b8498cc79154fca8332"
},
"require": {
"php": "^8.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.13",
"pestphp/pest": "^1.20",
"phpstan/phpstan": "^1.10",
"spatie/ray": "^1.28"
},
"type": "library",
"autoload": {
"psr-4": {
"Mmccook\\JsonCanonicalizator\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Mmccook\\JsonCanonicalizator\\Tests\\": "tests"
}
},
"scripts": {
"test": [
"vendor/bin/pest"
],
"test-coverage": [
"vendor/bin/pest --coverage"
],
"format": [
"vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php --allow-risky=yes"
]
},
"license": [
"MIT"
],
"authors": [
{
"name": "Mark M. McCook",
"email": "mark.mccook@gmail.com",
"role": "Developer"
}
],
"description": "This is my package php-json-canonicalization-scheme",
"homepage": "https://codeberg.org/streams/php-jcs",
"keywords": [
"php-json-canonicalization-scheme"
],
"time": "2024-03-12T10:28:59+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.29.0",

View File

@@ -319,10 +319,10 @@ return array(
'Michelf\\Markdown' => $vendorDir . '/michelf/php-markdown/Michelf/Markdown.php',
'Michelf\\MarkdownExtra' => $vendorDir . '/michelf/php-markdown/Michelf/MarkdownExtra.php',
'Michelf\\MarkdownInterface' => $vendorDir . '/michelf/php-markdown/Michelf/MarkdownInterface.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizator' => $vendorDir . '/mmccook/php-json-canonicalization-scheme/src/JsonCanonicalizator.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizatorFactory' => $vendorDir . '/mmccook/php-json-canonicalization-scheme/src/JsonCanonicalizatorFactory.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizatorInterface' => $vendorDir . '/mmccook/php-json-canonicalization-scheme/src/JsonCanonicalizatorInterface.php',
'Mmccook\\JsonCanonicalizator\\Utils' => $vendorDir . '/mmccook/php-json-canonicalization-scheme/src/Utils.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizator' => $vendorDir . '/streams/php-jcs/src/JsonCanonicalizator.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizatorFactory' => $vendorDir . '/streams/php-jcs/src/JsonCanonicalizatorFactory.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizatorInterface' => $vendorDir . '/streams/php-jcs/src/JsonCanonicalizatorInterface.php',
'Mmccook\\JsonCanonicalizator\\Utils' => $vendorDir . '/streams/php-jcs/src/Utils.php',
'OAuth2\\Autoloader' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php',
'OAuth2\\ClientAssertionType\\ClientAssertionTypeInterface' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php',
'OAuth2\\ClientAssertionType\\HttpBasic' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php',
@@ -1308,6 +1308,7 @@ return array(
'Zotlabs\\Lib\\SvgSanitizer' => $baseDir . '/Zotlabs/Lib/SvgSanitizer.php',
'Zotlabs\\Lib\\System' => $baseDir . '/Zotlabs/Lib/System.php',
'Zotlabs\\Lib\\Techlevels' => $baseDir . '/Zotlabs/Lib/Techlevels.php',
'Zotlabs\\Lib\\Text' => $baseDir . '/Zotlabs/Lib/Text.php',
'Zotlabs\\Lib\\ThreadItem' => $baseDir . '/Zotlabs/Lib/ThreadItem.php',
'Zotlabs\\Lib\\ThreadListener' => $baseDir . '/Zotlabs/Lib/ThreadListener.php',
'Zotlabs\\Lib\\ThreadStream' => $baseDir . '/Zotlabs/Lib/ThreadStream.php',
@@ -1381,6 +1382,7 @@ return array(
'Zotlabs\\Module\\Email_validation' => $baseDir . '/Zotlabs/Module/Email_validation.php',
'Zotlabs\\Module\\Embed' => $baseDir . '/Zotlabs/Module/Embed.php',
'Zotlabs\\Module\\Embedphotos' => $baseDir . '/Zotlabs/Module/Embedphotos.php',
'Zotlabs\\Module\\Emoji' => $baseDir . '/Zotlabs/Module/Emoji.php',
'Zotlabs\\Module\\Event' => $baseDir . '/Zotlabs/Module/Event.php',
'Zotlabs\\Module\\Fbrowser' => $baseDir . '/Zotlabs/Module/Fbrowser.php',
'Zotlabs\\Module\\Feed' => $baseDir . '/Zotlabs/Module/Feed.php',

View File

@@ -27,7 +27,7 @@ return array(
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),
'OTPHP\\' => array($vendorDir . '/spomky-labs/otphp/src'),
'Mmccook\\JsonCanonicalizator\\' => array($vendorDir . '/mmccook/php-json-canonicalization-scheme/src'),
'Mmccook\\JsonCanonicalizator\\' => array($vendorDir . '/streams/php-jcs/src'),
'Michelf\\' => array($vendorDir . '/michelf/php-markdown/Michelf'),
'League\\HTMLToMarkdown\\' => array($vendorDir . '/league/html-to-markdown/src'),
'LanguageDetection\\' => array($vendorDir . '/patrickschur/language-detection/src/LanguageDetection'),

View File

@@ -182,7 +182,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
),
'Mmccook\\JsonCanonicalizator\\' =>
array (
0 => __DIR__ . '/..' . '/mmccook/php-json-canonicalization-scheme/src',
0 => __DIR__ . '/..' . '/streams/php-jcs/src',
),
'Michelf\\' =>
array (
@@ -566,10 +566,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Michelf\\Markdown' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/Markdown.php',
'Michelf\\MarkdownExtra' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/MarkdownExtra.php',
'Michelf\\MarkdownInterface' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/MarkdownInterface.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizator' => __DIR__ . '/..' . '/mmccook/php-json-canonicalization-scheme/src/JsonCanonicalizator.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizatorFactory' => __DIR__ . '/..' . '/mmccook/php-json-canonicalization-scheme/src/JsonCanonicalizatorFactory.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizatorInterface' => __DIR__ . '/..' . '/mmccook/php-json-canonicalization-scheme/src/JsonCanonicalizatorInterface.php',
'Mmccook\\JsonCanonicalizator\\Utils' => __DIR__ . '/..' . '/mmccook/php-json-canonicalization-scheme/src/Utils.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizator' => __DIR__ . '/..' . '/streams/php-jcs/src/JsonCanonicalizator.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizatorFactory' => __DIR__ . '/..' . '/streams/php-jcs/src/JsonCanonicalizatorFactory.php',
'Mmccook\\JsonCanonicalizator\\JsonCanonicalizatorInterface' => __DIR__ . '/..' . '/streams/php-jcs/src/JsonCanonicalizatorInterface.php',
'Mmccook\\JsonCanonicalizator\\Utils' => __DIR__ . '/..' . '/streams/php-jcs/src/Utils.php',
'OAuth2\\Autoloader' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php',
'OAuth2\\ClientAssertionType\\ClientAssertionTypeInterface' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php',
'OAuth2\\ClientAssertionType\\HttpBasic' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php',
@@ -1555,6 +1555,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Lib\\SvgSanitizer' => __DIR__ . '/../..' . '/Zotlabs/Lib/SvgSanitizer.php',
'Zotlabs\\Lib\\System' => __DIR__ . '/../..' . '/Zotlabs/Lib/System.php',
'Zotlabs\\Lib\\Techlevels' => __DIR__ . '/../..' . '/Zotlabs/Lib/Techlevels.php',
'Zotlabs\\Lib\\Text' => __DIR__ . '/../..' . '/Zotlabs/Lib/Text.php',
'Zotlabs\\Lib\\ThreadItem' => __DIR__ . '/../..' . '/Zotlabs/Lib/ThreadItem.php',
'Zotlabs\\Lib\\ThreadListener' => __DIR__ . '/../..' . '/Zotlabs/Lib/ThreadListener.php',
'Zotlabs\\Lib\\ThreadStream' => __DIR__ . '/../..' . '/Zotlabs/Lib/ThreadStream.php',
@@ -1628,6 +1629,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Module\\Email_validation' => __DIR__ . '/../..' . '/Zotlabs/Module/Email_validation.php',
'Zotlabs\\Module\\Embed' => __DIR__ . '/../..' . '/Zotlabs/Module/Embed.php',
'Zotlabs\\Module\\Embedphotos' => __DIR__ . '/../..' . '/Zotlabs/Module/Embedphotos.php',
'Zotlabs\\Module\\Emoji' => __DIR__ . '/../..' . '/Zotlabs/Module/Emoji.php',
'Zotlabs\\Module\\Event' => __DIR__ . '/../..' . '/Zotlabs/Module/Event.php',
'Zotlabs\\Module\\Fbrowser' => __DIR__ . '/../..' . '/Zotlabs/Module/Fbrowser.php',
'Zotlabs\\Module\\Feed' => __DIR__ . '/../..' . '/Zotlabs/Module/Feed.php',

View File

@@ -763,67 +763,6 @@
},
"install-path": "../michelf/php-markdown"
},
{
"name": "mmccook/php-json-canonicalization-scheme",
"version": "1.0.0",
"version_normalized": "1.0.0.0",
"source": {
"type": "git",
"url": "https://github.com/mmccook/php-json-canonicalization-scheme.git",
"reference": "cd6d3e7645a2c1e62574a9a2437d68e9e74e799f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mmccook/php-json-canonicalization-scheme/zipball/cd6d3e7645a2c1e62574a9a2437d68e9e74e799f",
"reference": "cd6d3e7645a2c1e62574a9a2437d68e9e74e799f",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.13",
"pestphp/pest": "^1.20",
"phpstan/phpstan": "^1.10",
"spatie/ray": "^1.28"
},
"time": "2023-08-07T18:12:27+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Mmccook\\JsonCanonicalizator\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mark M. McCook",
"email": "mark.mccook@gmail.com",
"role": "Developer"
}
],
"description": "This is my package php-json-canonicalization-scheme",
"homepage": "https://github.com/mmccook/php-json-canonicalization-scheme",
"keywords": [
"mmccook",
"php-json-canonicalization-scheme"
],
"support": {
"issues": "https://github.com/mmccook/php-json-canonicalization-scheme/issues",
"source": "https://github.com/mmccook/php-json-canonicalization-scheme/tree/1.0.0"
},
"funding": [
{
"url": "https://github.com/mmccook",
"type": "github"
}
],
"install-path": "../mmccook/php-json-canonicalization-scheme"
},
{
"name": "paragonie/constant_time_encoding",
"version": "v2.6.3",
@@ -2171,6 +2110,65 @@
},
"install-path": "../stephenhill/base58"
},
{
"name": "streams/php-jcs",
"version": "1.0.1",
"version_normalized": "1.0.1.0",
"source": {
"type": "git",
"url": "https://codeberg.org/streams/php-jcs",
"reference": "a0953ad4f4d3586d5e008b8498cc79154fca8332"
},
"require": {
"php": "^8.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.13",
"pestphp/pest": "^1.20",
"phpstan/phpstan": "^1.10",
"spatie/ray": "^1.28"
},
"time": "2024-03-12T10:28:59+00:00",
"type": "library",
"installation-source": "source",
"autoload": {
"psr-4": {
"Mmccook\\JsonCanonicalizator\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Mmccook\\JsonCanonicalizator\\Tests\\": "tests"
}
},
"scripts": {
"test": [
"vendor/bin/pest"
],
"test-coverage": [
"vendor/bin/pest --coverage"
],
"format": [
"vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php --allow-risky=yes"
]
},
"license": [
"MIT"
],
"authors": [
{
"name": "Mark M. McCook",
"email": "mark.mccook@gmail.com",
"role": "Developer"
}
],
"description": "This is my package php-json-canonicalization-scheme",
"homepage": "https://codeberg.org/streams/php-jcs",
"keywords": [
"php-json-canonicalization-scheme"
],
"install-path": "../streams/php-jcs"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.29.0",

View File

@@ -3,7 +3,7 @@
'name' => 'zotlabs/hubzilla',
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'reference' => '27e57ff7aad9b70a4d088b880fac4af2920fdd31',
'reference' => '55097c47c5534d4453f7494f8a1542f7beb4d588',
'type' => 'application',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -118,15 +118,6 @@
'aliases' => array(),
'dev_requirement' => false,
),
'mmccook/php-json-canonicalization-scheme' => array(
'pretty_version' => '1.0.0',
'version' => '1.0.0.0',
'reference' => 'cd6d3e7645a2c1e62574a9a2437d68e9e74e799f',
'type' => 'library',
'install_path' => __DIR__ . '/../mmccook/php-json-canonicalization-scheme',
'aliases' => array(),
'dev_requirement' => false,
),
'paragonie/constant_time_encoding' => array(
'pretty_version' => 'v2.6.3',
'version' => '2.6.3.0',
@@ -295,6 +286,15 @@
'aliases' => array(),
'dev_requirement' => false,
),
'streams/php-jcs' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'reference' => 'a0953ad4f4d3586d5e008b8498cc79154fca8332',
'type' => 'library',
'install_path' => __DIR__ . '/../streams/php-jcs',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-php81' => array(
'pretty_version' => 'v1.29.0',
'version' => '1.29.0.0',
@@ -340,7 +340,7 @@
'zotlabs/hubzilla' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'reference' => '27e57ff7aad9b70a4d088b880fac4af2920fdd31',
'reference' => '55097c47c5534d4453f7494f8a1542f7beb4d588',
'type' => 'application',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),

View File

@@ -1,4 +0,0 @@
# Changelog
All notable changes to `php-json-canonicalization-scheme` will be documented in this file.

View File

@@ -1,21 +0,0 @@
The MIT License (MIT)
Copyright (c) mmccook <mark.mccook@gmail.com>
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.

View File

@@ -1,43 +0,0 @@
# JSON Canonicalization for PHP 8.1+
[![Latest Version on Packagist](https://img.shields.io/packagist/v/mmccook/php-json-canonicalization-scheme.svg?style=flat-square)](https://packagist.org/packages/mmccook/php-json-canonicalization-scheme)
[![Tests](https://img.shields.io/github/actions/workflow/status/mmccook/php-json-canonicalization-scheme/run-tests.yml?branch=main&label=tests&style=flat-square)](https://github.com/mmccook/php-json-canonicalization-scheme/actions/workflows/run-tests.yml)
[![Total Downloads](https://img.shields.io/packagist/dt/mmccook/php-json-canonicalization-scheme.svg?style=flat-square)](https://packagist.org/packages/mmccook/php-json-canonicalization-scheme)
Needed a way to canonicalize JSON to validate webhooks from [The Campaign Registry](https://csp-api.campaignregistry.com/v2/restAPI)
couldn't find an actively maintained package that all passed the JCS tests, so I used the one listed on the JCS Github and updated/refactored it.
## Installation
You can install the package via composer:
```bash
composer require mmccook/php-json-canonicalization-scheme
```
## Usage
```php
$canonicalization = JsonCanonicalizatorFactory::getInstance();
$canonicalizedJsonString = $canonicalization->canonicalize($input);
```
## Testing
```bash
composer test
```
## Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
## Contributing
Please see [CONTRIBUTING](https://github.com/spatie/.github/blob/main/CONTRIBUTING.md) for details.
## Credits
- [Mark M. McCook](https://github.com/mmccook)
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

View File

@@ -1,50 +0,0 @@
{
"name": "mmccook/php-json-canonicalization-scheme",
"description": "This is my package php-json-canonicalization-scheme",
"keywords": [
"mmccook",
"php-json-canonicalization-scheme"
],
"homepage": "https://github.com/mmccook/php-json-canonicalization-scheme",
"license": "MIT",
"authors": [
{
"name": "Mark M. McCook",
"email": "mark.mccook@gmail.com",
"role": "Developer"
}
],
"require": {
"php": "^8.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.13",
"pestphp/pest": "^1.20",
"phpstan/phpstan": "^1.10",
"spatie/ray": "^1.28"
},
"autoload": {
"psr-4": {
"Mmccook\\JsonCanonicalizator\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Mmccook\\JsonCanonicalizator\\Tests\\": "tests"
}
},
"scripts": {
"test": "vendor/bin/pest",
"test-coverage": "vendor/bin/pest --coverage",
"format": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php --allow-risky=yes"
},
"config": {
"sort-packages": true,
"allow-plugins": {
"pestphp/pest-plugin": true,
"phpstan/extension-installer": true
}
},
"minimum-stability": "stable",
"prefer-stable": true
}

View File

@@ -1,79 +0,0 @@
<?php
namespace Mmccook\JsonCanonicalizator;
class JsonCanonicalizator implements JsonCanonicalizatorInterface
{
public const JSON_FLAGS = \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES;
/**
* @param $data
* @param bool $asHex
* @return string
*/
public function canonicalize($data, bool $asHex = false): string
{
ob_start();
$this->serialize($data);
$result = ob_get_clean();
return $asHex ? Utils::asHex($result) : $result;
}
private function serialize($item)
{
if (is_float($item)) {
echo Utils::es6NumberFormat($item);
return;
}
if (null === $item || is_scalar($item)) {
echo json_encode($item, self::JSON_FLAGS);
return;
}
if (is_array($item) && ! Utils::isAssoc($item)) {
echo '[';
$next = false;
foreach ($item as $element) {
if ($next) {
echo ',';
}
$next = true;
$this->serialize($element);
}
echo ']';
return;
}
if (is_object($item)) {
$item = (array)$item;
}
uksort($item, function (string $a, string $b) {
$a = mb_convert_encoding($a, 'UTF-16BE');
$b = mb_convert_encoding($b, 'UTF-16BE');
return strcmp($a, $b);
});
echo '{';
$next = false;
foreach ($item as $key => $value) {
//var_dump($key, $value);
if ($next) {
echo ',';
}
$next = true;
$outKey = json_encode((string)$key, self::JSON_FLAGS);
echo $outKey, ':', $this->serialize($value);
}
echo '}';
}
}

View File

@@ -1,13 +0,0 @@
<?php
declare(strict_types=1);
namespace Mmccook\JsonCanonicalizator;
class JsonCanonicalizatorFactory
{
public static function getInstance(): JsonCanonicalizator
{
return new JsonCanonicalizator();
}
}

View File

@@ -1,10 +0,0 @@
<?php
declare(strict_types=1);
namespace Mmccook\JsonCanonicalizator;
interface JsonCanonicalizatorInterface
{
public function canonicalize($data, bool $asHex): string;
}

View File

@@ -1,52 +0,0 @@
<?php
namespace Mmccook\JsonCanonicalizator;
class Utils
{
/**
* @param array $array
* @return bool
*/
public static function isAssoc(array $array): bool
{
$keys = array_keys($array);
return array_keys($keys) !== $keys;
}
public static function asHex(string $data): string
{
return rtrim(chunk_split(bin2hex($data), 2, ' '));
}
public static function es6NumberFormat(float $number): string
{
if (is_nan($number) || is_infinite($number)) {
throw new \RuntimeException("can't use Nan or Infinity in json");
}
if (0.0 === $number) {
return '0';
}
$sign = '';
if ($number < 0) {
$sign = '-';
$number = -$number;
}
if ($number < 1e+21 && $number >= 1e-6) {
$formatted = number_format($number, 7, '.', '');
$formatted = rtrim($formatted, '.0');
} else {
$formatted = sprintf('%e', $number);
$parts = explode('e', $formatted);
$parts[0] = rtrim($parts[0], '.0');
$formatted = implode('e', $parts);
}
return $sign . $formatted;
}
}

1
vendor/streams/php-jcs vendored Submodule

Submodule vendor/streams/php-jcs added at a0953ad4f4