PluginProbe
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More / 2.3.1
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More v2.3.1
2.4.0 2.3.4 2.3.3 2.3.2 2.3.1 2.3.0 2.2.2 2.2.1 2.2.0 2.1.2 2.1.1 trunk 0.0.1 0.0.2 0.0.3 0.0.4 0.0.5 0.0.6 0.0.7 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 All 67 releases
better-payment / vendor / league / csv / CHANGELOG.md

CHANGELOG.md in Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More 2.3.1, at vendor/league/csv/CHANGELOG.md

1,274 lines 33.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 # Changelog
2
3 All Notable changes to `Csv` will be documented in this file
4
5 ## [9.8.0] - 2022-01-04
6
7 ### Added
8
9 - Added PHP7.4 typed properties where applicable
10 - `TabularDataReader::fetchColumnByName` to replace `TabularDataReader::fetchColumn`
11 - `TabularDataReader::fetchColumnByOffset` to replace `TabularDataReader::fetchColumn`
12
13 ### Deprecated
14
15 - `TabularDataReader::fetchColumn` use `TabularDataReader::fetchColumnByOffset` or `TabularDataReader::fetchColumnByName` instead
16
17 ### Fixed
18
19 - `AbstractCsv` constructor is marked final via docblock.
20 The method should never be extended or changed in child classes to avoid unexpected behaviour
21
22 ### Removed
23
24 - PHP7.3 support
25 - Remove internal `EmptyEscapeParser` Polyfill used in `Reader` class
26 - Remove PHP7.4 polyfill features in `Writer` class
27
28 ## [9.7.4] - 2021-11-30
29
30 ### Added
31
32 - None
33
34 ### Deprecated
35
36 - None
37
38 ### Fixed
39
40 - Bug fix `EscapeFormula` to follow OWASP latest recommendation [](https://github.com/thephpleague/csv/pull/452PR #452](https://github.com/thephpleague/csv/pull/452](https://github.com/thephpleague/csv/pull/452)
41 thanks to [](https://github.com/robertfausk@robertfausk](https://github.com/robertfausk](https://github.com/robertfausk) and [](https://github.com/Lehmhub@Lehmub](https://github.com/Lehmhub](https://github.com/Lehmhub)
42
43 ### Removed
44
45 - None
46
47 ## [9.7.3] - 2021-11-21
48
49 ### Added
50
51 - None
52
53 ### Deprecated
54
55 - None
56
57 ### Fixed
58
59 - Update PHPStan requirement for development
60 - Improve Documentation generation thanks to [](https://github.com/pdelrepdelre](https://github.com/pdelre](https://github.com/pdelre)
61 - PHP8.1 compliance: using `ReturnTypeWillChange` to avoid emitting a unnecessary deprecation notice. thanks to [](https://github.com/cedric-annecedric-anne](https://github.com/cedric-anne](https://github.com/cedric-anne)
62
63 ### Removed
64
65 - None
66
67 ## [9.7.2] - 2021-10-05
68
69 ### Added
70
71 - None
72
73 ### Deprecated
74
75 - None
76
77 ### Fixed
78
79 - Update dependencies requirement for development
80 - PHP8.1 compliance: replace `FILTER_SANITIZE_STRING` by `FILTER_UNSAFE_RAW`
81 - PHP8.1 compliance: remove duplicated public properties declaration
82 - PHP8.1 compliance: add support for fputcsv `$eol` argument
83
84 ### Removed
85
86 - None
87
88 ## [9.7.1] - 2021-04-17
89
90 ### Added
91
92 - None
93
94 ### Deprecated
95
96 - None
97
98 ### Fixed
99
100 - fix writer filter [](https://github.com/thephpleague/csv/pull/421#421](https://github.com/thephpleague/csv/pull/421](https://github.com/thephpleague/csv/pull/421) by [](https://github.com/cpj555LosingBattle](https://github.com/cpj555](https://github.com/cpj555)
101
102 ### Removed
103
104 - None
105
106 ## [9.7.0] - 2021-03-26
107
108 ### Added
109
110 - `League\Csv\SyntaxError::duplicateColumnNames` to expose column name duplicates during header usage
111 - `League\Csv\UnableToProcessCsv` as the new Exception Marker Interface
112 - `League\Csv\UnavailableStream` as the new Exception
113 - `League\Csv\Info::getDelimiterStats` to replace the namespace function `delimiter_detect`
114 - `League\Csv\Info::fetchBOMSequence` to replace the namespace function `bom_match`
115 - `League\Csv\AbstractCsv::toString` to replace `League\Csv\AbstractCsv::getContent` and `League\Csv\AbstractCsv::__toString`
116 - `League\Csv\XMLConverter::create` to replace `League\Csv\XMLConverter::__construct`
117 - `League\Csv\HTMLConverter::create` to replace `League\Csv\HTMLConverter::__construct`
118 - `League\Csv\AbstractCsv::supportsStreamFilterOnRead` and `League\Csv\AbstractCsv::supportsStreamFilterOnWrite` to replace `League\Csv\AbstractCsv::supportsStreamFilter` and `League\Csv\AbstractCsv::getStreamFilterMode`
119
120 ### Deprecated
121
122 - `League\Csv\delimiter_detect` use `League\Csv\Info::getDelimiterStats`
123 - `League\Csv\bom_match` use `League\Csv\Info::fetchBOMSequence`
124 - `League\Csv\AbstractCsv::getContent` use `League\Csv\AbstractCsv::toString`
125 - `League\Csv\AbstractCsv::getStreamFilterMode` use `League\Csv\AbstractCsv::supportsStreamFilterOnRead` or `League\Csv\AbstractCsv::supportsStreamFilterOnWrite`
126 - `League\Csv\AbstractCsv::supportsStreamFilter` use `League\Csv\AbstractCsv::supportsStreamFilterOnRead` or `League\Csv\AbstractCsv::supportsStreamFilterOnWrite`
127 - Calling exceptions constructor, use named constructors instead.
128 - `League\Csv\XMLConverter::__construct` use `League\Csv\XMLConverter::create`
129 - `League\Csv\HTMLConverter::__construct` use `League\Csv\HTMLConverter::create`
130
131 ### Fixed
132
133 - Move tests into the `src` directory
134 - Fixed encoder method resolver implementation
135 - all classes marked as `@internal` are now final
136 - `League\Csv\AbstractCsv::STREAM_FILTER_MODE` constant replaces `League\Csv\AbstractCsv::$stream_filter_mode`
137
138 ### Removed
139
140 - PHP7.2 support
141 - `League\Csv\AbstractCsv::$stream_filter_mode`
142
143 ## [9.6.2] - 2020-12-10
144
145 ### Added
146
147 - Using Github actions as development tools.
148
149 ### Deprecated
150
151 - None
152
153 ### Fixed
154
155 - Adding official support for PHP8 [](https://github.com/thephpleague/csv/pull/405#405](https://github.com/thephpleague/csv/pull/405](https://github.com/thephpleague/csv/pull/405) and [](https://github.com/thephpleague/csv/pull/406#406](https://github.com/thephpleague/csv/pull/406](https://github.com/thephpleague/csv/pull/406) by [](https://github.com/IonBazanIon Bazan](https://github.com/IonBazan](https://github.com/IonBazan)
156
157 ### Removed
158
159 - Removing Travis and Scrutinizr as development tools
160
161 ## [9.6.1] - 2020-09-05
162
163 ### Added
164
165 - None
166
167 ### Deprecated
168
169 - None
170
171 ### Fixed
172
173 - BOM sequence processing fix [](https://github.com/thephpleague/csv/issues/394#394](https://github.com/thephpleague/csv/issues/394](https://github.com/thephpleague/csv/issues/394)
174
175 ### Removed
176
177 - None
178
179 ## [9.6.0] - 2020-03-17
180
181 ### Added
182
183 - More return types and type parameters as supported in PHP7.2+
184 - `League\Csv\Statement::create` named constructor to ease constraint builder instantiation
185 - `League\Csv\Statement` can now also process `League\Csv\ResultSet` instances.
186 - `League\Csv\TabularDataReader` interface to represent how to read tabular data
187 - `League\Csv\ResultSet::getRecords` has an optional `$header` second argument to make the method works like `League\Csv\Reader::getRecords`
188 - `League\Csv\ResultSet::createFromTabularDataReader` create a new instance from `League\Csv\TabularDataReader` implementing class.
189
190 ### Deprecated
191
192 - Nothing
193
194 ### Fixed
195
196 - `League\Csv\Reader` no longer uses `__call` to implement `fetchOne`, `fetchPairs` and `fetchColumn` methods.
197
198 ### Removed
199
200 - Internal polyfill for `is_iterable`
201 - Internal polyfill for `is_nullable_int`
202 - Support for PHP7.0 and PHP7.1
203
204 ## [9.5.0] - 2019-12-15
205
206 ### Added
207
208 - Improve package exception throwing by adding new exceptions classes that extends
209 the `League\Csv\Exception` exception marker class [](https://github.com/thephpleague/csv/issues/360#360](https://github.com/thephpleague/csv/issues/360](https://github.com/thephpleague/csv/issues/360), [](https://github.com/thephpleague/csv/issues/360#361](https://github.com/thephpleague/csv/issues/360](https://github.com/thephpleague/csv/issues/360)
210 feature proposed and developed by [](https://github.com/dmlogicDarren Miller](https://github.com/dmlogic](https://github.com/dmlogic)
211 - `League\Csv\UnavailableFeature`
212 - `League\Csv\InvalidArgument`
213 - `League\Csv\SyntaxError`
214
215 ### Deprecated
216
217 - Nothing
218
219 ### Fixed
220
221 - bug fix `bom_match` function see issue [](https://github.com/thephpleague/csv/issues/363#363](https://github.com/thephpleague/csv/issues/363](https://github.com/thephpleague/csv/issues/363) resolved based on PR from [](https://github.com/jmwebservicesJerry Martinez](https://github.com/jmwebservices](https://github.com/jmwebservices)
222 - bug fix `delemiter_detect` function see issue [](https://github.com/thephpleague/csv/issues/366#366](https://github.com/thephpleague/csv/issues/366](https://github.com/thephpleague/csv/issues/366)
223
224 ### Removed
225
226 - Nothing
227
228 ## [9.4.1] - 2019-10-17
229
230 ### Added
231
232 - Nothing
233
234 ### Deprecated
235
236 - Nothing
237
238 ### Fixed
239
240 - bug fix the escape mechanism polyfill [](https://github.com/thephpleague/csv/pull/358#358](https://github.com/thephpleague/csv/pull/358](https://github.com/thephpleague/csv/pull/358) fix provided by [](https://github.com/on2on2](https://github.com/on2](https://github.com/on2)
241
242 ### Removed
243
244 - Nothing
245
246 ## [9.4.0] - 2019-10-02
247
248 ### Added
249
250 - Adding support for controlling empty record presence in `Reader::getRecords` return value.
251 - `Reader::includeEmptyRecords`
252 - `Reader::skipEmptyRecords`
253 - `Reader::isEmptyRecordsIncluded`
254
255 - Adding support for controlling Input BOM usage in the library:
256 - `AbstractCsv::skipInputBOM`
257 - `AbstractCsv::includeInputBOM`
258 - `AbstractCsv::isInputBOMIncluded`
259
260 ### Deprecated
261
262 - Nothing
263
264 ### Fixed
265
266 - `EmptyEscapeParser::parse` no longer auto skip empty records
267
268 ### Removed
269
270 - Nothing
271
272 ## [9.3.0] - 2019-07-30
273
274 ### Added
275
276 - `XMLConverter::import` see [](https://github.com/thephpleague/csv/pull/348#348](https://github.com/thephpleague/csv/pull/348](https://github.com/thephpleague/csv/pull/348) thanks [](https://github.com/kusabi@kusabi](https://github.com/kusabi](https://github.com/kusabi)
277 - Support for `thead`, `tfoot` and `tbody` in `HTMLConverter::convert` via the addition of
278 protected methods `HTMLConverter::addHTMLAttributes` and `HTMLConverter::appendHeaderSection` [](https://github.com/thephpleague/csv/pull/348#348](https://github.com/thephpleague/csv/pull/348](https://github.com/thephpleague/csv/pull/348) thanks [](https://github.com/kusabi@kusabi](https://github.com/kusabi](https://github.com/kusabi)
279
280 ### Deprecated
281
282 - Nothing
283
284 ### Fixed
285
286 - Internal improvement in `Reader` dockblock thanks [](https://github.com/ghobaty@ghobaty](https://github.com/ghobaty](https://github.com/ghobaty).
287 - Improve strict comparison when using `preg_match`.
288 - Improve CSV control in `Stream`.
289
290 ### Removed
291
292 - Nothing
293
294 ## [9.2.1] - 2019-06-08
295
296 ### Added
297
298 - Nothing
299
300 ### Deprecated
301
302 - Nothing
303
304 ### Fixed
305
306 - `AbstractCSV::chunk` see [](https://github.com/thephpleague/csv/pull/325#325](https://github.com/thephpleague/csv/pull/325](https://github.com/thephpleague/csv/pull/325) remove CSV flags from the Stream class to avoid infinite loop.
307 - Internal improve `HTMLConverter`.
308
309 ### Removed
310
311 - Nothing
312
313 ## [9.2.0] - 2019-03-08
314
315 ### Added
316
317 - Supports for PHP7.4 empty string for the escape character
318 - Supports for empty string for the escape character with a polyfill for PHP7.4- versions.
319 - `AbstractCSV::getPathname` see [](https://github.com/thephpleague/csv/pull/321#321](https://github.com/thephpleague/csv/pull/321](https://github.com/thephpleague/csv/pull/321) thanks [](https://github.com/tomkyle@tomkyle](https://github.com/tomkyle](https://github.com/tomkyle)
320
321 ### Deprecated
322
323 - `League\Csv\RFC4180Field` use `AbstractCSV::setEscape` method with an empty string instead.
324
325 ### Fixed
326
327 - `AbstractCSV::__construct` correctly initializes properties
328 - `AbstractCSV::createFromString` named constructor default argument is now the empty string
329 - `AbstractCSV::setEscape` now accepts the empty string like `fputcsv` and `fgetcsv`
330 - `Writer::insertOne` fixes throwing exception when record can not be inserted
331 - `XMLConverter` convert to string the record value to avoid PHP warning on `null` value
332 - Internal `Stream::createFromString` named constructor default argument is now the empty string
333 - Internal `Stream::fwrite` improved
334 - Internal `Stream::__destruct` no longer emit warning on invalid stream filter removal.
335 - Internal `Stream::seek` returns `0` if the seeked position `0` is valid see [](https://github.com/thephpleague/csv/pull/332#321](https://github.com/thephpleague/csv/pull/332](https://github.com/thephpleague/csv/pull/332) thanks [](https://github.com/HaozhouChen@HaozhouChen](https://github.com/HaozhouChen](https://github.com/HaozhouChen)
336
337 - `Reader:getHeader` when the record is an empty line.
338
339 ### Removed
340
341 - Nothing
342
343 ## [9.1.4] - 2018-05-01
344
345 ### Added
346
347 - Nothing
348
349 ### Deprecated
350
351 - Nothing
352
353 ### Fixed
354
355 - `Writer::setFlushThreshold` should accept 1 as an argument [](https://github.com/thephpleague/csv/issue/289#289](https://github.com/thephpleague/csv/issue/289](https://github.com/thephpleague/csv/issue/289)
356 - `CharsetConverter::convert` should not try to convert numeric value [](https://github.com/thephpleague/csv/issue/287#287](https://github.com/thephpleague/csv/issue/287](https://github.com/thephpleague/csv/issue/287)
357
358 ### Removed
359
360 - Nothing
361
362 ## [9.1.3] - 2018-03-12
363
364 ### Added
365
366 - Nothing
367
368 ### Deprecated
369
370 - Nothing
371
372 ### Fixed
373
374 - `Writer::insertOne` allow empty array to be added to the CSV (allow inserting empty row)
375 - Removed all return type from named constructor see [](https://github.com/thephpleague/csv/pull/285#285](https://github.com/thephpleague/csv/pull/285](https://github.com/thephpleague/csv/pull/285)
376 - Added PHPStan for static code analysis
377
378 ### Removed
379
380 - Nothing
381
382 ## [9.1.2] - 2018-02-05
383
384 ### Added
385
386 - Nothing
387
388 ### Deprecated
389
390 - Nothing
391
392 ### Fixed
393
394 - `is_iterable` polyfill for PHP7.0
395 - `Reader::getHeader` no longer throws exception because of a bug in PHP7.2+ [](https://github.com/thephpleague/csv/issues/279issue #279](https://github.com/thephpleague/csv/issues/279](https://github.com/thephpleague/csv/issues/279)
396
397 ### Removed
398
399 - Nothing
400
401 ## [9.1.1] - 2017-11-28
402
403 ### Added
404
405 - Nothing
406
407 ### Deprecated
408
409 - Nothing
410
411 ### Fixed
412
413 - issue with `error_get_last` usage when using a modified PHP error handler see [](https://github.com/thephpleague/csv/issues/254#254](https://github.com/thephpleague/csv/issues/254](https://github.com/thephpleague/csv/issues/254) - fixed by [](https://github.com/csiszarattila@csiszarattila](https://github.com/csiszarattila](https://github.com/csiszarattila)
414
415 - Removed seekable word from Stream exception messages.
416
417 ### Removed
418
419 - Nothing
420
421 ## [9.1.0] - 2017-10-20
422
423 ### Added
424
425 - Support for non seekable stream. When seekable feature are required an exceptions will be thrown.
426 - `League\Csv\EncloseField` to force enclosure insertion on every field. [](https://github.com/thephpleague/csv/pull/269#269](https://github.com/thephpleague/csv/pull/269](https://github.com/thephpleague/csv/pull/269)
427 - `League\Csv\EscapeFormula` a League CSV formatter to prevent CSV Formula Injection in Spreadsheet programs.
428 - `League\Csv\RFC4180Field::addTo` accept an option `$replace_whitespace` argument to improve RFC4180 compliance.
429 - `League\Csv\Abstract::getContent` to replace `League\Csv\Abstract::__toString`. The `__toString` method may trigger a Fatal Error with non seekable stream, instead you are recommended to used the new `getContent` method which will trigger an exception instead.
430
431 ### Deprecated
432
433 - `League\Csv\Abstract::__toString` use `League\Csv\Abstract::getContent` instead. the `__toString` triggers a Fatal Error when used on a non-seekable CSV document. use the `getContent` method instead which will trigger an exception instead.
434
435 ### Fixed
436
437 - Bug fixes headers from AbstractCsv::output according to RFC6266 [](https://github.com/thephpleague/csv/issues/250#250](https://github.com/thephpleague/csv/issues/250](https://github.com/thephpleague/csv/issues/250)
438 - Make sure the internal source still exists before closing it [](https://github.com/thephpleague/csv/issues/251#251](https://github.com/thephpleague/csv/issues/251](https://github.com/thephpleague/csv/issues/251)
439 - Make sure the `Reader::createFromPath` default open mode is `r` see [](https://github.com/thephpleague/csv/pull/258#258](https://github.com/thephpleague/csv/pull/258](https://github.com/thephpleague/csv/pull/258) and [](https://github.com/thephpleague/csv/pull/266#266](https://github.com/thephpleague/csv/pull/266](https://github.com/thephpleague/csv/pull/266)
440
441 ### Removed
442
443 - Nothing
444
445 ## [9.0.1] - 2017-08-21
446
447 ### Added
448
449 - Nothing
450
451 ### Deprecated
452
453 - Nothing
454
455 ### Fixed
456
457 - CSV controls not applied when calling Writer::insertOne
458
459 ### Removed
460
461 - Nothing
462
463 ## [9.0.0] - 2017-08-18
464
465 ### Added
466
467 - Improved CSV Records selection
468 - `League\Csv\Reader::getRecords` to access all CSV records
469 - `League\Csv\Statement` provides a constraint builder to select CSV records.
470 - `League\Csv\ResultSet` represents the result set of the selected CSV records.
471 - `League\Csv\delimiter_detect` function to detect CSV delimiter character
472 - Improved CSV document header selection.
473 - `League\Csv\Reader::getHeader`
474 - `League\Csv\Reader::getHeaderOffset`
475 - `League\Csv\Reader::setHeaderOffset`
476 - Improved CSV Records conversion
477 - `League\Csv\CharsetConverter` converts CSV records charset.
478 - `League\Csv\XMLConverter` converts CSV records into DOMDocument
479 - `League\Csv\HTMLConverter` converts CSV records into HTML table.
480 - Improved Exception handling
481 - `League\Csv\Exception` the default exception
482 - `League\Csv\CannotInsertRecord`
483 - Improved CSV document output
484 - `League\Csv\AbstractCsv::chunk` method to output the CSV document in chunk
485 - `League\Csv\bom_match` function to detect BOM sequence in a given string
486 - `League\Csv\ByteSequence` interface to decoupled BOM sequence from CSV documents
487 - Improved CSV records column count consistency on insertion
488 - `League\Csv\ColumnConsistency`
489 - Improved CSV document flush mechanism on insertion
490 - `League\Csv\Writer::setFlushThreshold`
491 - `League\Csv\Writer::getFlushThreshold`
492 - Improve RFC4180 compliance
493 - `League\Csv\RFC4180Field` to format field according to RFC4180 rules
494
495 ### Deprecated
496
497 - Nothing
498
499 ### Fixed
500
501 - Improved CSV record insertion
502 - `League\Csv\Writer::insertOne` only accepts an array and returns a integer
503 - `League\Csv\Writer::insertAll` only accepts an iterable of array and returns an integer
504
505 - Normalized CSV offset returned value
506 - `League\Csv\Reader::fetchColumn` always returns the CSV document original offset.
507
508 ### Removed
509
510 - `examples` directory
511 - `PHP5` support
512 - The following method is removed because The BOM API is simplified:
513 - `League\Csv\AbstractCsv::stripBOM`
514 - All conversion methods are removed in favor of the conversion classes:
515 - `League\Csv\Writer::jsonSerialize`
516 - `League\Csv\AbstractCsv::toHTML`
517 - `League\Csv\AbstractCsv::toXML`
518 - `League\Csv\AbstractCsv::setInputEncoding`
519 - `League\Csv\AbstractCsv::getInputEncoding`
520 - The following methods are removed because the PHP stream filter API is simplified:
521 - `League\Csv\AbstractCsv::isActiveStreamFilter`
522 - `League\Csv\AbstractCsv::setStreamFilterMode`
523 - `League\Csv\AbstractCsv::appendStreamFilter`
524 - `League\Csv\AbstractCsv::prependStreamFilter`
525 - `League\Csv\AbstractCsv::removeStreamFilter`
526 - `League\Csv\AbstractCsv::clearStreamFilters`
527 - The following methods are removed because switching between connections is no longer possible:
528 - `League\Csv\AbstractCsv::newReader`
529 - `League\Csv\AbstractCsv::newWriter`
530 - `League\Csv\Reader::getNewline`
531 - `League\Csv\Reader::setNewline`
532 - The Exception mechanism is improved thus the following class is removed:
533 - `League\Csv\Exception\InvalidRowException`;
534 - The CSV records filtering methods are removed in favor of the `League\Csv\Statement` class:
535 - `League\Csv\AbstractCsv::addFilter`,
536 - `League\Csv\AbstractCsv::addSortBy`,
537 - `League\Csv\AbstractCsv::setOffset`,
538 - `League\Csv\AbstractCsv::setLimit`;
539 - CSV records selecting API methods is simplified:
540 - `League\Csv\Reader::each`
541 - `League\Csv\Reader::fetch`
542 - `League\Csv\Reader::fetchAll`
543 - `League\Csv\Reader::fetchAssoc`
544 - `League\Csv\Reader::fetchPairsWithoutDuplicates`
545 - Formatting and validating CSV records on insertion is simplified, the following methods are removed:
546 - `League\Csv\Writer::hasFormatter`
547 - `League\Csv\Writer::removeFormatter`
548 - `League\Csv\Writer::clearFormatters`
549 - `League\Csv\Writer::hasValidator`
550 - `League\Csv\Writer::removeValidator`
551 - `League\Csv\Writer::clearValidators`
552 - `League\Csv\Writer::getIterator`
553 - The following Formatters and Validators classes are removed from the package:
554 - `League\Csv\Plugin\SkipNullValuesFormatter`
555 - `League\Csv\Plugin\ForbiddenNullValuesValidator`
556 - `League\Csv\Plugin\ColumnConsistencyValidator` *replace by `League\Csv\ColumnConsistency`*
557 - `League\Csv\Writer` no longers implements the `IteratorAggregate` interface
558 - `League\Csv\AbstractCsv::fetchDelimitersOccurrence` is removed *replace by `League\Csv\delimiter_detect` function*
559
560 ## 8.2.2 - 2017-07-12
561
562 ### Added
563
564 - None
565
566 ### Deprecated
567
568 - None
569
570 ### Fixed
571
572 - `Writer::insertOne` was silently failing when inserting record in a CSV document in non-writing mode.
573 - bug fix docblock
574
575 ### Removed
576
577 - None
578
579 ## 8.2.1 - 2017-02-22
580
581 ### Added
582
583 - Nothing
584
585 ### Deprecated
586
587 - Nothing
588
589 ### Fixed
590
591 - internal `Reader::getRow` when using a `StreamIterator` [](https://github.com/thephpleague/csv/issues/213issue #213](https://github.com/thephpleague/csv/issues/213](https://github.com/thephpleague/csv/issues/213)
592 - Removed `@deprecated` from selected methods [](https://github.com/thephpleague/csv/issues/213issue #208](https://github.com/thephpleague/csv/issues/213](https://github.com/thephpleague/csv/issues/213)
593
594 ### Removed
595
596 - Nothing
597
598 ## 8.2.0 - 2017-01-25
599
600 ### Added
601
602 - `AbstractCsv::createFromStream` to enable working with resource stream [](https://github.com/thephpleague/csv/issues/202issue #202](https://github.com/thephpleague/csv/issues/202](https://github.com/thephpleague/csv/issues/202)
603
604 ### Deprecated
605
606 - `League\Csv\AbstractCsv::stripBom`
607 - `League\Csv\Reader::getOffset`
608 - `League\Csv\Reader::getLimit`
609 - `League\Csv\Reader::getSortBy`
610 - `League\Csv\Reader::getFilter`
611 - `League\Csv\Reader::setOffset`
612 - `League\Csv\Reader::setLimit`
613 - `League\Csv\Reader::addSortBy`
614 - `League\Csv\Reader::addFilter`
615 - `League\Csv\Reader::fetch`
616 - `League\Csv\Reader::each`
617 - `League\Csv\Reader::fetchPairsWithoutDuplicates`
618 - `League\Csv\Reader::fetchAssoc`
619 - `League\Csv\Writer::removeFormatter`
620 - `League\Csv\Writer::hasFormatter`
621 - `League\Csv\Writer::clearFormatters`
622 - `League\Csv\Writer::removeValidator`
623 - `League\Csv\Writer::hasValidator`
624 - `League\Csv\Writer::clearValidators`
625 - `League\Csv\Writer::jsonSerialize`
626 - `League\Csv\Writer::toHTML`
627 - `League\Csv\Writer::toXML`
628
629 ### Fixed
630
631 - Nothing
632
633 ### Removed
634
635 - Nothing
636
637 ## 8.1.2 - 2016-10-27
638
639 ### Added
640
641 - Nothing
642
643 ### Deprecated
644
645 - Nothing
646
647 ### Fixed
648
649 - BOM filtering fix [](https://github.com/thephpleague/csv/issues/184issue #184](https://github.com/thephpleague/csv/issues/184](https://github.com/thephpleague/csv/issues/184)
650 - `AbstractCsv::BOM_UTF32_LE` value fixed
651
652 ### Removed
653
654 - Nothing
655
656 ## 8.1.1 - 2016-09-05
657
658 ### Added
659
660 - Nothing
661
662 ### Deprecated
663
664 - Nothing
665
666 ### Fixed
667
668 - `getInputBOM` method name is now consistent everywhere in the API [](https://github.com/thephpleague/csv/pull/171PR #171](https://github.com/thephpleague/csv/pull/171](https://github.com/thephpleague/csv/pull/171)
669 - preserve fileObject CSV controls [](https://github.com/thephpleague/csv/commit/8a20c56144effa552a8cba5d8c626063222975b7commit #8a20c56](https://github.com/thephpleague/csv/commit/8a20c56144effa552a8cba5d8c626063222975b7](https://github.com/thephpleague/csv/commit/8a20c56144effa552a8cba5d8c626063222975b7)
670 - Change `output` method header content-type value to `text/csv` [](https://github.com/thephpleague/csv/pull/175PR #175](https://github.com/thephpleague/csv/pull/175](https://github.com/thephpleague/csv/pull/175)
671
672 ### Removed
673
674 - Nothing
675
676 ## 8.1.0 - 2016-05-31
677
678 ### Added
679
680 - The package now includes its own autoloader.
681 - `Ouput::getInputEncoding`
682 - `Ouput::setInputEncoding`
683
684 ### Deprecated
685
686 - `Ouput::getEncodingFrom` replaced by `Ouput::getInputEncoding`
687 - `Ouput::setEncodingFrom` replaced by `Ouput::setInputEncoding`
688
689 ### Fixed
690
691 - Stream Filters are now url encoded before usage [](https://github.com/thephpleague/csv/issues/72issue #72](https://github.com/thephpleague/csv/issues/72](https://github.com/thephpleague/csv/issues/72)
692 - All internal parameters are now using the snake case format
693
694 ### Removed
695
696 - Nothing
697
698 ## 8.0.0 - 2015-12-11
699
700 ### Added
701
702 - `Reader::fetchPairs`
703 - `Reader::fetchPairsWithoutDuplicates`
704
705 ### Deprecated
706
707 - Nothing
708
709 ### Fixed
710
711 - `Reader::fetchColumn` and `Reader::fetchAssoc` now return `Iterator`
712 - `Reader::fetchAssoc` callable argument expects an indexed row using the submitted keys as its first argument
713 - `Reader::fetchColumn` callable argument expects the selected column value as its first argument
714 - Default value on `setOutputBOM` is removed
715 - `AbstractCsv::getOutputBOM` always return a string
716 - `AbstractCsv::getInputBOM` always return a string
717
718 ### Removed
719
720 - `Controls::setFlags`
721 - `Controls::getFlags`
722 - `Controls::detectDelimiterList`
723 - `QueryFilter::removeFilter`
724 - `QueryFilter::removeSortBy`
725 - `QueryFilter::hasFilter`
726 - `QueryFilter::hasSortBy`
727 - `QueryFilter::clearFilter`
728 - `QueryFilter::clearSortBy`
729 - `Reader::query`
730 - The `$newline` argument from `AbstractCsv::createFromString`
731
732 ## 7.2.0 - 2015-11-02
733
734 ### Added
735
736 - `Reader::fetch` replaces `League\Csv\Reader::query` for naming consistency
737 - `Controls::fetchDelimitersOccurrence` to replace `Controls::detectDelimiterList` the latter gives erronous results
738
739 ### Deprecated
740
741 - `Controls::detectDelimiterList`
742 - `Reader::query`
743 - The `$newline` argument from `AbstractCsv::createFromString`
744
745 ### Fixed
746
747 - Streamming feature no longer trim filter name argument [](https://github.com/thephpleague/csv/issues/122issue #122](https://github.com/thephpleague/csv/issues/122](https://github.com/thephpleague/csv/issues/122)
748 - Fix default `SplFileObject` flags usage [](https://github.com/thephpleague/csv/pull/130PR #130](https://github.com/thephpleague/csv/pull/130](https://github.com/thephpleague/csv/pull/130)
749 - `AbstractCsv::createFromString` no longer trim the submitted string [](https://github.com/thephpleague/csv/issues/132issue #132](https://github.com/thephpleague/csv/issues/132](https://github.com/thephpleague/csv/issues/132)
750
751 ### Removed
752
753 - Nothing
754
755 ## 7.1.2 - 2015-06-10
756
757 ### Added
758
759 - Nothing
760
761 ### Deprecated
762
763 - Nothing
764
765 ### Fixed
766
767 - Enclosures should be removed when a BOM sequence is stripped [](http://github.com/thephpleague/csv/issues/99issue #102](http://github.com/thephpleague/csv/issues/99](http://github.com/thephpleague/csv/issues/99)
768
769 ### Removed
770
771 - Nothing
772
773 ## 7.1.1 - 2015-05-20
774
775 ### Added
776
777 - Nothing
778
779 ### Deprecated
780
781 - Nothing
782
783 ### Fixed
784
785 - `SplFileObject` flags were not always applied using query filter [](http://github.com/thephpleague/csv/issues/99issue #99](http://github.com/thephpleague/csv/issues/99](http://github.com/thephpleague/csv/issues/99)
786
787 ### Removed
788
789 - Nothing
790
791 ## 7.1.0 - 2015-05-06
792
793 ### Added
794
795 - `stripBOM` query filtering method to ease removing the BOM sequence when querying the CSV document.
796 - All query filters are now accessible in the `Writer` class for conversion methods.
797
798 ### Deprecated
799
800 - Nothing
801
802 ### Fixed
803
804 - Internal code has been updated to take into account [](http://bugs.php.net/68479issue #68479](http://bugs.php.net/68479](http://bugs.php.net/68479)
805 - `setFlags` on conversion methods SplFileObject default flags are `SplFileObject::READ_AHEAD|SplFileObject::SKIP_EMPTY`
806 - `insertOne` now takes into account the escape character when modified after the first insert.
807
808 ### Removed
809
810 - Nothing
811
812 ## 7.0.1 - 2015-03-23
813
814 ### Added
815
816 - Nothing
817
818 ### Deprecated
819
820 - Nothing
821
822 ### Fixed
823
824 - `setFlags`: `SplFileObject::DROP_NEW_LINE` can be remove using `setFlags` method.
825
826 ### Removed
827
828 - Nothing
829
830 ## 7.0.0 - 2015-02-19
831
832 ### Added
833
834 - A new flexible mechanism to format and validate a row before its insertion by adding
835 - `Writer::addFormatter` to add a formatter to the `Writer` object
836 - `Writer::removeFormatter` to remove an already registered formatter
837 - `Writer::hasFormatter` to detect the presence of a formatter
838 - `Writer::clearFormatters` to clear all registered formatter
839 - `Writer::addValidator` to add a validator to the `Writer` object
840 - `Writer::removeValidator` to remove an already registered validator
841 - `Writer::hasValidator` to detect the presence of a validator
842 - `Writer::clearValidators` to clear all registered validator
843 - `League\Csv\Exception\InvalidRowException` exception thrown when row validation failed
844 - Classes to maintain removed features from the `Writer` class
845 - `League\Csv\Plugin\ColumnConsistencyValidator` to validate column consistency on insertion
846 - `League\Csv\Plugin\ForbiddenNullValuesValidator` to validate `null` value on insertion
847 - `League\Csv\Plugin\SkipNullValuesFormatter` to format `null` value on insertion
848
849 ### Deprecated
850
851 - Nothing
852
853 ### Fixed
854
855 - `jsonSerialize`, `toXML` and `toHTML` output can be modified using `Reader` query options methods.
856 - `AbstractCSV::detectDelimiterList` index keys now represents the occurrence of the found delimiter.
857 - `getNewline` and `setNewline` are accessible on the `Reader` class too.
858 - the named constructor `createFromString` now accepts the `$newline` sequence as a second argument to specify the last added new line character to better work with interoperability.
859 - Default value on CSV controls setter methods `setDelimiter`, `setEnclosure` and `setEscape` are removed
860 - Default `SplFileObject` flags value is now `SplFileObject::READ_CSV|SplFileObject::DROP_NEW_LINE`
861 - All CSV properties are now copied when using `newReader` and `newWriter` methods
862 - BOM addition on output improved by removing if found the existing BOM character
863 - the `AbstractCSV::output` method now returns the number of bytes send to the output buffer
864 - `Reader::fetchColumn` will automatically filter out non existing values from the return array
865
866 ### Removed
867
868 - Setting `ini_set("auto_detect_line_endings", true);` is no longer set in the class constructor. Mac OS X users must explicitly set this ini options in their script.
869 - `Writer` and `Reader` default constructor are removed from public API in favor of the named constructors.
870 - All `Writer` methods and constant related to CSV data validation and formatting before insertion
871 - `Writer::getNullHandlingMode`
872 - `Writer::setNullHandlingMode`
873 - `Writer::setColumnsCount`
874 - `Writer::getColumnsCount`
875 - `Writer::autodetectColumnsCount`
876 - `Writer::NULL_AS_EXCEPTION`
877 - `Writer::NULL_AS_EMPTY`
878 - `Writer::NULL_AS_SKIP_CELL`
879
880 ## 6.3.0 - 2015-01-21
881
882 ### Added
883
884 - `AbstractCSV::setOutputBOM`
885 - `AbstractCSV::getOutputBOM`
886 - `AbstractCSV::getInputBOM`
887
888 to manage BOM character with CSV.
889
890 ### Deprecated
891
892 - Nothing
893
894 ### Fixed
895
896 - Nothing
897
898 ### Removed
899
900 - Nothing
901
902 ## 6.2.0 - 2014-12-12
903
904 ### Added
905
906 - `Writer::setNewline` , `Writer::getNewline` to control the newline sequence character added at the end of each CSV row.
907
908 ### Deprecated
909
910 - Nothing
911
912 ### Fixed
913
914 - Nothing
915
916 ### Removed
917
918 - Nothing
919
920 ## 6.1.0 - 2014-12-08
921
922 ### Added
923
924 - `Reader::fetchAssoc` now also accepts an integer as first argument representing a row index.
925
926 ### Deprecated
927
928 - Nothing
929
930 ### Fixed
931
932 - Nothing
933
934 ### Removed
935
936 - Nothing
937
938 ## 6.0.1 - 2014-11-12
939
940 ### Added
941
942 - Nothing
943
944 ### Deprecated
945
946 - Nothing
947
948 ### Fixed
949
950 - Bug Fixed `detectDelimiterList`
951
952 ### Removed
953
954 - Nothing
955
956 ## 6.0.0 - 2014-08-28
957
958 ### Added
959
960 - Stream Filter API in `League\Csv\AbstractCsv`
961 - named constructors `createFromPath` and `createFromFileObject` in `League\Csv\AbstractCsv` to ease CSV object instantiation
962 - `detectDelimiterList` in `League\Csv\AbstractCsv` to replace and remove the use of `RuntimeException` in `detectDelimiter`
963 - `setEncodingFrom` and `setDecodingFrom` in `League\Csv\AbstractCsv` to replace `setEncoding` and `getEncoding` for naming consistency
964 - `newWriter` and `newReader` methods in `League\Csv\AbstractCsv` to replace `Writer::getReader` and `Reader::getWriter`
965
966 ### Deprecated
967
968 - Nothing
969
970 ### Fixed
971
972 - `League\Csv\Reader::each` more strict `$callable` MUST returns `true`
973
974 ### Remove
975
976 - `League\Csv\AbstractCsv::detectDelimiter`
977 - `League\Csv\AbstractCsv::setEncoding` and `League\Csv\AbstractCsv::getEncoding`
978 - `League\Csv\Reader::setSortBy`
979 - `League\Csv\Reader::setFilter`
980 - `League\Csv\Reader::getWriter`
981 - `League\Csv\Writer::getReader`
982 - `League\Csv\Reader::fetchCol`
983
984 ## 5.4.0 - 2014-04-17
985
986 ### Added
987
988 - `League\Csv\Writer::setColumnsCount`, `League\Csv\Writer::getColumnsCount`, `League\Csv\Writer::autodetectColumnsCount` to enable column consistency in writer mode
989 - `League\Csv\Reader::fetchColumn` replaces `League\Csv\Reader::fetchCol` for naming consistency
990
991 ### Deprecated
992
993 - `League\Csv\Reader::fetchCol`
994
995 ### Fixed
996
997 - Nothing
998
999 ### Removed
1000
1001 - Nothing
1002
1003 ## 5.3.1 - 2014-04-09
1004
1005 ### Added
1006
1007 - Nothing
1008
1009 ### Deprecated
1010
1011 - Nothing
1012
1013 ### Fixed
1014
1015 - `$open_mode` default to `r+` in `League\Csv\AbstractCsv` constructors
1016
1017 ### Removed
1018
1019 - Nothing
1020
1021 ## 5.3.0 - 2014-03-24
1022
1023 ### Added
1024
1025 - `League\Csv\Writer::setNullHandlingMode` and `League\Csv\Writer::getNullHandlingMode` to handle `null` value
1026
1027 ### Deprecated
1028
1029 - Nothing
1030
1031 ### Fixed
1032
1033 - `setting ini_set("auto_detect_line_endings", true);` no longer needed for Mac OS
1034
1035 ### Removed
1036
1037 - Nothing
1038
1039 ## 5.2.0 - 2014-03-13
1040
1041 ### Added
1042
1043 - `League\Csv\Reader::addSortBy`, `League\Csv\Reader::removeSortBy`, `League\Csv\Reader::hasSortBy`, `League\Csv\Reader::clearSortBy` to improve sorting
1044 - `League\Csv\Reader::clearFilter` to align extract filter capabilities to sorting capabilities
1045
1046 ### Deprecated
1047
1048 - `League\Csv\Reader::setSortBy` replaced by a better implementation
1049
1050 ### Fixed
1051
1052 - `League\Csv\Reader::setOffset` now default to 0;
1053 - `League\Csv\Reader::setLimit` now default to -1;
1054 - `detectDelimiter` bug fixes
1055
1056 ### Removed
1057
1058 - Nothing
1059
1060 ## 5.1.0 - 2014-03-11
1061
1062 ### Added
1063
1064 - `League\Csv\Reader::each` to ease CSV import data
1065 - `League\Csv\Reader::addFilter`, `League\Csv\Reader::removeFilter`, `League\Csv\Reader::hasFilter` to improve extract filter capabilities
1066 - `detectDelimiter` method to `League\Csv\AbstractCsv` to sniff CSV delimiter character.
1067
1068 ### Deprecated
1069
1070 - `League\Csv\Reader::setFilter` replaced by a better implementation
1071
1072 ### Fixed
1073
1074 - Nothing
1075
1076 ### Removed
1077
1078 - Nothing
1079
1080 ## 5.0.0 - 2014-02-28
1081
1082 ### Added
1083
1084 - Change namespace from `Bakame\Csv` to `League\Csv`
1085
1086 ### Deprecated
1087
1088 - Nothing
1089
1090 ### Fixed
1091
1092 - Nothing
1093
1094 ### Removed
1095
1096 - Nothing
1097
1098 ## 4.2.1 - 2014-02-22
1099
1100 ### Fixed
1101
1102 - `$open_mode` validation is done by PHP internals directly
1103
1104 ### Removed
1105
1106 - Nothing
1107
1108 ## 4.2.0 - 2014-02-17
1109
1110 ### Added
1111
1112 - `toXML` method to transcode the CSV into a XML in `Bakame\Csv\AbstractCsv`
1113
1114 ### Fixed
1115
1116 - `toHTML` method bug in `Bakame\Csv\AbstractCsv`
1117 - `output` method accepts an optional `$filename` argument
1118 - `Bakame\Csv\Reader::fetchCol` default to `$columnIndex = 0`
1119 - `Bakame\Csv\Reader::fetchOne` default to `$offset = 0`
1120
1121 ## 4.1.2 - 2014-02-14
1122
1123 ### Added
1124
1125 - Move from `PSR-0` to `PSR-4` to autoload the library
1126
1127 ## 4.1.1 - 2014-02-14
1128
1129 ### Fixed
1130
1131 - `Bakame\Csv\Reader` methods fixed
1132 - `jsonSerialize` bug fixed
1133
1134 ## 4.1.0 - 2014-02-07
1135
1136 ### Added
1137
1138 - `getEncoding` and `setEncoding` methods to `Bakame\Csv\AbstractCsv`
1139
1140 ### Fixed
1141
1142 - `Bakame\Csv\Writer::insertOne` takes into account CSV controls
1143 - `toHTML` method takes into account encoding
1144
1145 ## 4.0.0 - 2014-02-05
1146
1147 ### Added
1148
1149 - `Bakame\Csv\Writer`
1150 - `Bakame\Csv\Writer` and `Bakame\Csv\Reader` extend `Bakame\Csv\AbstractCsv`
1151
1152 ### Deprecated
1153
1154 - Nothing
1155
1156 ### Fixed
1157
1158 - `Bakame\Csv\Reader::fetchOne` is no longer deprecated
1159 - `Bakame\Csv\Reader::fetchCol` no longer accepts a third parameter `$strict`
1160
1161 ### Removed
1162
1163 - `Bakame\Csv\Codec` now the library is composer of 2 main classes
1164 - `Bakame\Csv\Reader::getFile`
1165 - `Bakame\Csv\Reader::fetchValue`
1166 - `Bakame\Csv\Reader` no longer implements the `ArrayAccess` interface
1167
1168 ## 3.3.0 - 2014-01-28
1169
1170 ### Added
1171
1172 - `Bakame\Csv\Reader` implements `IteratorAggregate` Interface
1173 - `Bakame\Csv\Reader::createFromString` to create a CSV object from a raw string
1174 - `Bakame\Csv\Reader::query` accept an optional `$callable` parameter
1175
1176 ### Deprecated
1177
1178 - `Bakame\Csv\Reader::getFile` in favor of `Bakame\Csv\Reader::getIterator`
1179
1180 ### Removed
1181
1182 - `Bakame\Csv\ReaderInterface` useless interface
1183
1184 ### Fixed
1185
1186 - `Bakame\Csv\Reader::fetch*` `$callable` parameter is normalized to accept an array
1187 - `Bakame\Csv\Reader::fetchCol` accepts a third parameter `$strict`
1188
1189 ## 3.2.0 - 2014-01-16
1190
1191 ### Added
1192
1193 - `Bakame\Csv\Reader` implements the following interfaces `JsonSerializable` and `ArrayAccess`
1194 - `Bakame\Csv\Reader::toHTML` to output the CSV as a HTML table
1195 - `Bakame\Csv\Reader::setFilter`, `Bakame\Csv\Reader::setSortBy`, `Bakame\Csv\Reader::setOffset`, `Bakame\Csv\Reader::setLimit`, `Bakame\Csv\Reader::query` to perform SQL like queries on the CSV content.
1196 - `Bakame\Csv\Codec::setFlags`, `Bakame\Csv\Codec::getFlags`, Bakame\Csv\Codec::__construct : add an optional `$flags` parameter to enable the use of `SplFileObject` constants flags
1197
1198 ### Deprecated
1199
1200 - `Bakame\Csv\Reader::fetchOne` replaced by `Bakame\Csv\Reader::offsetGet`
1201 - `Bakame\Csv\Reader::fetchValue` useless method
1202
1203 ## 3.1.0 - 2014-01-13
1204
1205 ### Added
1206
1207 - `Bakame\Csv\Reader::output` output the CSV data directly in the output buffer
1208 - `Bakame\Csv\Reader::__toString` can be use to echo the raw CSV
1209
1210 ## 3.0.1 - 2014-01-10
1211
1212 ### Fixed
1213
1214 - `Bakame\Csv\Reader::fetchAssoc` when users keys and CSV row data don't have the same length
1215
1216 ## 3.0.0 - 2014-01-10
1217
1218 ### Added
1219
1220 - `Bakame\Csv\ReaderInterface`
1221 - `Bakame\Csv\Reader` class
1222
1223 ### Fixed
1224
1225 - `Bakame\Csv\Codec::loadString`returns a `Bakame\Csv\Reader` object
1226 - `Bakame\Csv\Codec::loadFile` returns a `Bakame\Csv\Reader` object
1227 - `Bakame\Csv\Codec::save` returns a `Bakame\Csv\Reader` object
1228
1229 ## 2.0.0 - 2014-01-09
1230
1231 ### Added
1232
1233 - `Bakame\Csv\CsvCodec` class renamed `Bakame\Csv\Codec`
1234
1235 ### Deprecated
1236
1237 - Nothing
1238
1239 ### Fixed
1240
1241 - Nothing
1242
1243 ### Removed
1244
1245 - `Bakame\Csv\Codec::create` from public API
1246
1247 ## 1.0.0 - 2013-12-03
1248
1249 Initial Release of `Bakame\Csv`
1250
1251 [Next]: https://github.com/thephpleague/csv/compare/9.8.0...master
1252 [9.8.0]: https://github.com/thephpleague/csv/compare/9.7.4...9.8.0
1253 [9.7.4]: https://github.com/thephpleague/csv/compare/9.7.3...9.7.4
1254 [9.7.3]: https://github.com/thephpleague/csv/compare/9.7.2...9.7.3
1255 [9.7.2]: https://github.com/thephpleague/csv/compare/9.7.1...9.7.2
1256 [9.7.1]: https://github.com/thephpleague/csv/compare/9.7.0...9.7.1
1257 [9.7.0]: https://github.com/thephpleague/csv/compare/9.6.2...9.7.0
1258 [9.6.2]: https://github.com/thephpleague/csv/compare/9.6.1...9.6.2
1259 [9.6.1]: https://github.com/thephpleague/csv/compare/9.6.0...9.6.1
1260 [9.6.0]: https://github.com/thephpleague/csv/compare/9.5.0...9.6.0
1261 [9.5.0]: https://github.com/thephpleague/csv/compare/9.4.1...9.5.0
1262 [9.4.1]: https://github.com/thephpleague/csv/compare/9.4.0...9.4.1
1263 [9.4.0]: https://github.com/thephpleague/csv/compare/9.3.0...9.4.0
1264 [9.3.0]: https://github.com/thephpleague/csv/compare/9.2.1...9.3.0
1265 [9.2.1]: https://github.com/thephpleague/csv/compare/9.2.0...9.2.1
1266 [9.2.0]: https://github.com/thephpleague/csv/compare/9.1.4...9.2.0
1267 [9.1.4]: https://github.com/thephpleague/csv/compare/9.1.3...9.1.4
1268 [9.1.3]: https://github.com/thephpleague/csv/compare/9.1.2...9.1.3
1269 [9.1.2]: https://github.com/thephpleague/csv/compare/9.1.1...9.1.2
1270 [9.1.1]: https://github.com/thephpleague/csv/compare/9.1.0...9.1.1
1271 [9.1.0]: https://github.com/thephpleague/csv/compare/9.0.1...9.1.0
1272 [9.0.1]: https://github.com/thephpleague/csv/compare/9.0.0...9.0.1
1273 [9.0.0]: https://github.com/thephpleague/csv/compare/8.2.2...9.0.0
1274