Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite Equal to use the equality check from ReadonlyEquivalent exclusively #21

Merged
merged 9 commits into from May 10, 2023

Conversation

trevorade
Copy link
Collaborator

@trevorade trevorade commented Nov 3, 2022

Fixes #29
Fixes #26
Fixes #5

Note: I extracted a very small part of this PR to #20

This is a breaking change as I opted to remove the types that were no longer needed. They are exported though so it's likely some people depend on them. I can add these back as desired.

This took a lot of tinkering. This topic and this equality check is discussed extensively at microsoft/TypeScript#27024

The main three edge-cases this implementation worked around are:

  1. Explicitly handling any separately
  2. Supporting identity unions
  3. Supporting identity intersections

The only remaining known issue with this implementation is:

  // @ts-expect-error This is the bug.
  expectTypeOf<{foo: number} & {bar: string}>().toEqualTypeOf<{foo: number; bar: string}>()

@shicks and I could not find a tweak to the Equality check to make this work.

Instead, I added a workaround in the shape of a new .simplified modifier that works similar to .not:

  // The workaround is the new optional .simplified modifier.
  expectTypeOf<{foo: number} & {bar: string}>().simplified.toEqualTypeOf<{foo: number; bar: string}>()

I'm not entirely sure what to do with documenting .simplified because it's something you should never use unless you need it. The simplify operation tends to lose information about the types being tested (e.g., functions become {} and classes lose their constructors). I'll definitely update this PR to reference the .simplified modifier but I wanted to get a review on this approach first. One option would be to keep around all the DeepBrand stuff and to have .deepBranded or something being the modifier instead. That would have the benefit of preserving all the exported types making this less of a breaking change.

@trevorade trevorade requested a review from mmkal November 3, 2022 16:07
@trevorade
Copy link
Collaborator Author

Just an anecdote, this PR is compatible with all of the type-fest build tests (in our repo, we have an automation step which rewrites the tsd expectations to use expectTypeOf).

My previous reverted PR ran afoul of one of merge-deep.ts test cases which had too much nesting. This PR does not have that problem.

@papb
Copy link
Collaborator

papb commented Nov 5, 2022

Hi @trevorade! I am against .simplified, for a few reasons (pick the one that convinces you the most, I guess).

  1. I like to consider { a: 1 } & { b: 2 } identical to { a: 1, b: 2 }. Not just "simplifiedly"-identical. Really identical. I have not seen to this day any observable difference between the two. Therefore, I think expectTypeOf<{ a: 1 } & { b: 2 }>().toEqualTypeOf({ a: 1, b: 2 }) must work, if not, it is a bug.

  2. With this PR, given a type T, there is not a single correct way of testing the equality between the types { a: 1 } & { b: () => true } and { a: 1, b: () => T }. If T is true, .simplified must be used. If T is anything else, .simplified must not be used.

  3. I may agree with what you said that "you should never use unless you need it", but the only way for someone to "know" they need it is if they've previously manually analyzed the types, in which case the test becomes meaningless at best (since it is just "masking" an actual manual test someone did - and can get outdated).

  4. From what I've seen from the source code of your PR, it seems your implementation of Simplified<T> is not recursive, so it wouldn't catch { a: { x: 1 } & { y: 2 } } and { a: { x: 1, y: 2 } }. Even though this example can be fixed easily, I don't see any easy way to cover all complex recursive cases, such as intersections in return types of functions, high-order functions, the special thisArg, and so on.

  5. With this PR, expectTypeOf<A>().simplified.toEqualTypeOf<B>() would pass for type A = () => true and type B = Record<never, number>. To me this is unacceptable, and makes .simplified impossible to be trusted, therefore I would never write a test using it.

@papb
Copy link
Collaborator

papb commented Nov 5, 2022

  1. I like to consider { a: 1 } & { b: 2 } identical to { a: 1, b: 2 }. Not just "simplifiedly"-identical. Really identical. I have not seen to this day any observable difference between the two. Therefore, I think expectTypeOf<{ a: 1 } & { b: 2 }>().toEqualTypeOf({ a: 1, b: 2 }) must work, if not, it is a bug.

By the way, I would think we had a test for this already, but it seems we don't (since I didn't see you commenting out this test on the PR changes)?

@papb
Copy link
Collaborator

papb commented Nov 5, 2022

Also, maybe I should have asked this before anything else, but why did you want to make this change? Is it just to work around #5?

@shicks
Copy link

shicks commented Nov 6, 2022

