@@ -27,16 +27,46 @@ abstract public function item();
2727 * @return \Illuminate\Support\Collection
2828 */
2929 public function get ()
30+ {
31+ return $ this ->transformReleases (
32+ Marketplace::releases ($ this ->item ())['data ' ]
33+ );
34+ }
35+
36+ /**
37+ * Get paginated changelog.
38+ *
39+ * @return array
40+ */
41+ public function paginate ($ page = 1 , $ perPage = 10 )
42+ {
43+ $ response = Marketplace::releases ($ this ->item (), [
44+ 'page ' => $ page ,
45+ 'perPage ' => $ perPage ,
46+ ]);
47+
48+ return [
49+ 'data ' => $ this ->transformReleases ($ response ['data ' ], $ page ),
50+ 'meta ' => $ response ['meta ' ],
51+ ];
52+ }
53+
54+ /**
55+ * Transform releases into changelog format.
56+ *
57+ * @return \Illuminate\Support\Collection
58+ */
59+ protected function transformReleases ($ releases , $ page = 1 )
3060 {
3161 $ type = null ;
3262
33- return Marketplace:: releases ( $ this -> item ())-> map (function ($ release , $ index ) use (&$ type ) {
63+ return $ releases -> map (function ($ release , $ index ) use (&$ type, $ page ) {
3464 $ type = $ type === 'downgrade ' ? $ type : $ this ->parseReleaseType ($ release ['version ' ], $ index );
3565
3666 return (object ) [
3767 'version ' => $ release ['version ' ],
3868 'type ' => $ type ,
39- 'latest ' => $ index === 0 ,
69+ 'latest ' => $ page === 1 && $ index === 0 ,
4070 'licensed ' => $ this ->isLicensed ($ release ['version ' ]),
4171 'date ' => Carbon::parse ($ release ['date ' ])->toIso8601String (),
4272 'body ' => $ release ['changelog ' ],
0 commit comments