| 3487 | export function mapOrSame<A>(as: Arr.NonEmptyReadonlyArray<A>, f: (a: A) => A): Arr.NonEmptyReadonlyArray<A> |
| 3488 | export function mapOrSame<A>(as: ReadonlyArray<A>, f: (a: A) => A): ReadonlyArray<A> |
| 3489 | export function mapOrSame<A>(as: ReadonlyArray<A>, f: (a: A) => A): ReadonlyArray<A> { |
| 3490 | let changed = false |
| 3491 | const out: Array<A> = new Array(as.length) |
| 3492 | for (let i = 0; i < as.length; i++) { |
| 3493 | const a = as[i] |
| 3494 | const fa = f(a) |
| 3495 | if (fa !== a) { |
| 3496 | changed = true |
| 3497 | } |
| 3498 | out[i] = fa |
| 3499 | } |
| 3500 | return changed ? out : as |
| 3501 | } |
| 3502 | |
| 3503 | /** @internal */ |
| 3504 | export function annotateKey<A extends AST>(ast: A, annotations: Schema.Annotations.Key<unknown>): A { |