|
| 1 | +# v0.14.0 May 18th, 2026 |
| 2 | + |
| 3 | +## Changelog |
| 4 | + |
| 5 | +### Features |
| 6 | + |
| 7 | +- [#525](https://github.com/nevware21/ts-utils/pull/525) feat(array): add new array helpers and array-like detection |
| 8 | + - New helpers: `isArrayLike`, `arrSlice`, and other array utility improvements |
| 9 | +- [#527](https://github.com/nevware21/ts-utils/pull/527) feat(string): add `strReplace` and `strReplaceAll` helpers with refactored internal replacements |
| 10 | +- [#528](https://github.com/nevware21/ts-utils/pull/528) feat(string): add `strCapitalizeWords` helper |
| 11 | +- [#529](https://github.com/nevware21/ts-utils/pull/529) / [#530](https://github.com/nevware21/ts-utils/pull/530) feat(string): add `strTruncate`, `strCount`, `strAt`, and `strMatchAll` helpers with shared literal regex helper |
| 12 | +- [#533](https://github.com/nevware21/ts-utils/pull/533) feat(array): add `arrFlatMap` with ES5 polyfill support |
| 13 | +- [#535](https://github.com/nevware21/ts-utils/pull/535) docs(types): add typing utilities for v0.14.0 and expand TSDoc examples |
| 14 | +- [#536](https://github.com/nevware21/ts-utils/pull/536) feat: add `isAsyncIterable` and `isIntegerInRange` type/value inspection helpers |
| 15 | +- [#543](https://github.com/nevware21/ts-utils/pull/543) feat(string): add `strStartsWithAny`, `strEndsWithAny`, `strWrap`, `strUnwrap`, and `strNormalizeNewlines` helpers |
| 16 | +- [#564](https://github.com/nevware21/ts-utils/pull/564) feat(object): add new object utility helpers and harden defaults against prototype pollution |
| 17 | + - New helpers: `objPick`, `objOmit`, `objPickBy`, `objOmitBy` — property selection and omission with typed overloads |
| 18 | + - New helpers: `objMapValues` — create a new object with values transformed by a mapper function |
| 19 | + - New helpers: `objMergeIf`, `objDefaults` — conditional merge and shallow defaults (similar to Lodash `_.defaults`) hardened against prototype pollution |
| 20 | + - New helper: `objDiff` — shallow diff returning only changed/added keys from a modified object vs a base |
| 21 | + - New helpers: `forEachOwnKey`, `forEachOwnKeySafe` — iteration over both string and symbol keys (existing `forEachOwnKeySafe` was string-only) |
| 22 | + - New helper: `objForEachKeySafe` — safe string-key iteration that filters `__proto__`, `constructor`, `prototype` |
| 23 | + - Extended `isUnsafeTarget` coverage to TypedArrays, `ArrayBuffer`, `DataView`, `WeakRef`, `FinalizationRegistry` |
| 24 | + |
| 25 | +### Security Issue |
| 26 | +- CVE-2026-46681 Prototype Pollution in objDeepCopy/objCopyProps via for...in without hasOwnProperty |
| 27 | + - Also affected `setValueByKey` and `setValueByIter` |
| 28 | + - [#565](https://github.com/nevware21/ts-utils/pull/565) feat: add prototype-pollution guards and array key helpers |
| 29 | + |
| 30 | + |
| 31 | +### Bug Fixes |
| 32 | + |
| 33 | +- [#558](https://github.com/nevware21/ts-utils/pull/558) Fix ES2015 built-in type errors in consumers by adding lib reference directive to published declarations |
| 34 | + - Consumers using `"lib": ["ES5", "DOM"]` (or omitting `lib`) received `Cannot find name 'Symbol'` / `Cannot find name 'Iterator'` errors because the published `.d.ts` exposed ES2015 types without declaring the dependency |
| 35 | + - Added `/// <reference lib="es2015" />` to the source entry points (`index.ts`, `polyfills.ts`) and a new post-processing script (`lib/scripts/setTsReferences.js`) that prepends the directive to the api-extractor bundled output (api-extractor strips these directives from its rollup) |
| 36 | + - Added `"lib": ["ES2015", "DOM"]` to all library and test `tsconfig` files for consistent compile-time validation |
| 37 | + - Net effect: consumers no longer need to add `"ES2015"` to their own `tsconfig.json` lib settings |
| 38 | +- [#561](https://github.com/nevware21/ts-utils/issues/561) Bug: Falsy `thisArg` (0, `''`, `false`) overridden in `arrForEach`/`iterForOf`/`objForEachKey` |
| 39 | + - [#566](https://github.com/nevware21/ts-utils/pull/566) Fix falsy `thisArg` (0, `''`, `false`) being overridden in `arrForEach`, `iterForOf`, `objForEachKey` |
| 40 | +- [#562](https://github.com/nevware21/ts-utils/pull/562) Fix `thisArg` binding in `polyArrFindIndex` / `polyArrFindLastIndex` polyfills |
| 41 | + |
| 42 | +### Repository Improvements |
| 43 | + |
| 44 | +- [#549](https://github.com/nevware21/ts-utils/pull/549) Drop Node.js 16 from CI matrix and add Node.js 24 |
| 45 | +- [#552](https://github.com/nevware21/ts-utils/pull/552) Upgrade Grunt devDependency to v1.6.2 |
| 46 | +- [#554](https://github.com/nevware21/ts-utils/pull/554) Add funding metadata to published package manifests |
| 47 | +- [#556](https://github.com/nevware21/ts-utils/pull/556) Add release PR instructions to Copilot instructions |
| 48 | + |
| 49 | +### Dependency Updates |
| 50 | + |
| 51 | +- [#559](https://github.com/nevware21/ts-utils/pull/559) Bump puppeteer from 24.43.1 to 25.0.2 |
| 52 | + |
| 53 | +[Full Changelog](https://github.com/nevware21/ts-utils/compare/v0.13.0...v0.14.0) |
| 54 | + |
1 | 55 | # v0.13.0 Feb 26th, 2026 |
2 | 56 |
|
3 | 57 | ## Changelog |
|
0 commit comments