@papb I agree that Simplify as written definitely has some trustability problems. But I'd also point out that DeepBrand is not without issues as well. We've patched a number of them, but the fact remains that it's a very kludgy hodgepodge that's both very inefficient (we found massive speed-ups with using the new direct comparison version) and yet still has potential holes (i.e. readonly properties in parameters/returns of overloaded functions simply can't be handled correctly).

I could see making the DeepBrand-based version available when needed (instead of just simplified). It unfortunately means we can't delete this very complicated bit of code that's only used for the one thing - but it would provide an alternative when the direct comparison has problems. I do strongly believe the direct equality check is the best default, since it's basically just deferring the check directly to the type checker, rather than hacking something together.

@mmkal
Copy link
Owner

mmkal commented Nov 10, 2022

Sorry for the delay in getting to this, hoping to find time to dive in in the next week.

@shicks when you say direct equality check what do you mean exactly? TS doesn't have that built in as far as I'm aware, all we really have to play with is extends. Could you give an example of how you'd want it to look?

Definitely agreed with the general concern with how DeepBrand has grown and grown, slowly taking over everything. And every edge case seems to add to its complexity, making it harder to maintain and most likely slowing the compiler down. It started as a way to distinguish between hairy types like any/unknown/never - which I do think is really important and should be the default behaviour. This library wouldn't be doing its job if it let anys make things go green secretly.

@mmkal
Copy link
Owner

mmkal commented Nov 10, 2022

A general thought that's based on the comments rather than the code. I agree with @papb that .simplified is a confusing API we should try to avoid if at all possible. @shicks it sounded like your answer was about the Simplified helper type, which I would think is more to do with the internal implementation of this library than the API. Internal implementation I'm very open to bigger changes in.

@trevorade
Copy link
Collaborator Author

I need to find some time to update this draft. I think what I'd want to do would be to keep around DeepBrand but have it not be the default. We could also un-revert my previous PR which improves DeepBrand (the problems there were not real problems, just an excessive amount of type nesting in the particular test I was looking at). Retaining DeepBrand also has the benefit of keeping the API of exported types stable.

Accessing the DeepBrand variant could be done with something like:

expectTypeOf<Foo>().branded.toEqualTypeOf<Bar>();

Honestly, nearly all examples we could find worked fine with this PR's new equality check with the exception of the intersection case noted above. This PR is more performant and covers several cases DeepBrand does not. So I think it's still a win.

TS really just needs an equality check in their typing system 😛

…xclusively.

This is a breaking change as I opted to remove the types that were no longer needed. They are exported though so it's likely some people depend on them.

This took a lot of tinkering. This topic and this equality check is discussed extensively at microsoft/TypeScript#27024

The main three work-arounds this implementation added are:
1. Explicitly handling `any` separately
2. Supporting identity unions
3. Supporting identity intersections

The only known issue is this case:

```ts
  // @ts-expect-error This is the bug.
  expectTypeOf<{foo: number} & {bar: string}>().toEqualTypeOf<{foo: number; bar: string}>()
```

@shicks and I could not find a tweak to the `Equality` check to make this work.

Instead, I added a workaround in the shape of a new `.simplified` modifier that works similar to `.not`:

```ts
  // The workaround is the new optional .simplified modifier.
  expectTypeOf<{foo: number} & {bar: string}>().simplified.toEqualTypeOf<{foo: number; bar: string}>()
```

I'm not entirely sure what to do with documenting `.simplified` because it's something you should never use unless you need it. The simplify operation tends to lose information about the types being tested (e.g., functions become `{}` and classes lose their constructors). I'll definitely update this PR to reference the `.simplified` modifier but I wanted to get a review on this approach first. One option would be to keep around all the `DeepBrand` stuff and to have `.deepBranded` or something being the modifier instead. That would have the benefit of preserving all the exported types making this less of a breaking change.
@trevorade
Copy link
Collaborator Author

Updated to keep around DeepBrand. Removed Simplified. Added a .branded chain.

This has the same ergonomic issues as the .simplified chain.

Main benefit here is that all the other exported types beyond expectTypeOf are now unchanged with this commit. expectTypeOf is a breaking change though in the off chance that people are checking one of the few cases where this new version fails.

As an alternative to the .branded chain, how would people feel about adding expectBrandedTypeOf as an exported function?

@trevorade
Copy link
Collaborator Author

@mmkal, @papb Please take another look.

@mmkal
Copy link
Owner

mmkal commented Nov 29, 2022

I really like this. I still need to go through the implementation, but I have very high confidence based on the tests, and not being (properly) breaking makes it much easier to say "yes" to. This is definitely a net-good change.

A couple of comments/requests:

  • could you add a simplified version of the .branded test to usage.test.ts? maybe with inline comments so they appear on the readme, including a link to the typescript issue? Or could even put a markdown link as the rest title and it'll render nicely on the readme. I like the pattern of treating usage.test.ts as features that users should know about, and types.test.ts being edge-cases that should "just work". We could still keep the detailed test you have in types.test.ts if there's a simplified version that'd be more presentable (e.g. no need to test expectTypeOf<...>() and expectTypeOf(...) in usage.test.ts)
  • I'm fine with this kind of very small breaking change. The lib is v0 anyway so not even a semver violation to publish as a new minor.
  • could you update the PR description so it reflects what this change now does? I've set the squashed-commit to use the PR body as git commit message so will be a useful breadcrumb for people who update and get hit by new failures.

Copy link
Owner

@mmkal mmkal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some minor comments on the implementation part

@@ -174,8 +174,7 @@ test('parity with IsExact from conditional-type-checks', () => {
test('Equal works with functions', () => {
expectTypeOf<a.Equal<() => void, () => string>>().toEqualTypeOf<false>()
expectTypeOf<a.Equal<() => void, (s: string) => void>>().toEqualTypeOf<false>()
// todo: workaround https://github.com/microsoft/TypeScript/issues/50670 - https://github.com/mmkal/expect-type/issues/5
// expectTypeOf<a.Equal<() => () => () => void, () => () => () => string>>().toEqualTypeOf<false>()
expectTypeOf<a.Equal<() => () => () => void, () => () => () => string>>().toEqualTypeOf<false>()
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀🚀🚀

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Outdated though...

If you did the .Equal not branded, it would work

src/index.ts Outdated
@@ -84,7 +84,15 @@ type ReadonlyEquivalent<X, Y> = Extends<
export type Extends<L, R> = IsNever<L> extends true ? IsNever<R> : [L] extends [R] ? true : false
export type StrictExtends<L, R> = Extends<DeepBrand<L>, DeepBrand<R>>

export type Equal<Left, Right> = And<[StrictExtends<Left, Right>, StrictExtends<Right, Left>]>
type StrictEqual<L, R> =
(<T>() => T extends (L & T) | T ? true : false) extends
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a link to a stack overflow/blog post/docs page that explains this trick or something similar? And/or an explanation of why we can't just use T. It's befuddling(-looking) enough to warrant a comment.

src/index.ts Outdated
@@ -95,7 +103,7 @@ export type ConstructorParams<Actual> = Actual extends new (...args: infer P) =>

type MismatchArgs<B extends boolean, C extends boolean> = Eq<B, C> extends true ? [] : [never]

export interface ExpectTypeOf<Actual, B extends boolean> {
export interface ExpectTypeOf<Actual, B extends boolean, Branded = false> {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should merge in a separate PR that renames B to Positive or something? I feel like I've seen that elsewhere on one of the PRs recently, am I remembering that right?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing you're thinking of #13

In that one, I renamed it to ExpectTypeOf<Actual, ExpectedResult extends boolean>

I could incorporate parts of that PR to just the generic renaming.

@papb
Copy link
Collaborator

papb commented Nov 29, 2022

yet still has potential holes (i.e. readonly properties in parameters/returns of overloaded functions simply can't be handled correctly)

I didn't know this, can someone show an example please?

@papb
Copy link
Collaborator

papb commented Nov 29, 2022

Updated to keep around DeepBrand. Removed Simplified. Added a .branded chain.

This has the same ergonomic issues as the .simplified chain.

Main benefit here is that all the other exported types beyond expectTypeOf are now unchanged with this commit. expectTypeOf is a breaking change though in the off chance that people are checking one of the few cases where this new version fails.

If I understood correctly, from the point of view of expectTypeOf, what changed since my last comment is:

  • What previously was expectTypeOf().toEqualTypeOf() is now expectTypeOf().branded.toEqualTypeOf()
  • What previously was expectTypeOf().simplified.toEqualTypeOf() is now expectTypeOf().toEqualTypeOf()

Did I understand correctly? If so, unfortunately I have to say that all my objections still stand, since only the way of calling the function changed, not the behavior per se.

However, considering that...

...then I may concede that none of these two solutions are exactly correct, and that we might

  • document this feature as slightly imprecise (and justify its existence as the best effort available for now, and invite users to show interest in the appropriate TS issue)
  • provide both options to the users
  • provide a thorough documentation on how to choose and what are the risks
    • Showing false expectation-passes with the DeepBrand method
    • Showing false expectation-failures with the DeepBrand method
    • Showing false expectation-failures with the "generic-extends-trick" method

@papb
Copy link
Collaborator

papb commented Nov 29, 2022

I have very high confidence based on the tests, and not being (properly) breaking makes it much easier to say "yes" to.

@mmkal The reason I don't agree with this sentence is that the test for expectTypeOf<{ a: 1 } & { b: 2 }>().toEqualTypeOf({ a: 1, b: 2 }) should exist in the first place. Since it doesn't, which I think is a mistake, this PR gives the impression of not being a breaking change.

@trevorade
Copy link
Collaborator Author

trevorade commented Nov 29, 2022

@papb Note that all of the tests I add in this PR fail before this change. These tests also passed with my previous PR 304a54b which improved DeepBrand but the complexity of DeepBrand started hitting the ceiling of how much work tsc can do in type-land. I reverted it in a6d1f99 because it was causing tests to fail for type-fest with some of their types (we use expect-type instead of tsd to run the type-fest tests in our codebase).

DeepBrand is just very unwieldily and slow.

We're in a situation with: pick 2:

  1. Fast
  2. Covers most cases
  3. Covers {a: 1} & {b: 2} equals {a: 1, b: 2}

This PR gets you 1. and 2.

We could un-revert 304a54b and we'd presumably get 2. and 3. but at the cost of compile speed and not working with more complex types.


Lastly, note that even my previous PR doesn't work around microsoft/TypeScript#50670 whereas this PR does.

It's pretty crappy that TS just doesn't have an equality check for types. At the moment, there is just no perfect equality check that covers all cases. I find that not covering 3. is acceptable for this library.

@shicks
Copy link

shicks commented Nov 29, 2022

@papb wrote:

yet still has potential holes (i.e. readonly properties in parameters/returns of overloaded functions simply can't be handled correctly)

I didn't know this, can someone show an example please?

{
  // Overloads indistinguishable from non-overloads.
  interface A {
    foo(a: string): string;
    foo(a: number): number;
  }
  interface B {
    foo(a: number): number;
  }
  expectTypeOf<A>().toEqualTypeOf<B>(); // should fail, but passes
}
{
  // Generics indistinguishable from non-generics.
  interface A {
    foo<T>(a: T): T;
  }
  interface B {
    foo(a: unknown): unknown;
  }
  expectTypeOf<A>().toEqualTypeOf<B>(); // should fail, but passes
}
{
  // Readonly properties in parameters indistinguishable.
  interface A {
    foo(a: {readonly a: number}): number;
  }
  interface B {
    foo(a: {a: number}): number;
  }
  expectTypeOf<A>().toEqualTypeOf<B>(); // should fail, but passes
}
{
  // These are actually the same type, but DeepBrand can't figure it out, either.
  type Digit = 0|1|2|3|4|5|6|7|8|9;
  type A = `${number}${string}`;
  type B = `${Digit}${string}`;
  expectTypeOf<A>().toEqualTypeOfBranded<B>(); // should pass, but fails
}

Here are some examples of how the current DeepBrand-based implementation doesn't work as you might hope/expect (playground link).

I have very high confidence based on the tests, and not being (properly) breaking makes it much easier to say "yes" to.

@mmkal The reason I don't agree with this sentence is that the test for expectTypeOf<{ a: 1 } & { b: 2 }>().toEqualTypeOf({ a: 1, b: 2 }) should exist in the first place. Since it doesn't, which I think is a mistake, this PR gives the impression of not being a breaking change.

Ultimately this comes down to "what does equal mean?" It's true that I'm not aware of any other way to distinguish {a:1}&{b:2} from {a:1,b:2}, aside from the one here. But clearly TypeScript represents them differently internally, or else we wouldn't have this problem. In most cases, TypeScript treats optional/readonly as irrelevant, so there's a slippery slope of which reductions you want to allow in "equals" versus which you want to preserve. As we're all aware, there is no good way to ask the type checker if these two types will be treated exactly identically. It's probably not even a decidable question, given that the type system is apparently Turing complete. So I think it makes a lot of sense to expose the lowest-level check we possibly can, and then if you want to force it to apply certain transformations (i.e. look at it on a per-field level, etc) then you can opt into that explicitly.

@trevorade
Copy link
Collaborator Author

trevorade commented Nov 30, 2022

@mmkal Another proposal.

We remove .branded and DeepBrand and add the following:

export type MutuallyAssignable<Actual, Expected> =
    [Actual, Expected] extends [Expected, Actual] ? true : false;
...
export interface ExpectTypeOf<Actual, B extends boolean> {
...
  toAssignMutuallyWithTypeOf: {
    <Expected>(...MISMATCH: MismatchArgs<MutuallyAssignable<Actual, Expected>, B>): true
    <Expected>(expected: Expected, ...MISMATCH: MismatchArgs<MutuallyAssignable<Actual, Expected>, B>): true
  }

This doesn't have protections against any or never because it doesn't need to. let a: any and let b: number are mutually assignable to each other.

In the off-case that you run into something like {a: 1} & {b: 2} not being equal to {a:1, b:2}, you can use toAssignMutuallyWithTypeOf. It's a similar check but not as strong as toEqualTypeOf.

This simplifies expect-type quite a bit by removing DeepBrand and removes the confusion of the .branded chain method. If we do want an alternative to toEqualTypeOf, I think it would be best were it as simple and non-magic as possible. I think MutuallyAssignable fits that bill.

@mmkal
Copy link
Owner

mmkal commented Dec 4, 2022

I have very high confidence based on the tests, and not being (properly) breaking makes it much easier to say "yes" to.

@mmkal The reason I don't agree with this sentence is that the test for expectTypeOf<{ a: 1 } & { b: 2 }>().toEqualTypeOf({ a: 1, b: 2 }) should exist in the first place. Since it doesn't, which I think is a mistake, this PR gives the impression of not being a breaking change.

@papb good point, and sorry to have forgotten this. I'm currently on paternity leave so git history will be much more reliable than my memory.

@trevorade in the tradeoff between fast and correct I'd prefer correct, but it does seem that "slow" also exposes tsc limitations which also means "not correct".

To make clear the tradeoff, @papb would you be open to a simple PR adding a test for the {a: 1} & {b: 2} case? That would force this PR to at least disable that test, explicitly, so we could see what we're losing.

A couple more thoughts that come to mind:

  1. We could support both modes, and use some kind of pseudo-higher-kinded type via module augmentation to allow advanced users to opt in to a speed boost if they are prepared to sacrifice & working properly. I did something similar here: https://github.com/mmkal/handy-redis/blob/39f4f823c7d169491f93aa087fca7d122fe9d016/src/node_redis/multi.ts#L7-L22 and fp-ts has a more advanced implementation.
  2. In either case we should probably have DeepBrand or its replacement force an error when we know it's going "too deep" for tsc to handle so we don't get bad types being marked as ok.

For either one, we should aim to have it "just work" for all the simple use cases in usage.test.ts if we possibly can. We might also want a limitations section of the documentation (maybe also generated from tests) so we can be honest and clear about what problems you might hit once you start trying to test big, complex types.

mmkal added a commit that referenced this pull request Apr 8, 2023
Because I'm forgetful #21 (comment)
@mmkal
Copy link
Owner

mmkal commented Apr 13, 2023

@trevorade I finally had a chance to dig into this (and experiment with an alternative in #27). Everything I was able to come up with that technically covers all edge cases had serious performance problems, so because this implementation is so dramatically much simpler, I'm inclined to agree that we just have the & problem as a documented limitation. I also think that in most cases there are simpler workarounds than branded though. For example this workaround is available in simple cases:

type A = {a: 1}
type B = {b: 1}
type Intersection = A & B
expectTypeOf<Intersection>().toEqualTypeOf<{a: 1; b: 1}>()
expectTypeOf<{[K in keyof Intersection]: Intersection[K]}>().toEqualTypeOf<{a: 1; b: 1}>()

Is that what the original simplified was doing, more or less? I can't find the original commit.

@trevorade
Copy link
Collaborator Author

It's been a while so I can't remember what .simplified was doing exactly. It's annoying that GitHub does not preserve older PR versions.

This current state of this PR has .branded. I think it would be better to clean up this file as much as possible and just remove the brand-related code.

Unfortunately, I don't really have capacity these days to help out with changes here. Feel free to create a new commit based on this or take over this one (if you can?)

@mmkal
Copy link
Owner

mmkal commented Apr 13, 2023

Sounds good - will see if I can simplify, and merge when it's ready

@mmkal mmkal marked this pull request as ready for review May 10, 2023 03:27
@mmkal mmkal merged commit 8f19883 into main May 10, 2023
1 check passed
@mmkal mmkal deleted the simplify_strict_equals branch May 10, 2023 03:46
@gomain
Copy link

gomain commented May 11, 2023

When will this be released?

@unional
Copy link

unional commented May 23, 2023

Covers {a: 1} & {b: 2} equals {a: 1, b: 2}

Just for sharing, I have it working in type-plus

@mmkal
Copy link
Owner

mmkal commented May 24, 2023

When will this be released?

@gomain in the next few days. Have been out!

@mmkal
Copy link
Owner

mmkal commented May 29, 2023

Covers {a: 1} & {b: 2} equals {a: 1, b: 2}

Just for sharing, I have it working in type-plus

@unional while that does cover the specific test that was added to this PR to document the limitation, I don't think I would like a workaround like that to be included in expect-type. Really, it's just kicking the can down the road where it's less visible and harder to debug, since it's just explicitly looking for top-level intersections and handling them manually. Nested properties with intersection types will meet the same problem. That may be ok for your use case - I'm not familiar with type-pluts - but I think it'd be confusing here. I opened a PR to demonstrate/document this: unional/type-plus#302

@mmkal
Copy link
Owner

mmkal commented May 29, 2023

@gomain / others on this thread - this was released in v0.16.0

kodiakhq bot pushed a commit to X-oss-byte/Canary-nextjs that referenced this pull request Sep 28, 2023
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [expect-type](https://togithub.com/mmkal/expect-type) | [`0.14.2` -> `0.16.0`](https://renovatebot.com/diffs/npm/expect-type/0.14.2/0.16.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/expect-type/0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/expect-type/0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/expect-type/0.14.2/0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/expect-type/0.14.2/0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>mmkal/expect-type (expect-type)</summary>

### [`v0.16.0`](https://togithub.com/mmkal/expect-type/releases/tag/v0.16.0)

[Compare Source](https://togithub.com/mmkal/expect-type/compare/v0.15.0...v0.16.0)

#### What's Changed

-   support functions with `this` parameters by [@&#8203;mmkal](https://togithub.com/mmkal) and [@&#8203;papb](https://togithub.com/papb) in [mmkal/expect-type#15
-   Prevent the .not modifier from being chained by [@&#8203;trevorade](https://togithub.com/trevorade) in [mmkal/expect-type#20
-   Rewrite `Equal` to use the equality check from `ReadonlyEquivalent` exclusively by [@&#8203;trevorade](https://togithub.com/trevorade) in [mmkal/expect-type#21

Note that [#&#8203;21](https://togithub.com/mmkal/expect-type/issues/21) has affected behavior for intersection types, which can result in (arguably) false errors:

```ts
// @&#8203;ts-expect-error the following line doesn't compile, even though the types are arguably the same.
// See mmkal/expect-type#21
expectTypeOf<{a: 1} & {b: 2}>().toEqualTypeOf<{a: 1; b: 2}>()
```

**Full Changelog**: mmkal/expect-type@v0.15.0...v16.0.0

### [`v0.15.0`](https://togithub.com/mmkal/expect-type/releases/tag/v0.15.0)

[Compare Source](https://togithub.com/mmkal/expect-type/compare/v0.14.2...v0.15.0)

#### What's Changed

-   Update Extends to not distribute over union types by [@&#8203;trevorade](https://togithub.com/trevorade) in [mmkal/expect-type#12

#### New Contributors

-   [@&#8203;trevorade](https://togithub.com/trevorade) made their first contribution in [mmkal/expect-type#12

**Full Changelog**: mmkal/expect-type@v0.14.2...v0.15.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/X-oss-byte/Canary-nextjs).
kodiakhq bot pushed a commit to X-oss-byte/Nextjs that referenced this pull request Oct 2, 2023
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [expect-type](https://togithub.com/mmkal/expect-type) | [`0.14.2` -> `0.16.0`](https://renovatebot.com/diffs/npm/expect-type/0.14.2/0.16.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/expect-type/0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/expect-type/0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/expect-type/0.14.2/0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/expect-type/0.14.2/0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>mmkal/expect-type (expect-type)</summary>

### [`v0.16.0`](https://togithub.com/mmkal/expect-type/releases/tag/v0.16.0)

[Compare Source](https://togithub.com/mmkal/expect-type/compare/v0.15.0...v0.16.0)

#### What's Changed

-   support functions with `this` parameters by [@&#8203;mmkal](https://togithub.com/mmkal) and [@&#8203;papb](https://togithub.com/papb) in [mmkal/expect-type#15
-   Prevent the .not modifier from being chained by [@&#8203;trevorade](https://togithub.com/trevorade) in [mmkal/expect-type#20
-   Rewrite `Equal` to use the equality check from `ReadonlyEquivalent` exclusively by [@&#8203;trevorade](https://togithub.com/trevorade) in [mmkal/expect-type#21

Note that [#&#8203;21](https://togithub.com/mmkal/expect-type/issues/21) has affected behavior for intersection types, which can result in (arguably) false errors:

```ts
// @&#8203;ts-expect-error the following line doesn't compile, even though the types are arguably the same.
// See mmkal/expect-type#21
expectTypeOf<{a: 1} & {b: 2}>().toEqualTypeOf<{a: 1; b: 2}>()
```

**Full Changelog**: mmkal/expect-type@v0.15.0...v16.0.0

### [`v0.15.0`](https://togithub.com/mmkal/expect-type/releases/tag/v0.15.0)

[Compare Source](https://togithub.com/mmkal/expect-type/compare/v0.14.2...v0.15.0)

#### What's Changed

-   Update Extends to not distribute over union types by [@&#8203;trevorade](https://togithub.com/trevorade) in [mmkal/expect-type#12

#### New Contributors

-   [@&#8203;trevorade](https://togithub.com/trevorade) made their first contribution in [mmkal/expect-type#12

**Full Changelog**: mmkal/expect-type@v0.14.2...v0.15.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/X-oss-byte/Nextjs).
renovate bot added a commit to sequelize/umzug that referenced this pull request Dec 4, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[@types/glob](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/glob)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/glob))
| [`8.0.0` ->
`8.1.0`](https://renovatebot.com/diffs/npm/@types%2fglob/8.0.0/8.1.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fglob/8.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fglob/8.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fglob/8.0.0/8.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fglob/8.0.0/8.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/lodash](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/lodash)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash))
| [`4.14.186` ->
`4.14.202`](https://renovatebot.com/diffs/npm/@types%2flodash/4.14.186/4.14.202)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2flodash/4.14.202?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2flodash/4.14.202?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2flodash/4.14.186/4.14.202?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2flodash/4.14.186/4.14.202?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/verror](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/verror)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/verror))
| [`1.10.6` ->
`1.10.9`](https://renovatebot.com/diffs/npm/@types%2fverror/1.10.6/1.10.9)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fverror/1.10.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fverror/1.10.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fverror/1.10.6/1.10.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fverror/1.10.6/1.10.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@vitest/ui](https://togithub.com/vitest-dev/vitest/tree/main/packages/ui#readme)
([source](https://togithub.com/vitest-dev/vitest/tree/HEAD/packages/ui))
| [`0.34.6` ->
`0.34.7`](https://renovatebot.com/diffs/npm/@vitest%2fui/0.34.6/0.34.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fui/0.34.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fui/0.34.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fui/0.34.6/0.34.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fui/0.34.6/0.34.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [del-cli](https://togithub.com/sindresorhus/del-cli) | [`5.0.0` ->
`5.1.0`](https://renovatebot.com/diffs/npm/del-cli/5.0.0/5.1.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/del-cli/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/del-cli/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/del-cli/5.0.0/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/del-cli/5.0.0/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [expect-type](https://togithub.com/mmkal/expect-type) | [`0.14.2` ->
`0.17.3`](https://renovatebot.com/diffs/npm/expect-type/0.14.2/0.17.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/expect-type/0.17.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/expect-type/0.17.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/expect-type/0.14.2/0.17.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/expect-type/0.14.2/0.17.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [sinon](https://sinonjs.org/)
([source](https://togithub.com/sinonjs/sinon)) | [`14.0.0` ->
`14.0.2`](https://renovatebot.com/diffs/npm/sinon/14.0.0/14.0.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/sinon/14.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/sinon/14.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/sinon/14.0.0/14.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/sinon/14.0.0/14.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [sqlite3](https://togithub.com/microsoft/vscode-node-sqlite3) |
[`5.0.8` ->
`5.1.2`](https://renovatebot.com/diffs/npm/sqlite3/5.0.8/5.1.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/sqlite3/5.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/sqlite3/5.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/sqlite3/5.0.8/5.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/sqlite3/5.0.8/5.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [typescript](https://www.typescriptlang.org/)
([source](https://togithub.com/Microsoft/TypeScript)) | [`4.8.4` ->
`4.9.5`](https://renovatebot.com/diffs/npm/typescript/4.8.4/4.9.5) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript/4.8.4/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/4.8.4/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [uuid](https://togithub.com/uuidjs/uuid) | [`9.0.0` ->
`9.0.1`](https://renovatebot.com/diffs/npm/uuid/9.0.0/9.0.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/uuid/9.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/uuid/9.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/uuid/9.0.0/9.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/uuid/9.0.0/9.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/ui)</summary>

###
[`v0.34.7`](https://togithub.com/vitest-dev/vitest/compare/v0.34.6...v0.34.7)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.34.6...v0.34.7)

</details>

<details>
<summary>sindresorhus/del-cli (del-cli)</summary>

###
[`v5.1.0`](https://togithub.com/sindresorhus/del-cli/releases/tag/v5.1.0)

[Compare
Source](https://togithub.com/sindresorhus/del-cli/compare/v5.0.1...v5.1.0)

- Add `--verbose` flag
([#&#8203;37](https://togithub.com/sindresorhus/del-cli/issues/37))
[`f32b531`](https://togithub.com/sindresorhus/del-cli/commit/f32b531)

###
[`v5.0.1`](https://togithub.com/sindresorhus/del-cli/releases/tag/v5.0.1)

[Compare
Source](https://togithub.com/sindresorhus/del-cli/compare/v5.0.0...v5.0.1)

- Fix Windows compatibility for use with `npx`
[`537e5b3`](https://togithub.com/sindresorhus/del-cli/commit/537e5b3)

</details>

<details>
<summary>mmkal/expect-type (expect-type)</summary>

###
[`v0.17.3`](https://togithub.com/mmkal/expect-type/releases/tag/v0.17.3)

[Compare
Source](https://togithub.com/mmkal/expect-type/compare/v0.17.2...v0.17.3)

- docs: why-is-my-assertion-failing
[`907b8aa`](https://togithub.com/mmkal/expect-type/commit/907b8aa)
- I think the previous build was out of date somehow too, so see
https://github.com/mmkal/expect-type/releases/v0.17.2

###
[`v0.17.2`](https://togithub.com/mmkal/expect-type/releases/tag/v0.17.2)

[Compare
Source](https://togithub.com/mmkal/expect-type/compare/v0.17.1...v0.17.2)

- Improve tuple errors
([#&#8203;40](https://togithub.com/mmkal/expect-type/issues/40))
[`4b38117`](https://togithub.com/mmkal/expect-type/commit/4b38117)

Diff(truncated - scroll right!):

```diff
test('toEqualTypeOf with tuples', () => {
  const assertion = `expectTypeOf<[[number], [1], []]>().toEqualTypeOf<[[number], [2], []]>()`
  expect(tsErrors(assertion)).toMatchInlineSnapshot(`
-    "test/test.ts:999:999 - error TS2344: Type '[[number], [2], []]' does not satisfy the constraint '{ [x: number]: { [x: number]: number; [iterator]: (() => IterableIterator<1>) | (() => IterableIterator<number>) | (() => IterableIterator<never>); [unscopables]: (() => { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }) | (() => { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }) | (() => { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }); length: 0 | 1; toString:  ... truncated!!!!'.
-      Types of property 'sort' are incompatible.
-        Type '(compareFn?: ((a: [] | [number] | [2], b: [] | [number] | [2]) => number) | undefined) => [[number], [2], []]' is not assignable to type '\\"Expected: function, Actual: function\\"'.
+    "test/test.ts:999:999 - error TS2344: Type '[[number], [2], []]' does not satisfy the constraint '{ 0: { 0: number; }; 1: { 0: \\"Expected: literal number: 2, Actual: literal number: 1\\"; }; 2: {}; }'.
+      The types of '1[0]' are incompatible between these types.
+        Type '2' is not assignable to type '\\"Expected: literal number: 2, Actual: literal number: 1\\"'.
    999 expectTypeOf<[[number], [1], []]>().toEqualTypeOf<[[number], [2], []]>()
                                                          ~~~~~~~~~~~~~~~~~~~"
  `)
})
```

###
[`v0.17.1`](https://togithub.com/mmkal/expect-type/releases/tag/v0.17.1)

[Compare
Source](https://togithub.com/mmkal/expect-type/compare/v0.17.0...v0.17.1)

- disallow `.not` and `.branded` together
[`cf38918`](https://togithub.com/mmkal/expect-type/commit/cf38918)

(this was actually documented in the [v0.17.0
release](https://togithub.com/mmkal/expect-type/releases/tag/v0.17.0)
but really it was only pushed here)

###
[`v0.17.0`](https://togithub.com/mmkal/expect-type/releases/tag/v0.17.0)

[Compare
Source](https://togithub.com/mmkal/expect-type/compare/v0.16.0...v0.17.0)

[#&#8203;16](https://togithub.com/mmkal/expect-type/issues/16) went in
to - hopefully - significantly improve the error messages produce on
failing assertions. Here's an example of how vitest's failing tests were
improved:

Before:

<img width="551" alt="image"
src="https://github.com/vitest-dev/vitest/assets/15040698/3bfea594-14b5-4919-9dac-4a562e603d59">

After:

<img width="672" alt="image"
src="https://github.com/vitest-dev/vitest/assets/15040698/ca106058-178b-401e-be26-6f08ae628fd4">

Docs copied from [the
readme](https://togithub.com/mmkal/expect-type#error-messages) about how
to interpret these error messages

***

##### Error messages

When types don't match, `.toEqualTypeOf` and `.toMatchTypeOf` use a
special helper type to produce error messages that are as actionable as
possible. But there's a bit of an nuance to understanding them. Since
the assertions are written "fluently", the failure should be on the
"expected" type, not the "actual" type
(`expect<Actual>().toEqualTypeOf<Expected>()`). This means that type
errors can be a little confusing - so this library produces a
`MismatchInfo` type to try to make explicit what the expectation is. For
example:

```ts
expectTypeOf({a: 1}).toEqualTypeOf<{a: string}>()
```

Is an assertion that will fail, since `{a: 1}` has type `{a: number}`
and not `{a: string}`. The error message in this case will read
something like this:

test/test.ts:999:999 - error TS2344: Type '{ a: string; }' does not
satisfy the constraint '{ a: \\"Expected: string, Actual: number\\"; }'.
      Types of property 'a' are incompatible.
Type 'string' is not assignable to type '\\"Expected: string, Actual:
number\\"'.

    999 expectTypeOf({a: 1}).toEqualTypeOf<{a: string}>()

Note that the type constraint reported is a human-readable messaging
specifying both the "expected" and "actual" types. Rather than taking
the sentence `Types of property 'a' are incompatible // Type 'string' is
not assignable to type "Expected: string, Actual: number"` literally -
just look at the property name (`'a'`) and the message: `Expected:
string, Actual: number`. This will tell you what's wrong, in most cases.
Extremely complex types will of course be more effort to debug, and may
require some experimentation. Please [raise an
issue](https://togithub.com/mmkal/expect-type) if the error messages are
actually misleading.

The `toBe...` methods (like `toBeString`, `toBeNumber`, `toBeVoid` etc.)
fail by resolving to a non-callable type when the `Actual` type under
test doesn't match up. For example, the failure for an assertion like
`expectTypeOf(1).toBeString()` will look something like this:

test/test.ts:999:999 - error TS2349: This expression is not callable.
      Type 'ExpectString<number>' has no call signatures.

    999 expectTypeOf(1).toBeString()
                        ~~~~~~~~~~

The `This expression is not callable` part isn't all that helpful - the
meaningful error is the next line, `Type 'ExpectString<number> has no
call signatures`. This essentially means you passed a number but
asserted it should be a string.

If TypeScript added support for ["throw"
types](https://togithub.com/microsoft/TypeScript/pull/40468) these error
messagess could be improved. Until then they will take a certain amount
of squinting.

##### Concrete "expected" objects vs typeargs

Error messages for an assertion like this:

```ts
expectTypeOf({a: 1}).toEqualTypeOf({a: ''})
```

Will be less helpful than for an assertion like this:

```ts
expectTypeOf({a: 1}).toEqualTypeOf<{a: string}>()
```

This is because the TypeScript compiler needs to infer the typearg for
the `.toEqualTypeOf({a: ''})` style, and this library can only mark it
as a failure by comparing it against a generic `Mismatch` type. So,
where possible, use a typearg rather than a concrete type for
`.toEqualTypeOf` and `toMatchTypeOf`. If it's much more convenient to
compare two concrete types, you can use `typeof`:

```ts
const one = valueFromFunctionOne({some: {complex: inputs}})
const two = valueFromFunctionTwo({some: {other: inputs}})

expectTypeOf(one).toEqualTypeof<typeof two>()
```

***

Kinda-breaking changes: essentially none, but technically, `.branded` no
longer returns a "full" `ExpectTypeOf` instance at compile-time.
Previously you could do this:

```ts
expectTypeOf<{a: {b: 1} & {c: 1}}>().branded.not.toEqualTypeOf<{a: {b: 1; c: ''}}>()
expectTypeOf<{a: {b: 1} & {c: 1}}>().not.branded.toEqualTypeOf<{a: {b: 1; c: ''}}>()
```

Now that won't work (and it was always slightly nonsensical), so you'd
have to use `// @&#8203;ts-expect-error` instead of `not` if you have a
negated case where you need `branded`:

```ts
// @&#8203;ts-expect-error
expectTypeOf<{a: {b: 1} & {c: 1}}>().branded.not.toEqualTypeOf<{a: {b: 1; c: ''}}>()
```

***

#### What's Changed

- Improve CLI error messages by
[@&#8203;mmkal](https://togithub.com/mmkal) in
[https://github.com/mmkal/expect-type/pull/16](https://togithub.com/mmkal/expect-type/pull/16)
- expect-type is usually a dev dependency by
[@&#8203;SerkanSipahi](https://togithub.com/SerkanSipahi) in
[https://github.com/mmkal/expect-type/pull/39](https://togithub.com/mmkal/expect-type/pull/39)

#### New Contributors

- [@&#8203;SerkanSipahi](https://togithub.com/SerkanSipahi) made their
first contribution in
[https://github.com/mmkal/expect-type/pull/39](https://togithub.com/mmkal/expect-type/pull/39)

**Full Changelog**:
https://github.com/mmkal/expect-type/compare/v0.16.0...v0.17.0

###
[`v0.16.0`](https://togithub.com/mmkal/expect-type/releases/tag/v0.16.0)

[Compare
Source](https://togithub.com/mmkal/expect-type/compare/v0.15.0...v0.16.0)

#### What's Changed

- support functions with `this` parameters by
[@&#8203;mmkal](https://togithub.com/mmkal) and
[@&#8203;papb](https://togithub.com/papb) in
[https://github.com/mmkal/expect-type/pull/15](https://togithub.com/mmkal/expect-type/pull/15)
- Prevent the .not modifier from being chained by
[@&#8203;trevorade](https://togithub.com/trevorade) in
[https://github.com/mmkal/expect-type/pull/20](https://togithub.com/mmkal/expect-type/pull/20)
- Rewrite `Equal` to use the equality check from `ReadonlyEquivalent`
exclusively by [@&#8203;trevorade](https://togithub.com/trevorade) in
[https://github.com/mmkal/expect-type/pull/21](https://togithub.com/mmkal/expect-type/pull/21)

Note that [#&#8203;21](https://togithub.com/mmkal/expect-type/issues/21)
has affected behavior for intersection types, which can result in
(arguably) false errors:

```ts
// @&#8203;ts-expect-error the following line doesn't compile, even though the types are arguably the same.
// See https://github.com/mmkal/expect-type/pull/21
expectTypeOf<{a: 1} & {b: 2}>().toEqualTypeOf<{a: 1; b: 2}>()
```

**Full Changelog**:
https://github.com/mmkal/expect-type/compare/v0.15.0...v16.0.0

###
[`v0.15.0`](https://togithub.com/mmkal/expect-type/releases/tag/v0.15.0)

[Compare
Source](https://togithub.com/mmkal/expect-type/compare/v0.14.2...v0.15.0)

#### What's Changed

- Update Extends to not distribute over union types by
[@&#8203;trevorade](https://togithub.com/trevorade) in
[https://github.com/mmkal/expect-type/pull/12](https://togithub.com/mmkal/expect-type/pull/12)

#### New Contributors

- [@&#8203;trevorade](https://togithub.com/trevorade) made their first
contribution in
[https://github.com/mmkal/expect-type/pull/12](https://togithub.com/mmkal/expect-type/pull/12)

**Full Changelog**:
https://github.com/mmkal/expect-type/compare/v0.14.2...v0.15.0

</details>

<details>
<summary>sinonjs/sinon (sinon)</summary>

###
[`v14.0.2`](https://togithub.com/sinonjs/sinon/blob/HEAD/CHANGES.md#1402)

[Compare
Source](https://togithub.com/sinonjs/sinon/compare/v14.0.1...v14.0.2)

-
[`4d70f6e0`](https://togithub.com/sinonjs/sinon/commit/4d70f6e0965b82e387cd632fbe54ed58a8fcf601)
    Upgrade nise to latest (Morgan Roderick)
-
[`96a0d756`](https://togithub.com/sinonjs/sinon/commit/96a0d756b553c38154f442785c34c6092d1ac572)
Update [@&#8203;sinonjs/samsam](https://togithub.com/sinonjs/samsam) to
latest (Morgan Roderick)
-
[`babb4736`](https://togithub.com/sinonjs/sinon/commit/babb4736d7f0080e25dce34fc8ce72879e86792e)
Prefer
[@&#8203;sinonjs/commons](https://togithub.com/sinonjs/commons)[@&#8203;2](https://togithub.com/2)
(Morgan Roderick)
    > That makes ES2017 support explicit

*Released by Morgan Roderick on 2022-11-07.*

###
[`v14.0.1`](https://togithub.com/sinonjs/sinon/blob/HEAD/CHANGES.md#1401)

[Compare
Source](https://togithub.com/sinonjs/sinon/compare/v14.0.0...v14.0.1)

-
[`6c4753ef`](https://togithub.com/sinonjs/sinon/commit/6c4753ef243880f5cdf1ea9c88b569780f9dc013)
Fixed CSS selectors in `_base.scss` and changed blockquote default size
to 16px. (Jose Lupianez)
-   A bunch of dependency updates

*Released by [Carl-Erik Kopseng](https://togithub.com/fatso83) on
2022-10-03.*

</details>

<details>
<summary>microsoft/vscode-node-sqlite3 (sqlite3)</summary>

###
[`v5.1.2`](https://togithub.com/microsoft/vscode-node-sqlite3/compare/15e3606959a08cc5d78046cf9de533b3f53d5f63...b2c911808316bf28b532aa756e6841263ac61279)

[Compare
Source](https://togithub.com/microsoft/vscode-node-sqlite3/compare/15e3606959a08cc5d78046cf9de533b3f53d5f63...b2c911808316bf28b532aa756e6841263ac61279)

</details>

<details>
<summary>Microsoft/TypeScript (typescript)</summary>

###
[`v4.9.5`](https://togithub.com/microsoft/TypeScript/releases/tag/v4.9.5):
TypeScript 4.9.5

[Compare
Source](https://togithub.com/Microsoft/TypeScript/compare/v4.9.4...v4.9.5)

For release notes, check out the [release
announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/).

Downloads are available on:

-   [npm](https://www.npmjs.com/package/typescript)
- [NuGet
package](https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild)

#### Changes:

-
[`69e88ef`](https://togithub.com/Microsoft/TypeScript/commit/69e88ef5513a81acf69ec78f4af1f927da0d0584)
Port ignore deprecations to 4.9
([#&#8203;52419](https://togithub.com/Microsoft/TypeScript/issues/52419))
-
[`daf4e81`](https://togithub.com/Microsoft/TypeScript/commit/daf4e817a18def96b70ac34703b158ff0e6d58df)
Port timestamp fix to 4.9
([#&#8203;52426](https://togithub.com/Microsoft/TypeScript/issues/52426))

###
[`v4.9.4`](https://togithub.com/microsoft/TypeScript/releases/tag/v4.9.4):
TypeScript 4.9.4

[Compare
Source](https://togithub.com/Microsoft/TypeScript/compare/v4.9.3...v4.9.4)

For release notes, check out the [release
announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-4-9).

For the complete list of fixed issues, check out the

- [fixed issues query for Typescript
v4.9.4](https://togithub.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=is%3Aissue+milestone%3A%22TypeScript+4.9.4%22+is%3Aclosed+).

Downloads are available on:

-   [npm](https://www.npmjs.com/package/typescript)
- [NuGet
package](https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild)

#### Changes:

-
[`e286821`](https://togithub.com/Microsoft/TypeScript/commit/e2868216f637e875a74c675845625eb15dcfe9a2)
Bump version to 4.9.4 and LKG.
-
[`eb5419f`](https://togithub.com/Microsoft/TypeScript/commit/eb5419fc8d980859b98553586dfb5f40d811a745)
Cherry-pick
[#&#8203;51704](https://togithub.com/Microsoft/TypeScript/issues/51704)
to release 4.9
([#&#8203;51712](https://togithub.com/Microsoft/TypeScript/issues/51712))
-
[`b4d382b`](https://togithub.com/Microsoft/TypeScript/commit/b4d382b9b12460adf2da4cc0d1429cf19f8dc8be)
Cherry-pick changes for narrowing to tagged literal types.
-
[`e7a02f4`](https://togithub.com/Microsoft/TypeScript/commit/e7a02f43fce47e1a39259ada5460bcc33c8e98b5)
Port of
[#&#8203;51626](https://togithub.com/Microsoft/TypeScript/issues/51626)
and
[#&#8203;51689](https://togithub.com/Microsoft/TypeScript/issues/51689)
to release-4.9
([#&#8203;51627](https://togithub.com/Microsoft/TypeScript/issues/51627))
-
[`1727912`](https://togithub.com/Microsoft/TypeScript/commit/1727912f0437a7f367d90040fc4b0b4f3efd017a)
Cherry-pick fix around `visitEachChild` to release-4.9.
([#&#8203;51544](https://togithub.com/Microsoft/TypeScript/issues/51544))

This list of changes was [auto
generated](https://typescript.visualstudio.com/cf7ac146-d525-443c-b23c-0d58337efebc/\_release?releaseId=117&\_a=release-summary).

###
[`v4.9.3`](https://togithub.com/microsoft/TypeScript/releases/tag/v4.9.3):
TypeScript 4.9

[Compare
Source](https://togithub.com/Microsoft/TypeScript/compare/v4.8.4...v4.9.3)

For release notes, check out the [release
announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/).

Downloads are available on:

-   [npm](https://www.npmjs.com/package/typescript)
- [NuGet
package](https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild)

#### Changes:

-
[`93bd577`](https://togithub.com/Microsoft/TypeScript/commit/93bd577458d55cd720b2677705feab5c91eb12ce)
Bump version to 4.9.3 and LKG.
-
[`107f832`](https://togithub.com/Microsoft/TypeScript/commit/107f832b80df2dc97748021cb00af2b6813db75b)
Update LKG.
-
[`31bee56`](https://togithub.com/Microsoft/TypeScript/commit/31bee5682df130a14ffdd5742f994dbe7313dd0e)
Cherry-pick PR
[#&#8203;50977](https://togithub.com/Microsoft/TypeScript/issues/50977)
into release-4.9
([#&#8203;51363](https://togithub.com/Microsoft/TypeScript/issues/51363))
\[
[#&#8203;50872](https://togithub.com/Microsoft/TypeScript/issues/50872)
]
-
[`1e2fa7a`](https://togithub.com/Microsoft/TypeScript/commit/1e2fa7ae15f8530910fef8b916ec8a4ed0b59c45)
Update version to 4.9.2-rc and LKG.
-
[`7ab89e5`](https://togithub.com/Microsoft/TypeScript/commit/7ab89e5c6e401d161f31f28a6c555a3ba530910e)
Merge remote-tracking branch 'origin/main' into release-4.9
-
[`e5cd686`](https://togithub.com/Microsoft/TypeScript/commit/e5cd686defb1a4cbdb36bd012357ba5bed28f371)
Update package-lock.json
-
[`8d40dc1`](https://togithub.com/Microsoft/TypeScript/commit/8d40dc15d1b9945837e7860320fdccfe27c40cad)
Update package-lock.json
-
[`5cfb3a2`](https://togithub.com/Microsoft/TypeScript/commit/5cfb3a2fe344a5350734305193e6cc99516285ca)
Only call return() for an abrupt completion in user code
([#&#8203;51297](https://togithub.com/Microsoft/TypeScript/issues/51297))
-
[`a7a9d15`](https://togithub.com/Microsoft/TypeScript/commit/a7a9d158e817fcb0e94dc1c24e0a401b21be0cc9)
Fix for broken baseline in yieldInForInInDownlevelGenerator
([#&#8203;51345](https://togithub.com/Microsoft/TypeScript/issues/51345))
-
[`7f8426f`](https://togithub.com/Microsoft/TypeScript/commit/7f8426f4df0d0a7dd8b72079dafc3e60164a23b1)
fix for-in enumeration containing yield in generator
([#&#8203;51295](https://togithub.com/Microsoft/TypeScript/issues/51295))

<details><summary><b>See More</b></summary>

-
[`3d2b401`](https://togithub.com/Microsoft/TypeScript/commit/3d2b4017eb6b9a2b94bc673291e56ae95e8beddd)
Fix assertion functions accessed via wildcard imports
([#&#8203;51324](https://togithub.com/Microsoft/TypeScript/issues/51324))
-
[`64d0d5a`](https://togithub.com/Microsoft/TypeScript/commit/64d0d5ae140b7b26a09e75114517b418d6bcaa9f)
fix(51301): Fixing an unused import at the end of a line removes the
newline
([#&#8203;51320](https://togithub.com/Microsoft/TypeScript/issues/51320))
-
[`754eeb2`](https://togithub.com/Microsoft/TypeScript/commit/754eeb2986bde30d5926e0fa99c87dda9266d01b)
Update CodeQL workflow and configuration, fix found bugs
([#&#8203;51263](https://togithub.com/Microsoft/TypeScript/issues/51263))
-
[`d8aad26`](https://togithub.com/Microsoft/TypeScript/commit/d8aad262006ad2d2c91aa7a0e4449b4b83c57f7b)
Update package-lock.json
-
[`d4f26c8`](https://togithub.com/Microsoft/TypeScript/commit/d4f26c840b1db76c0b25a405c8e73830a2b45cbc)
fix(51245): Class with parameter decorator in arrow function causes
"convert to default export" refactoring failure
([#&#8203;51256](https://togithub.com/Microsoft/TypeScript/issues/51256))
-
[`16faf45`](https://togithub.com/Microsoft/TypeScript/commit/16faf45682173ea437a50330feb4785578923d7f)
Update package-lock.json
-
[`8b1ecdb`](https://togithub.com/Microsoft/TypeScript/commit/8b1ecdb701e2a2e19e9f8bcdd6b2beac087eabee)
fix(50654): "Move to a new file" breaks the declaration of referenced
variable
([#&#8203;50681](https://togithub.com/Microsoft/TypeScript/issues/50681))
-
[`170a17f`](https://togithub.com/Microsoft/TypeScript/commit/170a17fad57eae619c5ef2b7bdb3ac00d6c32c47)
Dom update 2022-10-25
([#&#8203;51300](https://togithub.com/Microsoft/TypeScript/issues/51300))
-
[`9c4e14d`](https://togithub.com/Microsoft/TypeScript/commit/9c4e14d75174432f6a4dc5967a09712a6784ab88)
Remove "No type information for this code" from baseline
([#&#8203;51311](https://togithub.com/Microsoft/TypeScript/issues/51311))
-
[`88d25b4`](https://togithub.com/Microsoft/TypeScript/commit/88d25b4f232929df59729156dfda6b65277affec)
fix(50068): Refactors trigger debug failure when JSX text has a ' and a
tag on the same line.
([#&#8203;51299](https://togithub.com/Microsoft/TypeScript/issues/51299))
-
[`8bee69a`](https://togithub.com/Microsoft/TypeScript/commit/8bee69acf410d4986cb0cc102b949e2d133d5380)
Update package-lock.json
-
[`702de1e`](https://togithub.com/Microsoft/TypeScript/commit/702de1eeaaef88a189e4d06e5a2aae287853790a)
Fix early call to return/throw on generator
([#&#8203;51294](https://togithub.com/Microsoft/TypeScript/issues/51294))
-
[`2c12b14`](https://togithub.com/Microsoft/TypeScript/commit/2c12b1499908ad7718e65d20e264561207c22375)
Add a GH Action to file a new issue if we go a week without seeing a
typescript-error-deltas issue
([#&#8203;51271](https://togithub.com/Microsoft/TypeScript/issues/51271))
-
[`6af270d`](https://togithub.com/Microsoft/TypeScript/commit/6af270dee09d62516f6dc02ec102a745ffebc037)
Update package-lock.json
-
[`2cc4c16`](https://togithub.com/Microsoft/TypeScript/commit/2cc4c16a26672a7ba6c97ba16309fcf334db7cae)
Update package-lock.json
-
[`6093491`](https://togithub.com/Microsoft/TypeScript/commit/60934915d9ccc4ca9c0fb2cd060d7ec81601942b)
Fix apparent typo in getStringMappingType
([#&#8203;51248](https://togithub.com/Microsoft/TypeScript/issues/51248))
-
[`61c2609`](https://togithub.com/Microsoft/TypeScript/commit/61c26096e3373719ece686b84c698423890e9a5f)
Update package-lock.json
-
[`ef69116`](https://togithub.com/Microsoft/TypeScript/commit/ef69116c41cb6805f89e6592eacb0ccb7f02207d)
Generate shortest `rootDirs` module specifier instead of first possible
([#&#8203;51244](https://togithub.com/Microsoft/TypeScript/issues/51244))
-
[`bbb42f4`](https://togithub.com/Microsoft/TypeScript/commit/bbb42f453dc684e03d977c5b70391124d57543a9)
Fix typo in canWatchDirectoryOrFile found by CodeQL
([#&#8203;51262](https://togithub.com/Microsoft/TypeScript/issues/51262))
-
[`a56b254`](https://togithub.com/Microsoft/TypeScript/commit/a56b254ad3c52b598bc5d44f83f3d0a1cf806068)
Include 'this' type parameter in isRelatedTo fast path
([#&#8203;51230](https://togithub.com/Microsoft/TypeScript/issues/51230))
-
[`3abd351`](https://togithub.com/Microsoft/TypeScript/commit/3abd351c0eea55758f27ee5558a4a1525b77f45b)
Fix super property transform in async arrow in method
([#&#8203;51240](https://togithub.com/Microsoft/TypeScript/issues/51240))
-
[`eed0511`](https://togithub.com/Microsoft/TypeScript/commit/eed05112180e0d94f78aa02d676d49468f15dc31)
Update package-lock.json
-
[`2625c1f`](https://togithub.com/Microsoft/TypeScript/commit/2625c1feae25aede35465ca835440fc57bf13d52)
Make the init config category order predictable
([#&#8203;51247](https://togithub.com/Microsoft/TypeScript/issues/51247))
-
[`1ca99b3`](https://togithub.com/Microsoft/TypeScript/commit/1ca99b34029dafad2c18af7bdc0711f4abf7e522)
fix(50551): Destructuring assignment with var bypasses "variable is used
before being assigned" check (2454)
([#&#8203;50560](https://togithub.com/Microsoft/TypeScript/issues/50560))
-
[`3f28fa1`](https://togithub.com/Microsoft/TypeScript/commit/3f28fa12dfecb8dfd66ce4684bf26f64e1f092f1)
Update package-lock.json
-
[`906ebe4`](https://togithub.com/Microsoft/TypeScript/commit/906ebe49334a3a9c2dbd73cd3c902898bc712b66)
Revert structuredTypeRelatedTo change and fix isUnitLikeType
([#&#8203;51076](https://togithub.com/Microsoft/TypeScript/issues/51076))
-
[`8ac4652`](https://togithub.com/Microsoft/TypeScript/commit/8ac465239f52de1da3ada8cdc4c3f107f4d62e45)
change type
([#&#8203;51231](https://togithub.com/Microsoft/TypeScript/issues/51231))
-
[`245a02c`](https://togithub.com/Microsoft/TypeScript/commit/245a02cbed7ad50a21289730159abc8d19a66f40)
fix(51222): Go-to-definition on return statements should jump to the
containing function declaration
([#&#8203;51227](https://togithub.com/Microsoft/TypeScript/issues/51227))
-
[`2dff34e`](https://togithub.com/Microsoft/TypeScript/commit/2dff34e8c4a91c0005ca9ccfb7e045e225b6f2e4)
markAliasReferenced should include ExportValue as well
([#&#8203;51219](https://togithub.com/Microsoft/TypeScript/issues/51219))
-
[`5ef2634`](https://togithub.com/Microsoft/TypeScript/commit/5ef2634f3df138323383c7f2e5a05163a924ee86)
Update package-lock.json
-
[`d0f0e35`](https://togithub.com/Microsoft/TypeScript/commit/d0f0e35c88ae017fc4c1213eb2f83303ee22ebde)
Remove old tslint comments
([#&#8203;51220](https://togithub.com/Microsoft/TypeScript/issues/51220))
-
[`85d405a`](https://togithub.com/Microsoft/TypeScript/commit/85d405a1d74c0730a9d8d6307b26e8d6f3f75421)
Fixed a false positive "await has no effect on the type" diagnostic with
mixed generic union
([#&#8203;50833](https://togithub.com/Microsoft/TypeScript/issues/50833))
-
[`1f8959f`](https://togithub.com/Microsoft/TypeScript/commit/1f8959f5dc04b2b2c2fc8a7dc53b6ac761e1f754)
fix: avoid downleveled dynamic import closing over specifier expression
([#&#8203;49663](https://togithub.com/Microsoft/TypeScript/issues/49663))
-
[`11066b2`](https://togithub.com/Microsoft/TypeScript/commit/11066b264f5d30fb5ac1f6c2f3a155c0190e75d2)
Rename internal functions to `narrowTypeBySwitchOnTypeOf` and
`narrowTypeByInKeyword`
([#&#8203;51215](https://togithub.com/Microsoft/TypeScript/issues/51215))
-
[`4c9afe8`](https://togithub.com/Microsoft/TypeScript/commit/4c9afe8812fcdb4658472ccbced4a5cd4bae70ea)
Update package-lock.json
-
[`f25bcb7`](https://togithub.com/Microsoft/TypeScript/commit/f25bcb7c27d78ce89e9c9356d27058cf86dbfb5c)
fix(49196): add jsdoc snippet for interface member functions
([#&#8203;51135](https://togithub.com/Microsoft/TypeScript/issues/51135))
-
[`7406ee9`](https://togithub.com/Microsoft/TypeScript/commit/7406ee9c145cd7d6117391818d5a1eca2d66ca8f)
fix(51170): Completing an unimplemented property overwrites rest of line
([#&#8203;51175](https://togithub.com/Microsoft/TypeScript/issues/51175))
-
[`a1d82fc`](https://togithub.com/Microsoft/TypeScript/commit/a1d82fc9dcced6ca6bde6e21c385d152d083679f)
Remove some unnecessary code discovered by rollup
([#&#8203;51204](https://togithub.com/Microsoft/TypeScript/issues/51204))
-
[`0481773`](https://togithub.com/Microsoft/TypeScript/commit/0481773a27fc6a0132c34502fd2a3b0c73cf63a3)
LEGO: Merge pull request 51200
-
[`98c19cb`](https://togithub.com/Microsoft/TypeScript/commit/98c19cbbbe83c2ae3c89a4e08317a4b9ccbcb206)
LEGO: Merge pull request 51190
-
[`13c9b05`](https://togithub.com/Microsoft/TypeScript/commit/13c9b05384544262363f3fd8b942b36aeb84fc61)
Update package-lock.json
-
[`673475e`](https://togithub.com/Microsoft/TypeScript/commit/673475e1c5e582f2fd0bf8d89e33c7708607c8d8)
Update package-lock.json
-
[`f6cf510`](https://togithub.com/Microsoft/TypeScript/commit/f6cf51053e024714dd6b8463fe6f8e7e33461e6b)
Add more tracing to node16/nodenext resolution
([#&#8203;51168](https://togithub.com/Microsoft/TypeScript/issues/51168))
-
[`83c5581`](https://togithub.com/Microsoft/TypeScript/commit/83c5581588f660247bd9648bafe67b49de060a55)
Update package-lock.json
-
[`be5f0fe`](https://togithub.com/Microsoft/TypeScript/commit/be5f0fe5acfed5146514ebe7c1b65529def8e490)
Add an extra regression test for awaited unresolvable recursive union
([#&#8203;51167](https://togithub.com/Microsoft/TypeScript/issues/51167))
-
[`2cb7e77`](https://togithub.com/Microsoft/TypeScript/commit/2cb7e779d70d57ef0d46dd3f768e646b8bbe783a)
fix(50416): correctly names disabled export refactors
([#&#8203;50663](https://togithub.com/Microsoft/TypeScript/issues/50663))
\[
[#&#8203;50416](https://togithub.com/Microsoft/TypeScript/issues/50416)
]
-
[`2bcfed0`](https://togithub.com/Microsoft/TypeScript/commit/2bcfed01f3458996e71ce37af43e3495cb7e4950)
feat(37440): Provide a quick-fix for non-exported types
([#&#8203;51038](https://togithub.com/Microsoft/TypeScript/issues/51038))
-
[`a24201c`](https://togithub.com/Microsoft/TypeScript/commit/a24201c8ef6f82b5729ab677b7a1a1d6d745fcb8)
Remove VSDevMode.ps1 and createPlaygroundBuild
([#&#8203;51166](https://togithub.com/Microsoft/TypeScript/issues/51166))
-
[`2da62a7`](https://togithub.com/Microsoft/TypeScript/commit/2da62a784bbba237b8239e84c8629cfafb0f595e)
fix(51112): omit parameter names that precede the type
([#&#8203;51142](https://togithub.com/Microsoft/TypeScript/issues/51142))
-
[`cf1b6b7`](https://togithub.com/Microsoft/TypeScript/commit/cf1b6b73330eab2dd484d71cbdb662a83b3c726f)
feat(51163): show QF to fill in the missing properties for the mapped
type.
([#&#8203;51165](https://togithub.com/Microsoft/TypeScript/issues/51165))
-
[`bdcc240`](https://togithub.com/Microsoft/TypeScript/commit/bdcc240d68245e4be865b385bd6a8fd8fa546f56)
Remove bug-causing carve-out in conditional type instantiation that
hopefully is no longer required
([#&#8203;51151](https://togithub.com/Microsoft/TypeScript/issues/51151))
-
[`37317a2`](https://togithub.com/Microsoft/TypeScript/commit/37317a208f34c141b64e26d0e92b3aed346e531f)
Check nested weak types in intersections on target side of relation
([#&#8203;51140](https://togithub.com/Microsoft/TypeScript/issues/51140))
-
[`9f49f9c`](https://togithub.com/Microsoft/TypeScript/commit/9f49f9ccb05a7bb56b8ca84b8036a3ad4e0e7c2b)
Update package-lock.json
-
[`4f54e7e`](https://togithub.com/Microsoft/TypeScript/commit/4f54e7e947298162d29f3104265e74dcfbc90d82)
Fix isExhaustiveSwitchStatement to better handle circularities
([#&#8203;51095](https://togithub.com/Microsoft/TypeScript/issues/51095))
-
[`503604c`](https://togithub.com/Microsoft/TypeScript/commit/503604c884bd0557c851b11b699ef98cdb65b93b)
Overloads shouldn't gain
[@&#8203;deprecated](https://togithub.com/deprecated) tags of other
overloads in quick info
([#&#8203;50904](https://togithub.com/Microsoft/TypeScript/issues/50904))
-
[`e14a229`](https://togithub.com/Microsoft/TypeScript/commit/e14a2298c5add93816c6f487bcfc5ac72e3a4c59)
Update package-lock.json
-
[`67256e5`](https://togithub.com/Microsoft/TypeScript/commit/67256e50c41aa9178a60c52de8416477f070b190)
Remove unused declarations array in extractSymbol's TargetRange
([#&#8203;51091](https://togithub.com/Microsoft/TypeScript/issues/51091))
-
[`9c87ded`](https://togithub.com/Microsoft/TypeScript/commit/9c87ded2b3fc4ba4a9a7656e9be39d5e404e6ab6)
fix(51100): ensure tsserver shuts down when parent process is killed
([#&#8203;51107](https://togithub.com/Microsoft/TypeScript/issues/51107))
-
[`c01ae01`](https://togithub.com/Microsoft/TypeScript/commit/c01ae01fac37268bac3362fb6e6d26db730f7ed5)
Fix nightly publish oops in Gulpfile
([#&#8203;51131](https://togithub.com/Microsoft/TypeScript/issues/51131))
-
[`a7d10f1`](https://togithub.com/Microsoft/TypeScript/commit/a7d10f15bbd28166b869ae00482214e360891613)
Update package-lock.json
-
[`d0bfd8c`](https://togithub.com/Microsoft/TypeScript/commit/d0bfd8caed521bfd24fc44960d9936a891744bb7)
fix(51072): ts.preProcessFile finds import in template string after
conditional expression with template strings
([#&#8203;51082](https://togithub.com/Microsoft/TypeScript/issues/51082))
-
[`ad56b5c`](https://togithub.com/Microsoft/TypeScript/commit/ad56b5ca56b763ab377e07121ecfebb457a2e810)
Convert scripts/Gulpfile to checked mjs/cjs so they can run without
compilation
([#&#8203;50988](https://togithub.com/Microsoft/TypeScript/issues/50988))
-
[`dbeae5d`](https://togithub.com/Microsoft/TypeScript/commit/dbeae5d943c784661862c52b8e215a2907c31a33)
fix(51017): Make lineText in the references response opt-out
([#&#8203;51081](https://togithub.com/Microsoft/TypeScript/issues/51081))
-
[`d06a592`](https://togithub.com/Microsoft/TypeScript/commit/d06a592d02955822a7407b70969fb7a82bc17d59)
Properly defer resolution of mapped types with generic `as` clauses
([#&#8203;51050](https://togithub.com/Microsoft/TypeScript/issues/51050))
-
[`42b1049`](https://togithub.com/Microsoft/TypeScript/commit/42b1049aee8c655631cb4f0065de86ec1023d20a)
Update package-lock.json
-
[`5f3e6cc`](https://togithub.com/Microsoft/TypeScript/commit/5f3e6cc4980d26af5d8a8f463e59b2c3338165c6)
Plugin probe location is higher priority than peer node_modules
([#&#8203;51079](https://togithub.com/Microsoft/TypeScript/issues/51079))
\[
[#&#8203;34616](https://togithub.com/Microsoft/TypeScript/issues/34616)
]
-
[`2648f6a`](https://togithub.com/Microsoft/TypeScript/commit/2648f6ab09e3176c7da2c07c54066d3a3433a298)
Plugins in project were adding up after every config file reload
([#&#8203;51087](https://togithub.com/Microsoft/TypeScript/issues/51087))
-
[`c18791c`](https://togithub.com/Microsoft/TypeScript/commit/c18791ccf165672df3b55f5bdd4a8655f33be26c)
Fix incorrect options type to WatchOptions
([#&#8203;51064](https://togithub.com/Microsoft/TypeScript/issues/51064))
-
[`b0795e9`](https://togithub.com/Microsoft/TypeScript/commit/b0795e9c94757a8ee78077d160cde8819a9801ea)
Update package-lock.json
-
[`43c6fd4`](https://togithub.com/Microsoft/TypeScript/commit/43c6fd4c09464204bc6a6e1c6c1d32fa12270414)
Covert some of the config testing to baselines for easy validation
([#&#8203;51063](https://togithub.com/Microsoft/TypeScript/issues/51063))
-
[`fc5e72b`](https://togithub.com/Microsoft/TypeScript/commit/fc5e72b92cb8ea13c5e0f2cfc35d8b2cbfd1fe36)
Remove unused defaultWatchFileKind method since useFsEvents is default
for tsserver and tsc
([#&#8203;51044](https://togithub.com/Microsoft/TypeScript/issues/51044))
-
[`8af9a93`](https://togithub.com/Microsoft/TypeScript/commit/8af9a936b5240398370887c22cacaff65fee707b)
Use typescript.d.ts in APISample tests
([#&#8203;51061](https://togithub.com/Microsoft/TypeScript/issues/51061))
-
[`4953316`](https://togithub.com/Microsoft/TypeScript/commit/49533168dbb4e19f243b9dbdfd6a3aac69f5b3dd)
Remove configureLanguageServiceBuild, instrumenter
([#&#8203;51048](https://togithub.com/Microsoft/TypeScript/issues/51048))
-
[`9dfffd0`](https://togithub.com/Microsoft/TypeScript/commit/9dfffd0fbb406d7f2e5e2ca85768624ca388a7bf)
Update GitHub Actions
([#&#8203;51045](https://togithub.com/Microsoft/TypeScript/issues/51045))
-
[`4635a5c`](https://togithub.com/Microsoft/TypeScript/commit/4635a5cef9aefa9aa847ef7ce2e6767ddf4f54c2)
Update package-lock.json
-
[`33a34e5`](https://togithub.com/Microsoft/TypeScript/commit/33a34e5b96bfe086266f4765ab9789a2a02507f9)
Adding a JSDoc comment to the es5 type declarations to describe the
functionality of Date.now()
([#&#8203;50630](https://togithub.com/Microsoft/TypeScript/issues/50630))
-
[`299745c`](https://togithub.com/Microsoft/TypeScript/commit/299745cb217c2fc061f75b3735f8420d78b8360a)
Fix crash in goto-def on `@override`
([#&#8203;51016](https://togithub.com/Microsoft/TypeScript/issues/51016))
-
[`7dcf11f`](https://togithub.com/Microsoft/TypeScript/commit/7dcf11f13985be927886ebea353d282a9b3418e0)
fix(50750): Object type literal with string literal property in
contextual typing position causes language service error on all literal
type references
([#&#8203;50757](https://togithub.com/Microsoft/TypeScript/issues/50757))
-
[`5cd49f6`](https://togithub.com/Microsoft/TypeScript/commit/5cd49f6cbcd2effe9d425dee3a39cb49209bb656)
Update package-lock.json
-
[`8a1b858`](https://togithub.com/Microsoft/TypeScript/commit/8a1b85880f89c9cff606c5844e8883e5f483c7db)
Update package-lock.json
-
[`96894db`](https://togithub.com/Microsoft/TypeScript/commit/96894db6cb5b7af6857b4d0c7f70f7d8ac782d51)
Include type parameter defaults in contextual typing
([#&#8203;50994](https://togithub.com/Microsoft/TypeScript/issues/50994))
\[
[#&#8203;51002](https://togithub.com/Microsoft/TypeScript/issues/51002)
]
-
[`0d0a793`](https://togithub.com/Microsoft/TypeScript/commit/0d0a79371471d627ae298a145f8009b05cbccb72)
Allow Unicode extended escapes in ES5 and earlier
([#&#8203;50918](https://togithub.com/Microsoft/TypeScript/issues/50918))
-
[`58bae8d`](https://togithub.com/Microsoft/TypeScript/commit/58bae8db69b275a3efa57b14b486778c55185552)
Update package-lock.json
-
[`0ce72ef`](https://togithub.com/Microsoft/TypeScript/commit/0ce72ef6c8b39cd2d07e5b0eb3a0c144a7783ad2)
Add option to OrganizeImports for removal only
([#&#8203;50931](https://togithub.com/Microsoft/TypeScript/issues/50931))
-
[`42f9143`](https://togithub.com/Microsoft/TypeScript/commit/42f9143e114c5c07f40df83ed07ffeb3cbaf2101)
feat: codefix for `for await of`
([#&#8203;50623](https://togithub.com/Microsoft/TypeScript/issues/50623))
-
[`ecf50e8`](https://togithub.com/Microsoft/TypeScript/commit/ecf50e81a7a9cccd9bf5ea7598764082981faab0)
Properly compute `SymbolFlags.Optional` for intersected properties
([#&#8203;50958](https://togithub.com/Microsoft/TypeScript/issues/50958))
-
[`d1586de`](https://togithub.com/Microsoft/TypeScript/commit/d1586de0434567b998876929eb8229235b85b350)
Fully resolve aliases when checking symbol flags
([#&#8203;50853](https://togithub.com/Microsoft/TypeScript/issues/50853))
-
[`45148dd`](https://togithub.com/Microsoft/TypeScript/commit/45148dd715a7c3776840778b4df41e7e0bd0bf12)
Update LKG to 4.8.4
([#&#8203;50987](https://togithub.com/Microsoft/TypeScript/issues/50987))
-
[`9a83f25`](https://togithub.com/Microsoft/TypeScript/commit/9a83f2551ded0d88a0ba0ec9af260f83eb3568cd)
Update package-lock.json
-
[`865848f`](https://togithub.com/Microsoft/TypeScript/commit/865848fcfb9e6ce7dd64be563fc09f83d4bc9df5)
Fix `<=` and `>` comparisons when compared against prerelease versions
([#&#8203;50915](https://togithub.com/Microsoft/TypeScript/issues/50915))
-
[`fbfe934`](https://togithub.com/Microsoft/TypeScript/commit/fbfe9340a90777dee03b30f736fab44056123be0)
Fix comparability between type parameters related by a union constraint
([#&#8203;50978](https://togithub.com/Microsoft/TypeScript/issues/50978))
-
[`b09e93d`](https://togithub.com/Microsoft/TypeScript/commit/b09e93d3f6d3e999df001b53984954974c25b81f)
Merge pull request
[#&#8203;50041](https://togithub.com/Microsoft/TypeScript/issues/50041)
from microsoft/fix/47969
-
[`0ac12bb`](https://togithub.com/Microsoft/TypeScript/commit/0ac12bbe7a410238ca992a42f41816a97f6906f4)
Update package-lock.json
-
[`8192d55`](https://togithub.com/Microsoft/TypeScript/commit/8192d550496d884263e292488e325ae96893dc78)
Pick correct compilerOptions when checking if we can share
emitSignatures
([#&#8203;50910](https://togithub.com/Microsoft/TypeScript/issues/50910))
\[
[#&#8203;50902](https://togithub.com/Microsoft/TypeScript/issues/50902)
]
-
[`16faef1`](https://togithub.com/Microsoft/TypeScript/commit/16faef1d8d522b66b6c672bdd15b4026e2018a62)
During uptodate ness check with buildInfo, check if there are errors
explicitly with noEmit
([#&#8203;50974](https://togithub.com/Microsoft/TypeScript/issues/50974))
\[
[#&#8203;50959](https://togithub.com/Microsoft/TypeScript/issues/50959)
]
-
[`63791f5`](https://togithub.com/Microsoft/TypeScript/commit/63791f52d4e7a3bf461b974e94abd8cbb6b546c5)
Update package-lock.json
-
[`09368bc`](https://togithub.com/Microsoft/TypeScript/commit/09368bcbaebd157d1e66859ab6f5b30c2fd6eaff)
Handle if project for open file will get recollected because of pending
cleanup from closed script info
([#&#8203;50908](https://togithub.com/Microsoft/TypeScript/issues/50908))
\[
[#&#8203;50868](https://togithub.com/Microsoft/TypeScript/issues/50868)
]
-
[`c81bf4d`](https://togithub.com/Microsoft/TypeScript/commit/c81bf4d8b0c12410a082d6598fcc24cc721b6e9e)
fix(49594): Typescript 4.7.3 bracketed class property compilation error
strictPropertyInitialization:true
([#&#8203;49619](https://togithub.com/Microsoft/TypeScript/issues/49619))
-
[`bc9cbbe`](https://togithub.com/Microsoft/TypeScript/commit/bc9cbbef421ae907f7dfd5a84ca69c4f68a8935b)
Merge pull request
[#&#8203;49912](https://togithub.com/Microsoft/TypeScript/issues/49912)
from microsoft/fix/47508
-
[`5a10f46`](https://togithub.com/Microsoft/TypeScript/commit/5a10f46c0028790120cb85c826efa4248707a964)
Update package-lock.json
-
[`8e71f42`](https://togithub.com/Microsoft/TypeScript/commit/8e71f429c811ac7811533d7b0e02c32bad5a1b47)
Fixing pr comments
-
[`c100c64`](https://togithub.com/Microsoft/TypeScript/commit/c100c6488db0482dcc1455290f456dece91cac0a)
Update package-lock.json
-
[`2a91107`](https://togithub.com/Microsoft/TypeScript/commit/2a91107f7548eeb5e32673e76277d27264ea88e2)
Update package-lock.json
-
[`4ab9e76`](https://togithub.com/Microsoft/TypeScript/commit/4ab9e76fb748b08712f9d0017dd8f0ba74d1859f)
Use paths in package.json 'files' array that work with npm 6 and later.
([#&#8203;50930](https://togithub.com/Microsoft/TypeScript/issues/50930))
-
[`549b542`](https://togithub.com/Microsoft/TypeScript/commit/549b5429d4837344e8c99657109bb6538fd2dbb5)
Use paths in package.json 'files' array that work with npm 6 and later.
-
[`7f37d25`](https://togithub.com/Microsoft/TypeScript/commit/7f37d251fc69da34659e4c60792177e1e9a8e7a6)
Update version to 4.9.1-beta and LKG.
-
[`f16ca7d`](https://togithub.com/Microsoft/TypeScript/commit/f16ca7dd364e57ee7ce337f987b20dbc1e34941f)
Remove 'async' dependency, used only in errorCheck.ts, modernize file
([#&#8203;50667](https://togithub.com/Microsoft/TypeScript/issues/50667))
-
[`c6bef3f`](https://togithub.com/Microsoft/TypeScript/commit/c6bef3f02874bddf6df120aa4f0d130c58478468)
LEGO: Merge pull request 50921
-
[`6753027`](https://togithub.com/Microsoft/TypeScript/commit/675302730b8ca525d47c910bf2d3174bd3b66a1b)
Update package-lock.json
-
[`9740bcc`](https://togithub.com/Microsoft/TypeScript/commit/9740bcc53418e8792a4dbb978059ff5a02b55c91)
Pluralized `hasInvalidatedResolution` -> `hasInvalidatedResolutions`
([#&#8203;50912](https://togithub.com/Microsoft/TypeScript/issues/50912))
-
[`84c29cd`](https://togithub.com/Microsoft/TypeScript/commit/84c29cd576fd1facb9b3a353d5342df04acdb184)
🤖 Pick PR
[#&#8203;50912](https://togithub.com/Microsoft/TypeScript/issues/50912)
(Pluralized \`hasInvalidatedResolutio...) into release-4.9
([#&#8203;50913](https://togithub.com/Microsoft/TypeScript/issues/50913))
-
[`a26f634`](https://togithub.com/Microsoft/TypeScript/commit/a26f63424de249bb106804dfc9a024bb525de93e)
Merge remote-tracking branch 'origin/main' into release-4.9
-
[`a455955`](https://togithub.com/Microsoft/TypeScript/commit/a455955aac85ecc5b2182fe50b83670188955feb)
Make hasInvalidatedResolution non internal for program and add it
watchApi
([#&#8203;50776](https://togithub.com/Microsoft/TypeScript/issues/50776))
\[
[#&#8203;48057](https://togithub.com/Microsoft/TypeScript/issues/48057)
]
-
[`645d1cd`](https://togithub.com/Microsoft/TypeScript/commit/645d1cd7c1ee1d65a87b2183b173611467256a09)
Fix assert in addIndirectUser in FAR
([#&#8203;50905](https://togithub.com/Microsoft/TypeScript/issues/50905))
-
[`bbec17d`](https://togithub.com/Microsoft/TypeScript/commit/bbec17d9003246fa00d6bf676bb4ce7c54ff2be4)
LEGO: Merge pull request 50900
-
[`a9ecc67`](https://togithub.com/Microsoft/TypeScript/commit/a9ecc675d636c3bbca697bc4881b019e8645a7a6)
Update package-lock.json
-
[`221cf55`](https://togithub.com/Microsoft/TypeScript/commit/221cf55a21e448bd3fe2cf26a754c9c0dda3dca3)
package.json `exports` should have priority over `typesVersions`
([#&#8203;50890](https://togithub.com/Microsoft/TypeScript/issues/50890))
-
[`acb8977`](https://togithub.com/Microsoft/TypeScript/commit/acb89771901f8c81c6046fa7c16361a83388ddab)
Remove .github/tsc.json
([#&#8203;50664](https://togithub.com/Microsoft/TypeScript/issues/50664))
-
[`7a3de81`](https://togithub.com/Microsoft/TypeScript/commit/7a3de819bfb93fb27ef7ea8305d2df069866c380)
fix(49993): skip the quick fix for an expression with an enum type
([#&#8203;50625](https://togithub.com/Microsoft/TypeScript/issues/50625))
-
[`2644f28`](https://togithub.com/Microsoft/TypeScript/commit/2644f2867734d77a3a3939c55d5cc0a5004df0ed)
fix(49200): skip duplicated method declarations
([#&#8203;50609](https://togithub.com/Microsoft/TypeScript/issues/50609))
-
[`98652a3`](https://togithub.com/Microsoft/TypeScript/commit/98652a349a67be718e8e8b5fcf590972eb62a104)
Bump version to 4.9.0-beta and LKG.
-
[`4d91204`](https://togithub.com/Microsoft/TypeScript/commit/4d91204c9d9f27756785f62fade44d93824d47f4)
fix(37030): Expand Selection in function and arrow function skips body
block
([#&#8203;50711](https://togithub.com/Microsoft/TypeScript/issues/50711))
-
[`e2dd508`](https://togithub.com/Microsoft/TypeScript/commit/e2dd5084f75ac37a78102d212b67d36595596137)
DOM update 2022/09/21
([#&#8203;50884](https://togithub.com/Microsoft/TypeScript/issues/50884))
-
[`1d9ab83`](https://togithub.com/Microsoft/TypeScript/commit/1d9ab83914a551936ce5ef80340ee65cfd1422ba)
fix(50866): emit modifiers from export declarations
([#&#8203;50874](https://togithub.com/Microsoft/TypeScript/issues/50874))
-
[`92a1b12`](https://togithub.com/Microsoft/TypeScript/commit/92a1b124c178e1ff4871b29cb9abc00307e21742)
LEGO: Merge pull request 50877
-
[`e383db6`](https://togithub.com/Microsoft/TypeScript/commit/e383db692eb44561333c1bbe353788b337aebc99)
Fix debug.ts \__debugKind check
([#&#8203;50871](https://togithub.com/Microsoft/TypeScript/issues/50871))
-
[`01054e0`](https://togithub.com/Microsoft/TypeScript/commit/01054e05ab7638e96515619c4ce62200fdf4e0fd)
Consistently add undefined/missing to optional tuple element types
([#&#8203;50831](https://togithub.com/Microsoft/TypeScript/issues/50831))
-
[`d90795e`](https://togithub.com/Microsoft/TypeScript/commit/d90795e799ca8e41aabd6d0852abb585138200ef)
Improve escape sequence handling in private names
([#&#8203;50856](https://togithub.com/Microsoft/TypeScript/issues/50856))
-
[`938a69a`](https://togithub.com/Microsoft/TypeScript/commit/938a69a526166ca4e7880fa140fba432936f0fe3)
Fix import statement completions followed by interface declaration
([#&#8203;50350](https://togithub.com/Microsoft/TypeScript/issues/50350))
-
[`e002159`](https://togithub.com/Microsoft/TypeScript/commit/e002159ad133a024bae48a2e190e54ad93f6b52d)
feat(49962): Disallow comparison against NaN
([#&#8203;50626](https://togithub.com/Microsoft/TypeScript/issues/50626))
-
[`80ae43d`](https://togithub.com/Microsoft/TypeScript/commit/80ae43d2399503a04651e3705823137d36148b00)
Fixing spaces
-
[`abc58bd`](https://togithub.com/Microsoft/TypeScript/commit/abc58bdabcf536bd5204fbc84fb7f45d75f1a9ad)
Fixing baseline errors
-
[`305f4bd`](https://togithub.com/Microsoft/TypeScript/commit/305f4bd420bf9edc0239fd3a740aa83fbdeb9ba2)
Merge branch 'main' into fix/47969
-
[`23746af`](https://togithub.com/Microsoft/TypeScript/commit/23746af766b53fcc3afecfa16478809a5a36628a)
fix(50591): RangeError: Maximum call stack size exceeded
([#&#8203;50594](https://togithub.com/Microsoft/TypeScript/issues/50594))
-
[`168186f`](https://togithub.com/Microsoft/TypeScript/commit/168186f93d23ae59dbea3fea2adba453527343fd)
Allow a union property of a private/protected member and an intersection
property including that same member
([#&#8203;50328](https://togithub.com/Microsoft/TypeScript/issues/50328))
-
[`812ebcf`](https://togithub.com/Microsoft/TypeScript/commit/812ebcf6e3aebfa72b976a6ae4d65929759a2867)
Update package-lock.json
-
[`16156b1`](https://togithub.com/Microsoft/TypeScript/commit/16156b1baf26a39ce428423f7106f3ef2b4e98bb)
Add rules from eslint's recommended set that triggered good lints
([#&#8203;50422](https://togithub.com/Microsoft/TypeScript/issues/50422))
-
[`a11c416`](https://togithub.com/Microsoft/TypeScript/commit/a11c41621bbbab100a391dd348651c6661549663)
Improve checking of `in` operator
([#&#8203;50666](https://togithub.com/Microsoft/TypeScript/issues/50666))
-
[`67f2b62`](https://togithub.com/Microsoft/TypeScript/commit/67f2b62ed2bd1de0299781ba659fa638346bcecf)
Gabritto/jsemitfixsilly
([#&#8203;50849](https://togithub.com/Microsoft/TypeScript/issues/50849))
-
[`3014dec`](https://togithub.com/Microsoft/TypeScript/commit/3014dec8878a9ff8d86186a6ac3fd9fad4f3b739)
Don't elide imports when transforming JS files
([#&#8203;50404](https://togithub.com/Microsoft/TypeScript/issues/50404))
-
[`57c7aa7`](https://togithub.com/Microsoft/TypeScript/commit/57c7aa755ca3028ff13eb6a37d91775a6fac71e3)
LEGO: Merge pull request 50842
-
[`48a8e89`](https://togithub.com/Microsoft/TypeScript/commit/48a8e8953a1e609970dc85e08f99ac499bfe8356)
Improve check of whether type query node possibly contains reference to
type parameter
([#&#8203;50070](https://togithub.com/Microsoft/TypeScript/issues/50070))
-
[`af9ced1`](https://togithub.com/Microsoft/TypeScript/commit/af9ced11f50c8ac15079d2f88f8961f1e5b62f7f)
LEGO: Merge pull request 50825
-
[`a8e13f7`](https://togithub.com/Microsoft/TypeScript/commit/a8e13f7340c5229426072d443fa511bba82a0054)
Fixed an issue with destructured bindings from a generic union
constraint not being narrowed correctly
([#&#8203;50221](https://togithub.com/Microsoft/TypeScript/issues/50221))
-
[`08af0b6`](https://togithub.com/Microsoft/TypeScript/commit/08af0b6bf0041fef52ca8c1b69d6d4a3db439196)
Update package-lock.json
-
[`0df46e8`](https://togithub.com/Microsoft/TypeScript/commit/0df46e873322b8eeb271a442eaf034d91ae68770)
Fix test around RegExp match vs. exec results
([#&#8203;50813](https://togithub.com/Microsoft/TypeScript/issues/50813))
-
[`906510e`](https://togithub.com/Microsoft/TypeScript/commit/906510e0f30590a4c8fdc892905ccb8dbe512e3d)
Fixes for pr
-
[`2970c5d`](https://togithub.com/Microsoft/TypeScript/commit/2970c5d1671b2376711cd55594c4597d6da7d8c3)
make `RegExpExecArray` always include index 0
([#&#8203;50713](https://togithub.com/Microsoft/TypeScript/issues/50713))
-
[`0507192`](https://togithub.com/Microsoft/TypeScript/commit/05071920a03f8ea530fe01f79f2537c999ec8b02)
Accepting baselines
-
[`29e50b3`](https://togithub.com/Microsoft/TypeScript/commit/29e50b314900d22b08f6472918f59ae2b40aba08)
Rewording documentation
-
[`01cae69`](https://togithub.com/Microsoft/TypeScript/commit/01cae69e3403a831bc5c752b95c8b7547dd95821)
fix(50796): omit questionToken in object literal method completions
([#&#8203;50802](https://togithub.com/Microsoft/TypeScript/issues/50802))
-
[`3b84f76`](https://togithub.com/Microsoft/TypeScript/commit/3b84f76fb23bd39d14c7243e5cd495fd207916c0)
Fix crash caused by incorrect bounds check (regression in 4.8)
([#&#8203;50797](https:/

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 3am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/sequelize/umzug).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuODEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
6 participants