pixel-workflows[bot]
917d530006
chore: sync files from wearepixel/pixel-workflows - created local '.gitattributes' from remote 'files/.gitattributes'
2026-07-27 08:21:48 +00:00
pixel-workflows[bot]
d56ce61dec
chore: sync files from wearepixel/pixel-workflows - created local '.editorconfig' from remote 'files/.editorconfig'
2026-07-27 08:21:45 +00:00
pixel-workflows[bot]
11d734e848
chore: sync files from wearepixel/pixel-workflows - created local '.github/workflows/dependabot-slack-alert.yml' from remote 'files/.github/workflows/dependabot-slack-alert.yml'
2026-07-27 08:21:42 +00:00
pixel-workflows[bot]
07d155159d
chore: sync files from wearepixel/pixel-workflows - synced local '.github/workflows/dependabot-auto-merge.yml' with remote 'files/.github/workflows/dependabot-auto-merge.yml'
2026-07-27 08:21:39 +00:00
pixel-workflows[bot]
45362d3c62
chore: update dependabot configuration
2026-07-27 08:20:56 +00:00
Joel Male
d1169f502f
Merge pull request #11 from wearepixel/feature/v3
...
feat: v3 - storage drivers, first-class objects, testing utilities, Livewire/Inertia support, Artisan generators
v3
v3.0.0
2026-06-13 15:57:26 +10:00
Joel Male
bfdea648ae
chore: merge master, resolve conflicts keeping v3
2026-06-13 14:33:14 +10:00
Joel Male
01189993f2
feat: add applies_to support for quantity-limited item conditions
2026-06-13 14:27:42 +10:00
dependabot[bot]
3375518354
chore(deps): bump shivammathur/setup-php in the actions group
...
Bumps the actions group with 1 update: [shivammathur/setup-php](https://github.com/shivammathur/setup-php ).
Updates `shivammathur/setup-php` from 2.37.1 to 2.37.2
- [Release notes](https://github.com/shivammathur/setup-php/releases )
- [Commits](https://github.com/shivammathur/setup-php/compare/7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc...f3e473d116dcccaddc5834248c87452386958240 )
---
updated-dependencies:
- dependency-name: shivammathur/setup-php
dependency-version: 2.37.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: actions
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-06-13 14:21:41 +10:00
dependabot[bot]
c493c73497
chore(deps): bump actions/checkout in the actions group
...
Bumps the actions group with 1 update: [actions/checkout](https://github.com/actions/checkout ).
Updates `actions/checkout` from 6.0.2 to 6.0.3
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: 6.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: actions
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-06-13 14:21:41 +10:00
Joel Male
7427ce953a
chore: bump version to 2.1.4
v2
v2.1.4
2026-06-13 14:19:39 +10:00
Joel Male
6ba50a1c48
fix: prevent save() on array after clear() with database driver
2026-06-13 14:18:55 +10:00
Joel Male
c50fc70688
fix: restore @mixin and @method PHPDoc on CartFacade for IDE and PHPStan support
2026-06-13 14:17:21 +10:00
Joel Male
c9ffd8b8a4
chore: update to v3.0.0
2026-06-13 14:16:28 +10:00
Joel Male
f3c4ddae6e
docs: add v3 recommended patterns to upgrade guide and link from README
2026-06-13 14:11:20 +10:00
Joel Male
3f1f5fb4d2
fix: add missing return type to getAssociatedModel
2026-06-13 14:09:29 +10:00
github-actions[bot]
fce7125c5f
Merge pull request #14 from wearepixel/dependabot/github_actions/actions-5dacb66663
...
chore(deps): bump shivammathur/setup-php from 2.37.1 to 2.37.2 in the actions group
2026-06-08 21:45:38 +00:00
dependabot[bot]
834e211443
chore(deps): bump shivammathur/setup-php in the actions group
...
Bumps the actions group with 1 update: [shivammathur/setup-php](https://github.com/shivammathur/setup-php ).
Updates `shivammathur/setup-php` from 2.37.1 to 2.37.2
- [Release notes](https://github.com/shivammathur/setup-php/releases )
- [Commits](https://github.com/shivammathur/setup-php/compare/7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc...f3e473d116dcccaddc5834248c87452386958240 )
---
updated-dependencies:
- dependency-name: shivammathur/setup-php
dependency-version: 2.37.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: actions
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-06-08 21:45:26 +00:00
Joel Male
2ced1038af
feat: add PHPStan level 5 with zero errors
...
- Install phpstan/phpstan, add phpstan.neon at level 5 targeting PHP 8.3
- Add phpstan-bootstrap.php stubs for Laravel helper functions (app,
config, config_path, app_path, session) unavailable in standalone packages
- Fix CartCondition::setOrder() - removed incorrect @return int (method is void)
- Fix CartCondition::getCalculatedValue() - removed incorrect @return mixed PHPDoc
- Fix Cart::condition() - remove redundant instanceof check the type system already guarantees
- Fix Cart::fireEvent() - remove array_values() on already-list literal array
- Fix ItemCollection - add @property annotations for magic __get properties
- Fix ItemCollection::getAssociatedModel() - correct @return bool to @return mixed
- Fix ItemCollection::getConditions() - remove dead is_array && !instanceof check
- Fix Validator - add @method stub so PHPStan resolves make() through __callStatic
- Add ignoreErrors for trait.unused (HasCart designed for external Livewire use)
- Add ignoreErrors for round() mode mismatch (PHPStan 2.x PHP 8.4 stubs bug)
- Add phpstan step to CI (PHP 8.3 only, matches phpVersion config)
2026-06-06 16:02:16 +10:00
github-actions[bot]
9b198edb7d
Merge pull request #13 from wearepixel/dependabot/github_actions/actions-6a98abd9ac
...
chore(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the actions group
2026-06-03 10:48:17 +00:00
dependabot[bot]
49959faace
chore(deps): bump actions/checkout in the actions group
...
Bumps the actions group with 1 update: [actions/checkout](https://github.com/actions/checkout ).
Updates `actions/checkout` from 6.0.2 to 6.0.3
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: 6.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: actions
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-06-03 10:48:04 +00:00
Joel Male
e61ffae5fe
chore: bump version to 2.1.3
v2.1.3
2026-05-29 14:27:02 +10:00
Joel Male
10ab30f4e8
fix: correct add() @method signature to accept array input style
2026-05-29 14:14:34 +10:00
Joel Male
34626eef5e
chore: bump version to 2.1.2
v2.1.2
2026-05-29 14:12:49 +10:00
Joel Male
6020b655e2
Merge pull request #12 from wearepixel/fix/phpstan-facade-types
...
fix: add PHPStan/Larastan support to CartFacade
2026-05-29 14:11:47 +10:00
Joel Male
2c56062f97
fix: add @mixin and @method PHPDoc to CartFacade for PHPStan/Larastan support
2026-05-29 14:09:15 +10:00
Joel Male
88a118d81b
feat: make SessionDriver constructor args optional with app() defaults
...
new SessionDriver() now works out of the box in a Laravel app, resolving
the session and session ID from the container. Explicit args still work
as before. Also ignores .claude/ directory from version control.
2026-05-28 09:25:41 +10:00
Joel Male
4f87bd645c
docs: update README for v3 features
...
- Fix vendor:publish tag to cart-config
- Update TOC with Storage Drivers, Artisan Generators, First-class Objects, Testing, and Livewire / Inertia sections
- Replace Storage Options section with expanded Storage Drivers section covering session, database, Redis, multi-driver, and custom drivers
- Add Artisan Generators section documenting cart:install, cart:make:coupon, cart:make:tax, cart:make:shipping, cart:make:driver, and cart:debug
- Add First-class Objects section documenting Coupon, TaxRule, and ShippingRate base classes
- Add Testing section documenting Cart::fake() and assertion methods
- Add Livewire / Inertia section documenting HasCart trait and ShareCartWithInertia
2026-05-27 21:53:37 +10:00
Joel Male
bab304c620
docs: add UPGRADE.md and CHANGELOG.md
2026-05-27 21:50:54 +10:00
Joel Male
fd77347542
fix: validate class name input and check file write in Make commands
...
Add path traversal protection via PHP class name regex validation to all
four Make* commands, check file_put_contents() return value for write
failures, and remove the unnecessary \$defer = false property from
CartServiceProvider.
2026-05-27 21:49:08 +10:00
Joel Male
ce51042edf
feat: register Artisan commands in CartServiceProvider
2026-05-27 21:45:16 +10:00
Joel Male
c2b2563cf1
feat: add cart:debug command
2026-05-27 21:44:47 +10:00
Joel Male
15d4397968
feat: add cart:make:driver command
2026-05-27 21:43:59 +10:00
Joel Male
76fba35643
feat: add cart:make:shipping command
2026-05-27 21:43:34 +10:00
Joel Male
b8140166c9
feat: add cart:make:tax command
2026-05-27 21:43:14 +10:00
Joel Male
fc16e6c877
feat: add cart:make:coupon command
2026-05-27 21:42:51 +10:00
Joel Male
731aaa070d
feat: add cart:install command
2026-05-27 21:42:28 +10:00
Joel Male
0efd4378a8
feat: add HasCart trait and ShareCartWithInertia
2026-05-27 21:38:44 +10:00
Joel Male
a485bfb6f0
refactor: use assertEqualsWithDelta for float comparisons, add @internal to fake()
...
Replace Assert::assertEquals with Assert::assertEqualsWithDelta (epsilon 0.0001)
in assertSubTotal, assertTotal, and assertTotalQuantity to avoid IEEE 754
floating-point equality pitfalls. Add @internal docblock to fake() to signal
it is test-only. Add regression test for consecutive withItems calls.
2026-05-27 21:35:49 +10:00
Joel Male
8d04d18b48
test: add withCoupon test and fix withItems ID collision
2026-05-27 21:33:35 +10:00
Joel Male
61863e0bd5
feat: add Cart::fake(), assertion methods, and CartFactory
...
Adds Cart::fake() which swaps the active driver to NullDriver and returns
a CartFactory fluent test builder. Adds assertion methods (assertContains,
assertCount, assertTotalQuantity, assertSubTotal, assertTotal,
assertConditionApplied, assertEmpty, assertNotEmpty) to Cart for use in
tests. CartFactory provides withItems(), withCondition(), and withCoupon()
as chainable helpers for seeding cart state.
2026-05-27 21:31:54 +10:00
Joel Male
c3a734bd7f
feat: add Cart::coupon(), Cart::tax(), Cart::shipping()
...
Proxy methods that accept first-class Coupon, TaxRule, and ShippingRate
objects and delegate to Cart::condition() via toCondition().
2026-05-27 21:27:23 +10:00
Joel Male
2513e07436
feat: add ShippingRate base class
2026-05-27 21:24:44 +10:00
Joel Male
b5edbb8ec0
feat: add TaxRule base class
2026-05-27 21:24:09 +10:00
Joel Male
867daaf328
feat: add Coupon base class
2026-05-27 21:23:39 +10:00
Joel Male
e41739c436
feat: add CartConditionable interface and first-class exceptions
2026-05-27 21:23:07 +10:00
Joel Male
4877911cdd
fix: serialize conditions to arrays before storage; type \$events
...
- serializeConditions() now maps CartCondition objects to arrays via
toArray() before passing to the driver, preventing json_encode()
producing {} for object values in the DatabaseDriver
- Add Dispatcher type hint to \$events property and constructor parameter
- Add database round-trip test for cart-level conditions
- Fix CartConditionsTest to retrieve condition objects from the cart
rather than relying on object-reference side-effects that no longer
hold after proper serialization
2026-05-27 21:21:44 +10:00
Joel Male
f3e5e958b7
fix: resolve Cart.php regressions after driver refactor
...
- Cast \$value to string in updateQuantityRelative() before passing to preg_match() and str_replace() to fix TypeError when integer quantities are passed
- Reconstruct ItemAttributeCollection and CartCondition objects from serialized arrays in getContent() so attribute property access (->size) and condition methods (.getName()) work correctly after deserialization
- Store CartCondition objects directly (not serialized to arrays) in saveConditions() to preserve object identity for parsedRawValue tracking via getCalculatedValue()
- Remove ->values() re-indexing from serializeItems() conditions serialization to preserve original condition array indices after partial removal
2026-05-27 21:16:07 +10:00
Joel Male
adf4bca74f
chore: remove CartSession (replaced by driver system)
2026-05-27 21:09:50 +10:00
Joel Male
0c27ac4d9a
test: update existing tests to use CartDriver
2026-05-27 21:09:40 +10:00