diff --git a/.github/workflows/v2.yml b/.github/workflows/v2.yml new file mode 100644 index 000000000..7922f1f1b --- /dev/null +++ b/.github/workflows/v2.yml @@ -0,0 +1,120 @@ +name: Tests + +on: [push] + +jobs: +# php-unit-tests: +# name: PHP Unit Tests +# runs-on: ubuntu-latest +# strategy: +# matrix: +# php-version: [7.4] +# +# steps: +# - name: Checkout code +# uses: actions/checkout@v2 +# +# - name: Setup PHP +# uses: shivammathur/setup-php@v2 +# with: +# php-version: ${{ matrix.php-version }} +# extensions: json, mbstring, xml, zip +# coverage: pcov +# tools: composer:v2, phpunit:9.5 +# +# - name: Update project dependencies +# env: +# REPO_USR: ${{ secrets.REPO_USR }} +# REPO_PSW: ${{ secrets.REPO_PSW }} +# run: | +# composer config repositories.0 composer https://repo.magento.com +# composer config http-basic.repo.magento.com "$REPO_USR" "$REPO_PSW" +# composer install --prefer-dist --no-progress --no-suggest +# +# - name: Run unit tests +# run: vendor/bin/phpunit -c phpunit.xml.dist +# +# - name: Upload code coverage +# uses: codecov/codecov-action@v2 +# with: +# file: ./coverage.xml +# flags: unittests +# fail_ci_if_error: false +# +# javascript-tests: +# name: JavaScript Tests +# runs-on: ubuntu-latest +# +# steps: +# - name: Checkout code +# uses: actions/checkout@v2 +# +# - name: Setup Node.js +# uses: actions/setup-node@v2 +# with: +# node-version: 16 +# +# - name: Install dependencies +# run: npm install +# +# - name: Run JavaScript tests +# run: npm test +# +# - name: Upload code coverage +# uses: codecov/codecov-action@v2 +# with: +# file: ./coverage/lcov.info +# flags: javascripttests +# fail_ci_if_error: false + + php-integration-tests: + name: PHP Integration Tests + runs-on: ubuntu-latest +# needs: php-unit-tests + if: ${{ github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'integration-tests') }} + + services: + mysql: + image: mysql:5.7 + env: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: magento_test + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + steps: + - name: Checkout Magento + uses: actions/checkout@v2 + with: + repository: magento/magento2 + path: magento + + - name: Checkout module + uses: actions/checkout@v2 + with: + path: magento/app/code/Nosto/Tagging + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.4 + extensions: json, mbstring, xml, intl, gd, zip, soap, pdo_mysql + coverage: pcov + tools: composer:v2, phpunit:9.5 + + - name: Install Magento + working-directory: magento + env: + REPO_USR: ${{ secrets.REPO_USR }} + REPO_PSW: ${{ secrets.REPO_PSW }} + run: | + composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.7 . + composer install --prefer-dist --no-progress + bin/magento setup:install --base-url=http://localhost/ --db-host=127.0.0.1 --db-name=magento_test --db-user=root --db-password=root --admin-firstname=Admin --admin-lastname=User --admin-email=admin@example.com --admin-user=admin --admin-password=admin123 --language=en_US --currency=USD --timezone=America/New_York --use-rewrites=1 --backend-frontname=admin +# composer config repositories.0 composer https://repo.magento.com +# composer config http-basic.repo.magento.com "$REPO_USR" "$REPO_PSW" + + - name: Run integration tests + working-directory: magento/app/code/Nosto/Tagging + run: vendor/bin/phpunit -c phpunit.integration.xml.dist diff --git a/Test/Integration/Block/CategoryTest.php b/Test/Integration/Block/CategoryTest.php new file mode 100644 index 000000000..d7306b2a7 --- /dev/null +++ b/Test/Integration/Block/CategoryTest.php @@ -0,0 +1,59 @@ +objectManager = Bootstrap::getObjectManager(); + $this->registry = $this->objectManager->get(Registry::class); + $this->categoryRepository = $this->objectManager->get(CategoryRepositoryInterface::class); + $this->block = $this->objectManager->get(Category::class); + } + + /** + * @magentoDataFixture Magento/Catalog/_files/category.php + */ + public function testGetAbstractObject() + { + $category = $this->categoryRepository->get(333); + $this->registry->register('current_category', $category); + + $nostoCategory = $this->block->getAbstractObject(); + $this->assertInstanceOf(NostoCategory::class, $nostoCategory); + + // Test that we properly build the category path string + $categoryString = $nostoCategory->disableAutoEncodeAll()->__toString(); + $this->assertStringContainsString($category->getName(), $categoryString); + } + + public function testGetAbstractObjectWithoutCategory() + { + $nostoCategory = $this->block->getAbstractObject(); + $this->assertNull($nostoCategory); + } +} diff --git a/Test/Integration/Block/ProductTest.php b/Test/Integration/Block/ProductTest.php new file mode 100644 index 000000000..f53219db0 --- /dev/null +++ b/Test/Integration/Block/ProductTest.php @@ -0,0 +1,69 @@ +objectManager = Bootstrap::getObjectManager(); + $this->registry = $this->objectManager->get(Registry::class); + $this->productRepository = $this->objectManager->get(ProductRepositoryInterface::class); + $this->block = $this->objectManager->get(Product::class); + } + + /** + * @magentoDataFixture Magento/Catalog/_files/product_simple.php + */ + public function testGetAbstractObject() + { + $product = $this->productRepository->get('simple'); + $this->registry->register('product', $product); + $this->registry->register('current_product', $product); + + $nostoProduct = $this->block->getAbstractObject(); + $this->assertInstanceOf(NostoProduct::class, $nostoProduct); + $this->assertEquals($product->getId(), $nostoProduct->getProductId()); + } + + /** + * @magentoConfigFixture current_store nosto_tagging/currency/use_multiple_currencies 1 + */ + public function testHasMultipleCurrencies() + { + $result = $this->block->hasMultipleCurrencies(); + $this->assertTrue($result); + } + + /** + * @magentoConfigFixture current_store nosto_tagging/currency/use_multiple_currencies 0 + */ + public function testDoesNotHaveMultipleCurrencies() + { + $result = $this->block->hasMultipleCurrencies(); + $this->assertFalse($result); + } +} diff --git a/Test/Integration/bootstrap.php b/Test/Integration/bootstrap.php new file mode 100644 index 000000000..334576ab1 --- /dev/null +++ b/Test/Integration/bootstrap.php @@ -0,0 +1,29 @@ +createObjectManager(); +$objectManager->configure([ + 'preferences' => [], +]); diff --git a/Test/Javascript/recobuy.test.js b/Test/Javascript/recobuy.test.js new file mode 100644 index 000000000..7e0ac91d8 --- /dev/null +++ b/Test/Javascript/recobuy.test.js @@ -0,0 +1,125 @@ +import recobuy from 'Nosto_Tagging/js/recobuy'; + +describe('Recobuy Module', () => { + let Recobuy; + + beforeEach(() => { + // Reset mocks + jest.clearAllMocks(); + + // Initialize the module + Recobuy = recobuy(); + }); + + describe('addProductToCart', () => { + test('should call addSkuToCart with correct parameters', () => { + // Mock addSkuToCart method + Recobuy.addSkuToCart = jest.fn().mockResolvedValue(); + + const productId = '123'; + const element = document.createElement('div'); + const quantity = 2; + + // Call the method + Recobuy.addProductToCart(productId, element, quantity); + + // Verify the call + expect(Recobuy.addSkuToCart).toHaveBeenCalledWith( + { + productId: '123', + skuId: '123', + quantity: 2 + }, + element + ); + }); + + test('should use default quantity of 1 if not provided', () => { + // Mock addSkuToCart method + Recobuy.addSkuToCart = jest.fn().mockResolvedValue(); + + const productId = '123'; + const element = document.createElement('div'); + + // Call the method without quantity + Recobuy.addProductToCart(productId, element); + + // Verify the call + expect(Recobuy.addSkuToCart).toHaveBeenCalledWith( + { + productId: '123', + skuId: '123', + quantity: 1 + }, + element + ); + }); + }); + + describe('addMultipleProductsToCart', () => { + test('should handle an array of products', async () => { + // Mock addSkuToCart method + Recobuy.addSkuToCart = jest.fn().mockResolvedValue(); + + const products = [ + { productId: '123', skuId: '123-variant' }, + { productId: '456', skuId: '456-variant' } + ]; + const element = document.createElement('div'); + + // Call the method + await Recobuy.addMultipleProductsToCart(products, element); + + // Verify the calls + expect(Recobuy.addSkuToCart).toHaveBeenCalledTimes(2); + expect(Recobuy.addSkuToCart).toHaveBeenNthCalledWith(1, products[0], element); + expect(Recobuy.addSkuToCart).toHaveBeenNthCalledWith(2, products[1], element); + }); + + test('should reject if products is not an array', async () => { + const nonArrayProduct = { productId: '123' }; + const element = document.createElement('div'); + + // We need to spy on Promise.reject + const rejectSpy = jest.spyOn(Promise, 'reject'); + + // Call the method + Recobuy.addMultipleProductsToCart(nonArrayProduct, element); + + // Verify Promise.reject was called + expect(rejectSpy).toHaveBeenCalledWith(expect.any(Error)); + expect(rejectSpy.mock.calls[0][0].message).toBe('Products is not type array'); + + rejectSpy.mockRestore(); + }); + }); + + describe('resolveContextSlotId', () => { + test('should find and return nosto element id', () => { + // Create element hierarchy + const nostoElement = document.createElement('div'); + nostoElement.setAttribute('class', 'nosto_element'); + nostoElement.setAttribute('id', 'nosto-test-id'); + + const childElement = document.createElement('button'); + nostoElement.appendChild(childElement); + + // Call the method + const result = Recobuy.resolveContextSlotId(childElement); + + // Verify the result + expect(result).toBe('nosto-test-id'); + }); + + test('should return false if no nosto element is found', () => { + // Create element without nosto parent + const element = document.createElement('button'); + + // Call the method + const result = Recobuy.resolveContextSlotId(element); + + // Verify the result + expect(result).toBe(false); + }); + }); +}); diff --git a/Test/Javascript/setup.js b/Test/Javascript/setup.js new file mode 100644 index 000000000..6c0a6d0a1 --- /dev/null +++ b/Test/Javascript/setup.js @@ -0,0 +1,57 @@ +// Mock global objects +window.nostojs = jest.fn(callback => callback(window.nostoAPI)); + +window.nostoAPI = { + loadRecommendations: jest.fn(), + reportAddToCart: jest.fn(), + setAutoLoad: jest.fn(), + resendCartTagging: jest.fn(), + resendCustomerTagging: jest.fn(), + recommendedProductAddedToCart: jest.fn(), + internal: { + setTaggingProvider: jest.fn() + } +}; + +// Mock jQuery +window.$ = window.jQuery = jest.fn(() => { + return { + on: jest.fn(), + ajax: jest.fn() + }; +}); + +// Mock document elements +document.querySelector = jest.fn().mockImplementation((selector) => { + if (selector === "#nosto_addtocart_form") { + return { + getAttribute: jest.fn().mockReturnValue('/checkout/cart/add') + }; + } + if (selector === "#nosto_addtocart_form > input[name='form_key']") { + return { + getAttribute: jest.fn().mockReturnValue('form_key_value') + }; + } + if (selector === "#nosto_cart_tagging" || selector === "#nosto_customer_tagging") { + return { + classList: { + remove: jest.fn(), + add: jest.fn() + } + }; + } + if (selector === 'input[name=form_key]') { + return { + value: 'form_key_value' + }; + } + return null; +}); + +// Mock fetch +global.fetch = jest.fn().mockImplementation(() => { + return Promise.resolve({ + json: () => Promise.resolve({}) + }); +}); diff --git a/Test/Unit/Block/ElementTest.php b/Test/Unit/Block/ElementTest.php new file mode 100644 index 000000000..29adeea13 --- /dev/null +++ b/Test/Unit/Block/ElementTest.php @@ -0,0 +1,79 @@ +contextMock = $this->createMock(Context::class); + $this->accountHelperMock = $this->createMock(NostoHelperAccount::class); + $this->scopeHelperMock = $this->createMock(NostoHelperScope::class); + + $this->block = new Element( + $this->contextMock, + $this->accountHelperMock, + $this->scopeHelperMock + ); + } + + /** + * @covers Element::getElementId() + * @return void + */ + public function testGetElementId() + { + $testId = 'test-element-id'; + $this->block->setData('nostoId', $testId); + + $this->assertEquals($testId, $this->block->getElementId()); + } + + /** + * @covers Element::getAbstractObject() + * @return void + */ + public function testGetAbstractObject() + { + $this->assertNull($this->block->getAbstractObject()); + } + + /** + * @covers Element::getAbstractObject() + * @return void + */ + public function testToHtmlWithoutAccount() + { + $storeMock = $this->createMock(\Magento\Store\Model\Store::class); + + $this->scopeHelperMock->expects($this->once()) + ->method('getStore') + ->willReturn($storeMock); + + $this->accountHelperMock->expects($this->once()) + ->method('nostoInstalledAndEnabled') + ->with($storeMock) + ->willReturn(false); + + $result = $this->block->_toHtml(); + $this->assertEquals('', $result); + } +} diff --git a/Test/Unit/Block/EmbedTest.php b/Test/Unit/Block/EmbedTest.php new file mode 100644 index 000000000..87e275144 --- /dev/null +++ b/Test/Unit/Block/EmbedTest.php @@ -0,0 +1,101 @@ +contextMock = $this->createMock(Context::class); + $this->accountHelperMock = $this->createMock(NostoHelperAccount::class); + $this->scopeHelperMock = $this->createMock(NostoHelperScope::class); + $this->storeMock = $this->createMock(Store::class); + $this->nostoAccountMock = $this->createMock(NostoAccount::class); + + $this->block = new Embed( + $this->contextMock, + $this->accountHelperMock, + $this->scopeHelperMock + ); + } + /** + * @covers Embed::getAccountName() + * @return void + */ + public function testGetAccountName() + { + $accountName = 'test-account-name'; + + $this->scopeHelperMock->expects($this->once()) + ->method('getStore') + ->with(true) + ->willReturn($this->storeMock); + + $this->accountHelperMock->expects($this->once()) + ->method('findAccount') + ->with($this->storeMock) + ->willReturn($this->nostoAccountMock); + + $this->nostoAccountMock->expects($this->once()) + ->method('getName') + ->willReturn($accountName); + + $result = $this->block->getAccountName(); + $this->assertEquals($accountName, $result); + } + + /** + * @covers Embed::getAccountName() + * @return void + */ + public function testGetAccountNameWithNoAccount() + { + $this->scopeHelperMock->expects($this->once()) + ->method('getStore') + ->with(true) + ->willReturn($this->storeMock); + + $this->accountHelperMock->expects($this->once()) + ->method('findAccount') + ->with($this->storeMock) + ->willReturn(null); + + $result = $this->block->getAccountName(); + $this->assertEquals('', $result); + } + + /** + * @covers Embed::getAbstractObject() + * @return void + */ + public function testGetAbstractObject() + { + $this->assertNull($this->block->getAbstractObject()); + } +} diff --git a/Test/Unit/bootstrap.php b/Test/Unit/bootstrap.php new file mode 100644 index 000000000..13cb5a2b5 --- /dev/null +++ b/Test/Unit/bootstrap.php @@ -0,0 +1,19 @@ +=5.3.3" + "php": ">=7.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", @@ -1149,11 +1149,6 @@ "bin/validate-json" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, "autoload": { "psr-4": { "JsonSchema\\": "src/JsonSchema/" @@ -1189,9 +1184,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/v5.2.13" + "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" }, - "time": "2023-09-26T02:20:38+00:00" + "time": "2024-07-06T21:00:26+00:00" }, { "name": "laminas/laminas-code", @@ -1327,6 +1322,7 @@ "type": "community_bridge" } ], + "abandoned": true, "time": "2021-10-01T16:07:46+00:00" }, { @@ -1391,6 +1387,7 @@ "type": "community_bridge" } ], + "abandoned": true, "time": "2022-04-12T14:28:29+00:00" }, { @@ -1648,6 +1645,7 @@ "type": "community_bridge" } ], + "abandoned": true, "time": "2021-09-02T18:02:31+00:00" }, { @@ -1704,6 +1702,7 @@ "type": "community_bridge" } ], + "abandoned": true, "time": "2021-09-02T18:30:53+00:00" }, { @@ -1784,6 +1783,7 @@ "type": "community_bridge" } ], + "abandoned": "symfony/mailer", "time": "2022-02-23T21:08:17+00:00" }, { @@ -1851,6 +1851,7 @@ "type": "community_bridge" } ], + "abandoned": true, "time": "2021-12-06T02:02:07+00:00" }, { @@ -1912,6 +1913,7 @@ "type": "community_bridge" } ], + "abandoned": "symfony/mime", "time": "2022-08-30T09:38:41+00:00" }, { @@ -2806,16 +2808,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.19.1", + "version": "v4.19.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", "shasum": "" }, "require": { @@ -2824,7 +2826,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -2856,22 +2858,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" }, - "time": "2024-03-17T08:10:35+00:00" + "time": "2024-09-29T15:01:53+00:00" }, { "name": "nosto/php-sdk", - "version": "7.4.0", + "version": "7.6.2", "source": { "type": "git", "url": "https://github.com/Nosto/nosto-php-sdk.git", - "reference": "3f6ed031e6e51930cdef515ed10a41477514ae6e" + "reference": "a16433aa413d1bcebc02702bec80f4d6aa29d5e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nosto/nosto-php-sdk/zipball/3f6ed031e6e51930cdef515ed10a41477514ae6e", - "reference": "3f6ed031e6e51930cdef515ed10a41477514ae6e", + "url": "https://api.github.com/repos/Nosto/nosto-php-sdk/zipball/a16433aa413d1bcebc02702bec80f4d6aa29d5e7", + "reference": "a16433aa413d1bcebc02702bec80f4d6aa29d5e7", "shasum": "" }, "require": { @@ -2912,22 +2914,22 @@ "description": "PHP SDK for developing Nosto modules for e-commerce platforms", "support": { "issues": "https://github.com/Nosto/nosto-php-sdk/issues", - "source": "https://github.com/Nosto/nosto-php-sdk/tree/7.4.0" + "source": "https://github.com/Nosto/nosto-php-sdk/tree/7.6.2" }, - "time": "2024-04-02T06:51:41+00:00" + "time": "2025-02-08T17:30:36+00:00" }, { "name": "paragonie/constant_time_encoding", - "version": "v2.6.3", + "version": "v2.7.0", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "58c3f47f650c94ec05a151692652a868995d2938" + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", - "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105", + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105", "shasum": "" }, "require": { @@ -2981,7 +2983,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2022-06-14T06:56:20+00:00" + "time": "2024-05-08T12:18:48+00:00" }, { "name": "paragonie/random_compat", @@ -3035,16 +3037,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.2", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { @@ -3052,13 +3054,13 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "1.9-dev" @@ -3094,7 +3096,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -3106,24 +3108,24 @@ "type": "tidelift" } ], - "time": "2023-11-12T21:59:55+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "phpseclib/phpseclib", - "version": "3.0.37", + "version": "3.0.43", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8" + "reference": "709ec107af3cb2f385b9617be72af8cf62441d02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cfa2013d0f68c062055180dd4328cc8b9d1f30b8", - "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/709ec107af3cb2f385b9617be72af8cf62441d02", + "reference": "709ec107af3cb2f385b9617be72af8cf62441d02", "shasum": "" }, "require": { - "paragonie/constant_time_encoding": "^1|^2", + "paragonie/constant_time_encoding": "^1|^2|^3", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", "php": ">=5.6.1" }, @@ -3200,7 +3202,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.37" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.43" }, "funding": [ { @@ -3216,7 +3218,7 @@ "type": "tidelift" } ], - "time": "2024-03-03T02:14:58+00:00" + "time": "2024-12-14T21:12:59+00:00" }, { "name": "psr/container", @@ -3370,20 +3372,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -3407,7 +3409,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -3419,9 +3421,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -3830,23 +3832,23 @@ }, { "name": "seld/jsonlint", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259" + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9bb7db07b5d66d90f6ebf542f09fc67d800e5259", - "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", "shasum": "" }, "require": { "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.5", + "phpstan/phpstan": "^1.11", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, "bin": [ @@ -3878,7 +3880,7 @@ ], "support": { "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.10.2" + "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" }, "funding": [ { @@ -3890,7 +3892,7 @@ "type": "tidelift" } ], - "time": "2024-02-07T12:57:50+00:00" + "time": "2024-07-11T14:55:45+00:00" }, { "name": "seld/phar-utils", @@ -4077,16 +4079,16 @@ }, { "name": "symfony/config", - "version": "v5.4.38", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14" + "reference": "977c88a02d7d3f16904a81907531b19666a08e78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14", - "reference": "3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14", + "url": "https://api.github.com/repos/symfony/config/zipball/977c88a02d7d3f16904a81907531b19666a08e78", + "reference": "977c88a02d7d3f16904a81907531b19666a08e78", "shasum": "" }, "require": { @@ -4136,7 +4138,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.4.38" + "source": "https://github.com/symfony/config/tree/v5.4.46" }, "funding": [ { @@ -4152,7 +4154,7 @@ "type": "tidelift" } ], - "time": "2024-03-22T10:04:40+00:00" + "time": "2024-10-30T07:58:02+00:00" }, { "name": "symfony/console", @@ -4315,16 +4317,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v5.4.38", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "0ba1fa459d284a9398c71afa1cb5d13de025de17" + "reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0ba1fa459d284a9398c71afa1cb5d13de025de17", - "reference": "0ba1fa459d284a9398c71afa1cb5d13de025de17", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", + "reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", "shasum": "" }, "require": { @@ -4384,7 +4386,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.38" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.48" }, "funding": [ { @@ -4400,20 +4402,20 @@ "type": "tidelift" } ], - "time": "2024-03-18T16:56:51+00:00" + "time": "2024-11-20T10:51:57+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.3", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "80d075412b557d41002320b96a096ca65aa2c98d" + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d", - "reference": "80d075412b557d41002320b96a096ca65aa2c98d", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", "shasum": "" }, "require": { @@ -4421,12 +4423,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4451,7 +4453,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" }, "funding": [ { @@ -4467,7 +4469,7 @@ "type": "tidelift" } ], - "time": "2023-01-24T14:02:46+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/error-handler", @@ -4644,12 +4646,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "1.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4702,16 +4704,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "26dd9912df6940810ea00f8f53ad48d6a3424995" + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/26dd9912df6940810ea00f8f53ad48d6a3424995", - "reference": "26dd9912df6940810ea00f8f53ad48d6a3424995", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54", + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54", "shasum": "" }, "require": { @@ -4749,7 +4751,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.40" + "source": "https://github.com/symfony/filesystem/tree/v5.4.45" }, "funding": [ { @@ -4765,20 +4767,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/finder", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "f51cff4687547641c7d8180d74932ab40b2205ce" + "reference": "63741784cd7b9967975eec610b256eed3ede022b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/f51cff4687547641c7d8180d74932ab40b2205ce", - "reference": "f51cff4687547641c7d8180d74932ab40b2205ce", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", "shasum": "" }, "require": { @@ -4812,7 +4814,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.40" + "source": "https://github.com/symfony/finder/tree/v5.4.45" }, "funding": [ { @@ -4828,20 +4830,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-28T13:32:08+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v2.5.3", + "version": "v2.5.5", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1" + "reference": "48ef1d0a082885877b664332b9427662065a360c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1", - "reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/48ef1d0a082885877b664332b9427662065a360c", + "reference": "48ef1d0a082885877b664332b9427662065a360c", "shasum": "" }, "require": { @@ -4852,12 +4854,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4890,7 +4892,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.3" + "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.5" }, "funding": [ { @@ -4906,20 +4908,20 @@ "type": "tidelift" } ], - "time": "2024-03-26T19:42:53+00:00" + "time": "2024-11-28T08:37:04+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.46", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "168b77c71e6f02d8fc479db78beaf742a37d3cab" + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/168b77c71e6f02d8fc479db78beaf742a37d3cab", - "reference": "168b77c71e6f02d8fc479db78beaf742a37d3cab", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f38b8af283b830e1363acd79e5bc3412d055341", + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341", "shasum": "" }, "require": { @@ -4966,7 +4968,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.46" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.48" }, "funding": [ { @@ -4982,7 +4984,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:52:21+00:00" + "time": "2024-11-13T18:58:02+00:00" }, { "name": "symfony/http-kernel", @@ -5090,20 +5092,20 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -5114,8 +5116,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5149,7 +5151,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -5165,7 +5167,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -5191,8 +5193,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5273,8 +5275,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5357,8 +5359,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5413,26 +5415,26 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5469,7 +5471,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -5485,7 +5487,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", @@ -5507,8 +5509,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5569,26 +5571,26 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5625,7 +5627,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -5641,7 +5643,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", @@ -5707,16 +5709,16 @@ }, { "name": "symfony/service-contracts", - "version": "v2.5.3", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3" + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3", - "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", "shasum": "" }, "require": { @@ -5732,12 +5734,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5770,7 +5772,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.3" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" }, "funding": [ { @@ -5786,20 +5788,20 @@ "type": "tidelift" } ], - "time": "2023-04-21T15:04:16+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.38", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ae1d949ccc57d3f6662e4256b47ac9fbfa9651ae" + "reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ae1d949ccc57d3f6662e4256b47ac9fbfa9651ae", - "reference": "ae1d949ccc57d3f6662e4256b47ac9fbfa9651ae", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/42f18f170aa86d612c3559cfb3bd11a375df32c8", + "reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8", "shasum": "" }, "require": { @@ -5859,7 +5861,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.38" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.48" }, "funding": [ { @@ -5875,7 +5877,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T10:19:25+00:00" + "time": "2024-11-08T15:21:10+00:00" }, { "name": "tedivm/jshrink", @@ -6522,29 +6524,27 @@ "packages-dev": [ { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "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", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", "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" + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -6552,7 +6552,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6563,9 +6563,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/instantiator", @@ -6683,6 +6683,7 @@ "issues": "https://github.com/Drenso/PhanExtensions/issues", "source": "https://github.com/Drenso/PhanExtensions/tree/v3.5.1" }, + "abandoned": true, "time": "2021-06-08T10:46:31+00:00" }, { @@ -7073,6 +7074,7 @@ "type": "community_bridge" } ], + "abandoned": true, "time": "2021-09-02T16:50:53+00:00" }, { @@ -7275,11 +7277,11 @@ }, { "name": "magento/module-backend", - "version": "102.0.5-p2", + "version": "102.0.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-backend/magento-module-backend-102.0.5.0-patch2.zip", - "shasum": "8ae2f2cf9de86ee6e79412f284dc4fbc8d28bab0" + "url": "https://repo.magento.com/archives/magento/module-backend/magento-module-backend-102.0.5.0-patch11.zip", + "shasum": "796f141d26be6846ba33684a254b4d8059276be4" }, "require": { "magento/framework": "103.0.*", @@ -7681,11 +7683,11 @@ }, { "name": "magento/module-checkout", - "version": "100.4.5-p6", + "version": "100.4.5-p8", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-checkout/magento-module-checkout-100.4.5.0-patch6.zip", - "shasum": "b478521a3d1cfdb07736c8ca1f55c60190ddf731" + "url": "https://repo.magento.com/archives/magento/module-checkout/magento-module-checkout-100.4.5.0-patch8.zip", + "shasum": "303103ffdf4e9ea12608ca8ee18127f0de02a59e" }, "require": { "magento/framework": "103.0.*", @@ -7694,6 +7696,7 @@ "magento/module-catalog": "104.0.*", "magento/module-catalog-inventory": "100.4.*", "magento/module-config": "101.2.*", + "magento/module-csp": "100.4.*", "magento/module-customer": "103.0.*", "magento/module-directory": "100.4.*", "magento/module-eav": "102.1.*", @@ -7731,11 +7734,11 @@ }, { "name": "magento/module-cms", - "version": "104.0.5-p1", + "version": "104.0.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-cms/magento-module-cms-104.0.5.0-patch1.zip", - "shasum": "aa92fdce172d7e481eb6bf6cf8d9dee074ee63a8" + "url": "https://repo.magento.com/archives/magento/module-cms/magento-module-cms-104.0.5.0-patch11.zip", + "shasum": "b2a1ee9930aa64540789bb27ccd8c5f4518bdfed" }, "require": { "magento/framework": "103.0.*", @@ -7800,11 +7803,11 @@ }, { "name": "magento/module-config", - "version": "101.2.5-p7", + "version": "101.2.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-config/magento-module-config-101.2.5.0-patch7.zip", - "shasum": "eea8b86ca1127ce2ce53ccd8c98652042d940281" + "url": "https://repo.magento.com/archives/magento/module-config/magento-module-config-101.2.5.0-patch11.zip", + "shasum": "bfb2d1678c56a829e894815b2c13b608a857bb88" }, "require": { "magento/framework": "103.0.*", @@ -7813,6 +7816,7 @@ "magento/module-deploy": "100.4.*", "magento/module-directory": "100.4.*", "magento/module-email": "101.1.*", + "magento/module-encryption-key": "100.4.*", "magento/module-media-storage": "100.4.*", "magento/module-store": "101.1.*", "php": "~7.4.0||~8.1.0" @@ -7912,11 +7916,11 @@ }, { "name": "magento/module-cron", - "version": "100.4.5", + "version": "100.4.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-cron/magento-module-cron-100.4.5.0.zip", - "shasum": "21c72975a3851a4cdb57380674a0afff02379d22" + "url": "https://repo.magento.com/archives/magento/module-cron/magento-module-cron-100.4.5.0-patch11.zip", + "shasum": "2efc11e1c41cda00bdeb1854c80cd928284b146c" }, "require": { "magento/framework": "103.0.*", @@ -7941,13 +7945,43 @@ ], "description": "N/A" }, + { + "name": "magento/module-csp", + "version": "100.4.4-p8", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-csp/magento-module-csp-100.4.4.0-patch8.zip", + "shasum": "c0bfd6fd496e991aefa35fef7e264ce9b07d6975" + }, + "require": { + "magento/framework": "103.0.*", + "magento/module-deploy": "100.4.*", + "magento/module-require-js": "100.4.*", + "magento/module-store": "101.1.*", + "php": "~7.4.0||~8.1.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Csp\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "CSP module enables Content Security Policies for Magento" + }, { "name": "magento/module-customer", - "version": "103.0.5-p7", + "version": "103.0.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-customer/magento-module-customer-103.0.5.0-patch7.zip", - "shasum": "549c766d7a1b6cc58e8e1d9ca94a679d9d7a850d" + "url": "https://repo.magento.com/archives/magento/module-customer/magento-module-customer-103.0.5.0-patch11.zip", + "shasum": "ba8cc482472bb53c0cafc0d40c1797ba5b0a6895" }, "require": { "magento/framework": "103.0.*", @@ -7972,6 +8006,7 @@ "php": "~7.4.0||~8.1.0" }, "suggest": { + "magento/module-asynchronous-operations": "100.4.*", "magento/module-cookie": "100.4.*", "magento/module-customer-sample-data": "Sample Data version: 100.4.*", "magento/module-webapi": "100.4.*" @@ -7993,11 +8028,11 @@ }, { "name": "magento/module-deploy", - "version": "100.4.5", + "version": "100.4.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-deploy/magento-module-deploy-100.4.5.0.zip", - "shasum": "a213853f0a0fdb9c4253dd3fc733e5a0fd73ba60" + "url": "https://repo.magento.com/archives/magento/module-deploy/magento-module-deploy-100.4.5.0-patch11.zip", + "shasum": "a989cb870f9b7e5d7908246dd6804ba36f87e460" }, "require": { "magento/framework": "103.0.*", @@ -8025,11 +8060,11 @@ }, { "name": "magento/module-developer", - "version": "100.4.5", + "version": "100.4.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-developer/magento-module-developer-100.4.5.0.zip", - "shasum": "dfa60efc615392b056754cb6a81c78a6ffef80f8" + "url": "https://repo.magento.com/archives/magento/module-developer/magento-module-developer-100.4.5.0-patch11.zip", + "shasum": "4d50d32f95debe3622da863346258fdbe40b21ca" }, "require": { "magento/framework": "103.0.*", @@ -8085,11 +8120,11 @@ }, { "name": "magento/module-downloadable", - "version": "100.4.5", + "version": "100.4.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-downloadable/magento-module-downloadable-100.4.5.0.zip", - "shasum": "78a7f641efd6f7297cd5f046bfda9565de415192" + "url": "https://repo.magento.com/archives/magento/module-downloadable/magento-module-downloadable-100.4.5.0-patch11.zip", + "shasum": "429e6e4e44d6835c4177539c7b89efa25e04e5d4" }, "require": { "magento/framework": "103.0.*", @@ -8163,11 +8198,11 @@ }, { "name": "magento/module-email", - "version": "101.1.5-p6", + "version": "101.1.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-email/magento-module-email-101.1.5.0-patch6.zip", - "shasum": "7d77ce378a5e2ed2ef80a3ac1075649ecacaa84f" + "url": "https://repo.magento.com/archives/magento/module-email/magento-module-email-101.1.5.0-patch11.zip", + "shasum": "d46104fd117a6acd07673794b5c71dbbfbd35978" }, "require": { "magento/framework": "103.0.*", @@ -8200,6 +8235,35 @@ ], "description": "N/A" }, + { + "name": "magento/module-encryption-key", + "version": "100.4.3-p12", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-encryption-key/magento-module-encryption-key-100.4.3.0-patch12.zip", + "shasum": "3ad968bfa2647f3c16d04ab2d66be1c8f0e34dbd" + }, + "require": { + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-config": "101.2.*", + "php": "~7.4.0||~8.1.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\EncryptionKey\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, { "name": "magento/module-gift-message", "version": "100.4.4", @@ -8284,11 +8348,11 @@ }, { "name": "magento/module-import-export", - "version": "101.0.5", + "version": "101.0.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-import-export/magento-module-import-export-101.0.5.0.zip", - "shasum": "d83b1dd4c0dac78116eb9c750c3ce0e50a5bd514" + "url": "https://repo.magento.com/archives/magento/module-import-export/magento-module-import-export-101.0.5.0-patch11.zip", + "shasum": "aeb593b5d4e4bc56efb62a968092630ca2539c57" }, "require": { "ext-ctype": "*", @@ -8318,11 +8382,11 @@ }, { "name": "magento/module-indexer", - "version": "100.4.5", + "version": "100.4.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-indexer/magento-module-indexer-100.4.5.0.zip", - "shasum": "6b16b0e77c9b562b93a6489dacc3602726f0f970" + "url": "https://repo.magento.com/archives/magento/module-indexer/magento-module-indexer-100.4.5.0-patch11.zip", + "shasum": "bdbc3bfe028a4b8cc7b351ad55505d55bff5e287" }, "require": { "magento/framework": "103.0.*", @@ -8346,11 +8410,11 @@ }, { "name": "magento/module-integration", - "version": "100.4.5", + "version": "100.4.5-p9", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-integration/magento-module-integration-100.4.5.0.zip", - "shasum": "9128a75504ec75ae3f6c9eb241e47cd59ca0a79a" + "url": "https://repo.magento.com/archives/magento/module-integration/magento-module-integration-100.4.5.0-patch9.zip", + "shasum": "69e3bd6c52326d2a095e614752740f1bda1bc8d0" }, "require": { "magento/framework": "103.0.*", @@ -8451,11 +8515,11 @@ }, { "name": "magento/module-newsletter", - "version": "100.4.5-p6", + "version": "100.4.5-p9", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-newsletter/magento-module-newsletter-100.4.5.0-patch6.zip", - "shasum": "bdd8df31cbee26c8b192a1027a20f98186104540" + "url": "https://repo.magento.com/archives/magento/module-newsletter/magento-module-newsletter-100.4.5.0-patch9.zip", + "shasum": "666f1e1d96c059c0aebb001df3474d98351ab721" }, "require": { "magento/framework": "103.0.*", @@ -8634,11 +8698,11 @@ }, { "name": "magento/module-reports", - "version": "100.4.5", + "version": "100.4.5-p10", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-reports/magento-module-reports-100.4.5.0.zip", - "shasum": "f83a31e94a46f6ffdbf2c62d6ec0db87e7ebdd34" + "url": "https://repo.magento.com/archives/magento/module-reports/magento-module-reports-100.4.5.0-patch10.zip", + "shasum": "3e82b855b516831cd3c79c236b1be019e8b445b7" }, "require": { "magento/framework": "103.0.*", @@ -9035,11 +9099,11 @@ }, { "name": "magento/module-shipping", - "version": "100.4.5", + "version": "100.4.5-p9", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-shipping/magento-module-shipping-100.4.5.0.zip", - "shasum": "325b2b9f9b77143187698d4a2d815887e6a563f8" + "url": "https://repo.magento.com/archives/magento/module-shipping/magento-module-shipping-100.4.5.0-patch9.zip", + "shasum": "35574d4fc0a412af58f8d55fc46649d7083ee235" }, "require": { "ext-gd": "*", @@ -9119,11 +9183,11 @@ }, { "name": "magento/module-tax", - "version": "100.4.5-p5", + "version": "100.4.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-tax/magento-module-tax-100.4.5.0-patch5.zip", - "shasum": "8f0fa32d2bda0376f15935a96e5839f3eb223125" + "url": "https://repo.magento.com/archives/magento/module-tax/magento-module-tax-100.4.5.0-patch11.zip", + "shasum": "0df88d572f563b588c1dd5c1667bebbaa01a238d" }, "require": { "magento/framework": "103.0.*", @@ -9205,11 +9269,11 @@ }, { "name": "magento/module-translation", - "version": "100.4.5", + "version": "100.4.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-translation/magento-module-translation-100.4.5.0.zip", - "shasum": "a8ff494922576f2874b66a913f14528f9ee1418b" + "url": "https://repo.magento.com/archives/magento/module-translation/magento-module-translation-100.4.5.0-patch11.zip", + "shasum": "dfa5cc1915f321d11345492cb14b8521a8022451" }, "require": { "magento/framework": "103.0.*", @@ -9240,11 +9304,11 @@ }, { "name": "magento/module-ui", - "version": "101.2.5", + "version": "101.2.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-ui/magento-module-ui-101.2.5.0.zip", - "shasum": "7a2f25eba5ec07a4b26bdda98b60fb393f5bfff4" + "url": "https://repo.magento.com/archives/magento/module-ui/magento-module-ui-101.2.5.0-patch11.zip", + "shasum": "e28b1893ee6bdd7767c2b412a977b4a31413b151" }, "require": { "magento/framework": "103.0.*", @@ -9309,11 +9373,11 @@ }, { "name": "magento/module-user", - "version": "101.2.5", + "version": "101.2.5-p11", "dist": { "type": "zip", - "url": "https://repo.magento.com/archives/magento/module-user/magento-module-user-101.2.5.0.zip", - "shasum": "7940b349b7adaac56d97b87d85304a28c21d6592" + "url": "https://repo.magento.com/archives/magento/module-user/magento-module-user-101.2.5.0-patch11.zip", + "shasum": "100597d3fdc13a326593f733ae2e139f743ec7b5" }, "require": { "magento/framework": "103.0.*", @@ -9556,16 +9620,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { @@ -9573,11 +9637,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -9603,7 +9668,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -9611,20 +9676,20 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.4.1", + "version": "v4.5.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", "shasum": "" }, "require": { @@ -9660,9 +9725,9 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" }, - "time": "2024-01-31T06:18:54+00:00" + "time": "2024-09-08T10:13:13+00:00" }, { "name": "pdepend/pdepend", @@ -10091,16 +10156,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.4.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "298d2febfe79d03fe714eb871d5538da55205b1a" + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a", - "reference": "298d2febfe79d03fe714eb871d5538da55205b1a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", "shasum": "" }, "require": { @@ -10109,17 +10174,17 @@ "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.5", + "mockery/mockery": "~1.3.5 || ~1.6.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-mockery": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.2", "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^5.13" + "psalm/phar": "^5.26" }, "type": "library", "extra": { @@ -10149,29 +10214,29 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" }, - "time": "2024-04-09T21:13:58+00:00" + "time": "2024-12-07T09:39:29+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.8.2", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -10207,9 +10272,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2024-02-23T11:10:43+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpmd/phpmd", @@ -10296,30 +10361,30 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.28.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^5.3.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", "symfony/process": "^5.2" }, "type": "library", @@ -10337,41 +10402,41 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" }, - "time": "2024-04-03T18:51:33+00:00" + "time": "2025-02-19T13:28:12+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10380,7 +10445,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -10409,7 +10474,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -10417,7 +10482,7 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10764,25 +10829,25 @@ }, { "name": "sabre/event", - "version": "5.1.4", + "version": "5.1.7", "source": { "type": "git", "url": "https://github.com/sabre-io/event.git", - "reference": "d7da22897125d34d7eddf7977758191c06a74497" + "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497", - "reference": "d7da22897125d34d7eddf7977758191c06a74497", + "url": "https://api.github.com/repos/sabre-io/event/zipball/86d57e305c272898ba3c28e9bd3d65d5464587c2", + "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.17.1", + "friendsofphp/php-cs-fixer": "~2.17.1||^3.63", "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, "type": "library", "autoload": { @@ -10826,7 +10891,7 @@ "issues": "https://github.com/sabre-io/event/issues", "source": "https://github.com/fruux/sabre-event" }, - "time": "2021-11-04T06:51:17+00:00" + "time": "2024-08-27T11:23:05+00:00" }, { "name": "sebastian/cli-parser", @@ -11855,16 +11920,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.9.1", + "version": "3.11.3", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909" + "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909", - "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", + "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", "shasum": "" }, "require": { @@ -11929,9 +11994,13 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2024-03-31T21:03:09+00:00" + "time": "2025-01-23T17:04:15+00:00" }, { "name": "staabm/annotate-pull-request-from-checkstyle", @@ -12161,21 +12230,21 @@ }, { "name": "yotpo/module-yotpo-combined", - "version": "4.2.0", + "version": "4.3.2", "source": { "type": "git", "url": "https://github.com/YotpoLtd/magento2-module-combined.git", - "reference": "bb1076a3fef95600eaa75bdd7b57154deb9aa9a3" + "reference": "d98be48ab407b89a2ce9fd5a7d578b3f01c4897e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/YotpoLtd/magento2-module-combined/zipball/bb1076a3fef95600eaa75bdd7b57154deb9aa9a3", - "reference": "bb1076a3fef95600eaa75bdd7b57154deb9aa9a3", + "url": "https://api.github.com/repos/YotpoLtd/magento2-module-combined/zipball/d98be48ab407b89a2ce9fd5a7d578b3f01c4897e", + "reference": "d98be48ab407b89a2ce9fd5a7d578b3f01c4897e", "shasum": "" }, "require": { - "yotpo/module-yotpo-messaging": "4.2.0", - "yotpo/module-yotpo-reviews": "4.2.0" + "yotpo/module-yotpo-messaging": "4.3.2", + "yotpo/module-yotpo-reviews": "4.3.1" }, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -12185,22 +12254,22 @@ ], "description": "Yotpo marketing extension for Magento2", "support": { - "source": "https://github.com/YotpoLtd/magento2-module-combined/tree/4.2.0" + "source": "https://github.com/YotpoLtd/magento2-module-combined/tree/4.3.2" }, - "time": "2024-01-11T10:31:29+00:00" + "time": "2024-07-30T05:25:44+00:00" }, { "name": "yotpo/module-yotpo-core", - "version": "4.2.0", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/YotpoLtd/magento2-module-core.git", - "reference": "7a3a54ac75da2573c6bd63496adf0f848cc87229" + "reference": "a9a8bce9bc5549bda5d054f23d06f5a9209d78dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/YotpoLtd/magento2-module-core/zipball/7a3a54ac75da2573c6bd63496adf0f848cc87229", - "reference": "7a3a54ac75da2573c6bd63496adf0f848cc87229", + "url": "https://api.github.com/repos/YotpoLtd/magento2-module-core/zipball/a9a8bce9bc5549bda5d054f23d06f5a9209d78dc", + "reference": "a9a8bce9bc5549bda5d054f23d06f5a9209d78dc", "shasum": "" }, "require": { @@ -12228,28 +12297,28 @@ ], "description": "Yotpo Reviews core extension for Magento2", "support": { - "source": "https://github.com/YotpoLtd/magento2-module-core/tree/4.2.0" + "source": "https://github.com/YotpoLtd/magento2-module-core/tree/4.3.1" }, - "time": "2024-01-11T10:31:15+00:00" + "time": "2024-07-30T05:10:20+00:00" }, { "name": "yotpo/module-yotpo-messaging", - "version": "4.2.0", + "version": "4.3.2", "source": { "type": "git", "url": "https://github.com/YotpoLtd/magento2-module-messaging.git", - "reference": "16dd6dd0a8a1dc438b9510be020298c9223b5059" + "reference": "df7ee4a75982e52dd09cbbba437af17739b29efc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/YotpoLtd/magento2-module-messaging/zipball/16dd6dd0a8a1dc438b9510be020298c9223b5059", - "reference": "16dd6dd0a8a1dc438b9510be020298c9223b5059", + "url": "https://api.github.com/repos/YotpoLtd/magento2-module-messaging/zipball/df7ee4a75982e52dd09cbbba437af17739b29efc", + "reference": "df7ee4a75982e52dd09cbbba437af17739b29efc", "shasum": "" }, "require": { "magento/framework": ">=102.0.0", "php": "~5.6.0|^7.0|^8.0", - "yotpo/module-yotpo-core": "4.2.0" + "yotpo/module-yotpo-core": "4.3.1" }, "type": "magento2-module", "autoload": { @@ -12267,28 +12336,28 @@ ], "description": "Yotpo Sms extension for Magento2", "support": { - "source": "https://github.com/YotpoLtd/magento2-module-messaging/tree/4.2.0" + "source": "https://github.com/YotpoLtd/magento2-module-messaging/tree/4.3.2" }, - "time": "2024-01-11T10:31:25+00:00" + "time": "2024-07-30T05:21:47+00:00" }, { "name": "yotpo/module-yotpo-reviews", - "version": "4.2.0", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/YotpoLtd/magento2-module-reviews.git", - "reference": "91e58e44a5d8f5b8680e9e306b331e36a643bc59" + "reference": "ac51e10d63862845a0853c87debc63051e00c393" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/YotpoLtd/magento2-module-reviews/zipball/91e58e44a5d8f5b8680e9e306b331e36a643bc59", - "reference": "91e58e44a5d8f5b8680e9e306b331e36a643bc59", + "url": "https://api.github.com/repos/YotpoLtd/magento2-module-reviews/zipball/ac51e10d63862845a0853c87debc63051e00c393", + "reference": "ac51e10d63862845a0853c87debc63051e00c393", "shasum": "" }, "require": { "magento/framework": ">=102.0.0", "php": "~5.6.0|^7.0|^8.0", - "yotpo/module-yotpo-core": "4.2.0" + "yotpo/module-yotpo-core": "4.3.1" }, "type": "magento2-module", "autoload": { @@ -12306,20 +12375,20 @@ ], "description": "Yotpo Reviews extension for Magento2", "support": { - "source": "https://github.com/YotpoLtd/magento2-module-reviews/tree/4.2.0" + "source": "https://github.com/YotpoLtd/magento2-module-reviews/tree/4.3.1" }, - "time": "2024-01-11T10:31:21+00:00" + "time": "2024-07-30T05:13:42+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": ">=7.4.0", "ext-json": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..d3f9ccceb --- /dev/null +++ b/jest.config.js @@ -0,0 +1,16 @@ +module.exports = { + verbose: true, + testEnvironment: 'jsdom', + moduleFileExtensions: ['js', 'jsx'], + moduleNameMapper: { + 'Nosto_Tagging/js/(.*)': '/view/frontend/web/js/$1' + }, + transform: { + '^.+\\.js$': 'babel-jest' + }, + collectCoverage: true, + coverageDirectory: 'coverage', + coverageReporters: ['text', 'lcov'], + testMatch: ['/Test/Javascript/**/*.test.js'], + setupFilesAfterEnv: ['/Test/Javascript/setup.js'] +}; diff --git a/package.json b/package.json new file mode 100644 index 000000000..e92b5a60a --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "nosto-tagging", + "version": "1.0.0", + "description": "Nosto Tagging Extension for Magento 2", + "private": true, + "scripts": { + "test": "jest", + "test:watch": "jest --watch", + "lint": "eslint view/frontend/web/js", + "lint:fix": "eslint --fix view/frontend/web/js" + }, + "devDependencies": { + "@babel/core": "^7.15.0", + "@babel/preset-env": "^7.15.0", + "babel-jest": "^27.1.0", + "eslint": "^7.32.0", + "jest": "^27.1.0", + "jest-environment-jsdom": "^27.1.0" + }, + "babel": { + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "current" + } + } + ] + ] + } +} diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 000000000..0bbdeb9b7 --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,27 @@ + + + Coding standard for Nosto Tagging module. + + + . + */vendor/* + */Test/* + + + + + + + + + + + + + + + + + + + diff --git a/phpmd.xml b/phpmd.xml new file mode 100644 index 000000000..efc6229d2 --- /dev/null +++ b/phpmd.xml @@ -0,0 +1,29 @@ + + + + PHPMD Ruleset for Nosto Tagging Module + + + + + + + + + + + + + + + + + + + + + diff --git a/phpunit.integration.xml.dist b/phpunit.integration.xml.dist new file mode 100644 index 000000000..8571eec8d --- /dev/null +++ b/phpunit.integration.xml.dist @@ -0,0 +1,44 @@ + + + + + Test/Unit + + + + + + Api + Block + Console + Controller + Cron + CustomerData + Exception + Helper + Logger + Model + Observer + Plugin + Util + Setup + view + + + Test + + + diff --git a/phpunit.xml b/phpunit.xml index 5e0d501a7..8571eec8d 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,7 +1,7 @@ Setup view + + Test + diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 000000000..8571eec8d --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,44 @@ + + + + + Test/Unit + + + + + + Api + Block + Console + Controller + Cron + CustomerData + Exception + Helper + Logger + Model + Observer + Plugin + Util + Setup + view + + + Test + + +