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

[WIP] [Relay] Better relay provided props #1

Closed
wants to merge 3 commits into from

Conversation

alloy
Copy link
Owner

@alloy alloy commented Jan 17, 2018

Here’s the WIP code I had for the DT typings based on the progress I had made previously. It does a few things:

  • Removes the this.props.relay prop from the external component props typing.

  • Recasts data props to opaque ‘fragment reference’ types in the external component props typing. In order to do this, you have to use a GeneratedNodeMap rather than a GraphQLTaggedNode, because it allows the TS type system to inflect on the prop names. This is why there are now 4 overloads per container factory function.

The only thing I had not been able to figure out yet was a way to narrow the opaque fragment references such that you can only pass the correct opaque data to the relay container, so in this PR all opaque fragment references are equal.

@kastermester I think you said you had figured out a way to be able to do that, though?

@alloy
Copy link
Owner Author

alloy commented Jan 17, 2018

cc @voxmatt

@alloy alloy changed the title [WIP] Relay better relay provided props [WIP] [Relay] Better relay provided props Jan 17, 2018
@kastermester
Copy link

kastermester commented Jan 17, 2018

My approach was a bit different as I did not use the second generic type, but created the prop types just off of the Props type.

Mind you, I had not yet made an effort to support array props of fragment references properly. The general idea was the one outlined in the issue naming the type of this.props inside the component as P below:

  1. Remove potential property relay from the type P.
  2. For every property type at key K with type KT:
  3. If the key refType exists in properties of KT - set the transformed type of KT to `{ ' fragments': KT[' refType']:
  4. Otherwise set the transformed type of KT to KT
  5. Add a prop named componentRef - in my tests I couldn't figure out how to get this typed correctly, but it needs to be a callback type to the original component instance type.

This means that a type such as:

interface MyProps {
  relay: any;
  myFragmentProp: {
    ' refType': MyFragmentRef;
    ' fragments': MyReferencedFragmentRef;
  };
  myNonFragmentProp: string;
}

would become:

interface MyProps {
  myFragmentProp: {
    ' fragments': MyFragmentRef;
  };
  myNonFragmentProp: string;
}

There's two ways of making unique types (given that one is not interested in runtime semantics) that I know of:

  1. Declare an empty enum
  2. Declare a class with some sort of private member.

Here's a playground showing some dumb initial approach (does not handle array fragment referneces and does not add the componentRef type). It should be doable to see how this can be done however.

EDIT: Was bad at making playground links. You can hover the types in the example to see what they end up as. The ContainerProps is the most interesting one.

@alloy
Copy link
Owner Author

alloy commented Jan 17, 2018

Oh yeah, great solution to finding the relay provided data props! So that removes the requirement to use a map over a tagged node 👍

What isn’t really clear to me is how we can use the enum trick to make sure the right fragment reference is passed to the right container/prop. Would the enum be declared both in the container artefact that defines it (the child component) and the user of the fragment reference (the parent component) and does TS merge them and treat them as equal?

Btw, the actual prop on the opaque fragment reference is called __fragments, so I think we should just use that rather than " fragments" and while not natural in TS I did come to like the use of the $ sign to denote these props being special.

@kastermester
Copy link

Here's how it would work in practice:

File: Container1.ts

export const Container1 = createFragmentContainer(Component1, { data: graphql`fragment Container1_data on MyType { id ...Container2_data }` } );

The generated file for the fragment would look roughly like this (following the naming convention I laid out before):
File: Container1_data.graphql.ts

import { Container2_data$ref } from './Container2_data.graphql';
export const enum Container1_data$ref;
export type Container1_data {
  ' refType': Container1_data$ref;
  ' fragments': Container2_data$ref;
}

So in short: No, the enums are defined once and required and referenced from the other files as they are used.

The way it worked in the relay-compiler last time I looked - was actually that they only supported this behavior when the haste module system was enabled. I meant to talk to you about making a change here in the relay-compiler as well that allows for this to be changed as well. In the repo i invited you to you can see my solution to this issue (there's a comment in the relay-compiler repo regarding fixing this as well).

Here's the comment in the relay repo: https://github.com/facebook/relay/blob/master/packages/relay-compiler/core/RelayFlowGenerator.js#L410

Regarding naming:

I don't think it is really worth it to worry about what the runtime type here is called - the type we're giving it here really has nothing to do with the runtime type either way - and users are not meant to use the __fragments type for anything, it is internal relay usage. I mean, we're talking about typing it up to be an empty enum - which in itself provides no meaningful type - and for good reasons, we just need to identify which fragment this type is originating from - and which fragments it references. I really don't think it benefits anyone to have these types show up in their auto completion list - the data here is not useful by any stretch of the imagination. Personally I'd think it would cause more confusion than good to include an arbitrary property here. But I can be happy either way - if we do go with a property that is not automatically filtered out, I'd probably just create a language server plugin to remove it again.

@alloy
Copy link
Owner Author

alloy commented Jan 17, 2018

So in short: No, the enums are defined once and required and referenced from the other files as they are used.

The way it worked in the relay-compiler last time I looked - was actually that they only supported this behavior when the haste module system was enabled.

Ah ok, I see. Yeah that’s correct.

I assume the reason they didn’t enable that outside of haste is that it would require hardcoding the path to the other artefact and thus also would need to be regenerated when referenced files change location 🤔

I meant to talk to you about making a change here in the relay-compiler as well that allows for this to be changed as well. In the repo i invited you to you can see my solution to this issue (there's a comment in the relay-compiler repo regarding fixing this as well).

Yup, found it. So yeah, generating the path initially should be fine, but I’m slightly worried about the requirement to have to update artefacts that import types from artefacts that have changed location on disk. Do you already have any thoughts about that issue?

Naively I think it would require us to implement a name->pathname map and keep track of changes, which iirc (part of) haste does.

@alloy
Copy link
Owner Author

alloy commented Jan 17, 2018

I don't think it is really worth it to worry about what the runtime type here is called - the type we're giving it here really has nothing to do with the runtime type either way - and users are not meant to use the __fragments type for anything, it is internal relay usage. I mean, we're talking about typing it up to be an empty enum - which in itself provides no meaningful type - and for good reasons, we just need to identify which fragment this type is originating from - and which fragments it references.

It being about data that the user isn’t supposed to use anyways is a very fair point, my note was mostly about “if we need to name it something, why not the name it actually has?”, which leads me to…

I really don't think it benefits anyone to have these types show up in their auto completion list - the data here is not useful by any stretch of the imagination.

Are you saying that properties prefixed with whitespace are automagically removed by IDEs (such as VS Code)? Because that’s definitely a great reason to go with that.

@kastermester
Copy link

kastermester commented Jan 17, 2018

Are you saying that properties prefixed with whitespace are automagically removed by IDEs (such as VS Code)? Because that’s definitely a great reason to go with that.

Yes. You can try it out :)

EDIT: I think it might actually be properties with whitespaces in their name. I'm not sure leading/trailing matters. Furthermore, I'd guess it is simply properties that have names that are not valid identifiers.

@kastermester
Copy link

Yup, found it. So yeah, generating the path initially should be fine, but I’m slightly worried about the requirement to have to update artefacts that import types from artefacts that have changed location on disk. Do you already have any thoughts about that issue?

Naively I think it would require us to implement a name->pathname map and keep track of changes, which iirc (part of) haste does.

Yeah I didn't think about this. We could always decide to support it only when one has decided to use the config option that puts all generated files into the same directory - in which case the import becomes straight forward. It's already an option within the code - but AFAIR there's no CLI argument for it yet.

@kastermester
Copy link

I'm having some trouble creating a type in TS that can read out the element type of an array, given that the type constraints on the generic types are not allowed.

Here's what I've been trying so far:

type ReadArrayElementType<T> = (T & { [key: number]: never })[0];

However this always reads out never. The funny thing is that this technique works just fine for regular string indices, I'm thinking there might be a TS bug hidden here somewhere. Any ideas from any of you?

@alloy
Copy link
Owner Author

alloy commented Jan 20, 2018

@kastermester Can you create a simple playground example that shows the issue?

@kastermester
Copy link

kastermester commented Jan 20, 2018

See this playground.

EDIT: modified the link slightly. It stated previously that T & never = T it is T | never = T.

@kastermester
Copy link

Also see the comments made here by mr. Hejlsberg himself: microsoft/TypeScript#12215 (comment)

@alloy
Copy link
Owner Author

alloy commented Jan 20, 2018

Hmm, yeah, I can’t come up with a solution offhand.

I assume this is for ‘plural’ fragment references? If so, could a workaround be that we define a type for the object boxed in the array in addition to a type for the array? E.g.

export type MyPluralFragmentElement = {
  readonly id: string
  
}
export type MyPluralFragment = ReadonlyArray<MyPluralFragmentElement>

@alloy
Copy link
Owner Author

alloy commented Jan 20, 2018

@DanielRosenwasser Do you happen to know a solution to the above question?

@kastermester
Copy link

kastermester commented Jan 20, 2018

I assume this is for ‘plural’ fragment references? If so, could a workaround be that we define a type for the object boxed in the array in addition to a type for the array? E.g.

I think that is the case yes (I'm actually not sure of which cases the flow array types are used, but it seems reasonable). We might be able to emit some "helper" types for the type that lets us transform it easier.

CC: @ahejlsberg - Is there any way to read out the array element type of an array using techniques as is linked in the playground example? And/or - is it possible that the techniques you used for the Diff, Omit and Overwrite types works differently with string indexers than they do for number indexers?

Edit: Sorry about tagging both of you, thought Daniel was from the relay team, not the typescript team.

@DanielRosenwasser
Copy link

DanielRosenwasser commented Jan 21, 2018

@alloy @kastermester Shoudn't T have an array constraint?

type ReadArrayElementType<T extends Array<any>> = T[number]

That should do it.

Just as a fun fact: you could probably done it the way you have above, but instead of using never (remember, never is the bottom type, it absorbs everything to never in an intersection), you can use what is effectively the top type ({} | null | undefined).

type ReadArrayElementType<T> = (T & Array<{} | null | undefined>)[number]

I'd really recommend going with the first though.

@kastermester
Copy link

kastermester commented Jan 21, 2018

@DanielRosenwasser Yeah, using constraints it is fairly trivial to solve.

The problem at hand is thst we need to take an arbitrary object and transform it, so something like the following type:

type MyType = {
  relay: any;
  fragmentProp: {
    ' $refType': RefType;
  }
  fragmentArrayProp: Array<{
   ' $refType': RefType;
  }>;
  someOtherProp: OtherType;
}

Becomes

type MyTransformedType = {
  fragmentProp: {
    ' fragments': RefType;
  }
  fragmentArrayProp: Array<{
   ' fragments': RefType;
  }>;
  someOtherProp: OtherType;
}

The solution you posted is neat though! Any idea/explanation as to why my attempt works when reading object property types but not for array element types?

@kastermester
Copy link

As far as I can tell this is the last thing we need to get fixed until we’re feature complete at this point. With the above posted type I think my last remaining troubles are fixed. I will try to get working on creating types around the container APIs next time I get some spare time free’d up.

One area we haven’t talked about are the types for the relay prop, which changes based on the container being created and the variables needed for the query (+ maybe the query result, I’m not sure). Should we create base types for the relay prop to cover this?

@DanielRosenwasser
Copy link

I think you want conditional types (microsoft/TypeScript#21316), which are slated for TypeScript 2.8.

The solution you posted is neat though! Any idea/explanation as to why my attempt works when reading object property types but not for array element types?

The problem comes up because when T gets instantiated (for some type that actually has an index signature), you'll have (T & { [x: number]: never })[number] which simplies to T[number] & { [x: number]: never}[number] which simplifies to T[number] & never which simplifies to never. You'd end up with something similar if you used any instead of never.

The solution I recommended gives (T & { [x: number]: {} | null | undefined })[number] simplifying to T[number] & ({} | null | undefined), which for some instantiation of T will give you T[number] & {} | T[number] & null | T[number] & undefined.

@kastermester
Copy link

I think you want conditional types (microsoft/TypeScript#21316), which are slated for TypeScript 2.8.

Awesome, I was unaware that this was on the roadmap! But yes, for most of the issues I'm having here this feature would solve them! (the last thing I'd need is some type subtraction feature - but, disregarding super/sub-typing issues this is a solved thing)

The problem comes up because when T gets instantiated (for some type that actually has an index signature), you'll have (T & { [x: number]: never })[number] which simplies to T[number] & { [x: number]: never}[number] which simplifies to T[number] & never which simplifies to never. You'd end up with something similar if you used any instead of never.

The solution I recommended gives (T & { [x: number]: {} | null | undefined })[number] simplifying to T[number] & ({} | null | undefined), which for some instantiation of T will give you T[number] & {} | T[number] & null | T[number] & undefined.

This makes sense - I just don't get why I don't get the same issue with this piece of code:

type ReadProperty<T, Prop extends string> = (T & { [key: string]: never })[Prop];

Which is basicly T[P] implemented without type constraints, yielding never if T has no property P. It seems to me like string and number indexes works differently?

@kastermester
Copy link

@alloy Having read up briefly on the PR for conditional types I’m thinking our ts typings for the createXContainer methods should probably wait for that feature, it seems like a much more robust solution.

Do you have an idea of any missing parts in your PR there are to type up? (Compat/Classic APIs, the imperative mutations, subscriptions, etc?)

@alloy
Copy link
Owner Author

alloy commented Jan 25, 2018

@kastermester That’s fair. So how about for now we bring this PR into a state where it will satisfy the typings emitted by our TS plugin (i.e. have relay-runtime export ConcreteFragment, ConcreteRequest) and remove the relay prop from the container props interface.

I think we can also still leave the flat single artefacts dir in place and import fragment references, but for now that would only benefit those that use @relay(mask: false), others will need to cast the reference as any before passing it to the child component, like they do now.

@alloy
Copy link
Owner Author

alloy commented Jan 25, 2018

I have not spent any time and effort on Classic/Compat mode, seeing as I no longer use those. Do you wanna take a stab at that?

@kastermester
Copy link

@kastermester That’s fair. So how about for now we bring this PR into a state where it will satisfy the typings emitted by our TS plugin (i.e. have relay-runtime export ConcreteFragment, ConcreteRequest) and remove the relay prop from the container props interface.

I think we can also still leave the flat single artefacts dir in place and import fragment references, but for now that would only benefit those that use @relay(mask: false), others will need to cast the reference as any before passing it to the child component, like they do now.

Alright sounds good.

I have not spent any time and effort on Classic/Compat mode, seeing as I no longer use those. Do you wanna take a stab at that?

I will try to get that into the PR as well. Like I mentioned previously getting classic/compat mode running is quite important to us (at least the compat API should be pretty much similiar to the modern one).

I'm not sure exactly when I'll have time to look at this again, but if I'm lucky I'll have small bits and pieces here and there. Will keep you updated.

@alloy
Copy link
Owner Author

alloy commented Jan 25, 2018

Like I mentioned previously getting classic/compat mode running is quite important to us (at least the compat API should be pretty much similiar to the modern one).

Yup, I totally understand 👍

I suspect the compat one should be easy. If I find time sooner than you, I’ll make the modern and compat ones in order and we can merge those first, because I’m looking to start using this all internally ASAP.

@kastermester
Copy link

kastermester commented Jan 25, 2018

I suspect the compat one should be easy. If I find time sooner than you, I’ll make the modern and compat ones in order and we can merge those first, because I’m looking to start using this all internally ASAP.

Sounds good. FYI here's the thoughts I had regarding the ConcreteFragment and friends.

In the typings, export ConcreteFragment and friends as:

export enum ConcreteFragment {}

In the generated artifacts (for fragments) generate the *_ref (or whatever we end up deciding on as far as naming goes) as:

import { ConcreteFragment } from 'react-relay';
enum MyFragment_ref_type {}
export type MyFragment_ref = MyFragment_ref_type & ConcreteFragment;

And then something similiar for the requests (artifacts for query, mutations and subscriptions).

Then when you need to create a function that takes some kind of fragment you can type it up as (again depending on chosen naming convention):

interface FragmentRef {
  ' refType': ConcreteFragment;
}
export function myFunctionThatNeedsAFragment(fragment: FragmentRef): void;

@kastermester
Copy link

Also: Note that the above stated types are not actually really checked anywhere (ie. it is the return type of the graphql function that is important, it should probably be something like { 'refType': ConcreteFragment & ConcreteRequest }).

Come to think of it, I'm not really sure if modelling and typing this up is that important. Just ensuring some unique type - which is then referenced by all the places where the return type of that function is expected.

@voxmatt
Copy link

voxmatt commented Jan 25, 2018

Hey all, I've been silently watching this; great work. Apologies for not being a help here; work has been incredibly busy of late.

@kastermester
Copy link

No worries @voxmatt :) I think we all know how work can be sometimes :D

@alloy
Copy link
Owner Author

alloy commented Jan 30, 2018

@voxmatt Never need to be sorry for not being able to contribute to OSS!

@alloy
Copy link
Owner Author

alloy commented Jan 30, 2018

@kastermester Btw, why did you opt for type instead of interface for the fragment selections?

@kastermester
Copy link

No particular reason - going with interfaces sounds good :)

@alloy
Copy link
Owner Author

alloy commented Jan 30, 2018

This is what I’m currently writing up as tests for this PR to be examples of artefacts:

enum _TodoItem_item$ref {}
export type TodoItem_item$ref = _TodoItem_item$ref & ConcreteFragment;
interface TodoItem_item {
    readonly text: string;
    readonly isComplete: boolean;
    readonly " $refType": TodoItem_item$ref;
}
enum _FeedStories_feed$ref {}
type FeedStories_feed$ref = _FeedStories_feed$ref & ConcreteFragment;
interface FeedStories_feed {
    readonly stories: {
        readonly edges: ReadonlyArray<{
            readonly node: {
                readonly id: string;
                readonly " $fragmentRefs": Story_story$ref;
            };
        }>;
    };
    readonly " $refType": FeedStories_feed$ref;
}

I chose to prefix the unique enum with an underscore, because it’s really just a part of the exported declaration but because it’s an enum it needs a unique name.

@kastermester
Copy link

@alloy seems good! (assuming you're exporting the interface and the non underscored ref type!

I noticed this PR is now up in the typscript repo as well: microsoft/TypeScript#21496

This should allow us to type up the componentRef prop as well, once TS 2.8 lands. (assuming that PR goes into 2.8).

@kastermester
Copy link

Oh and btw, we should probably look into making the enums const, that way they leave no artifacts when being compiled to JavaScript.

@kastermester
Copy link

kastermester commented Feb 1, 2018

Using the code in that PR I have been able to try out the following:

import { ConcreteFragment } from './ConcreteFragment';
type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T];
type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>;
type InstanceType<T> = T extends new (...args: any[]) => infer U ? U : never;


export type FragmentOrRegularProp<T> = T extends { ' $refType': infer U} ? { ' $fragmentRefs': U } : T;

type NoRelay<T> = Omit<T & { 'relay'?: any }, 'relay'>;

export type MappedFragmentProps<T> = {
	[K in keyof T]: FragmentOrRegularProp<T[K]>;
}

export type ContainerProps<Props, TContainerConstructor> = MappedFragmentProps<NoRelay<Props>> & {
	componentRef?: (ref: InstanceType<TContainerConstructor> | null) => void
};

export type ConstructorProps<T> = T extends React.ComponentClass<infer P> ? P : never;

export declare function createFragmentContainer<TContainer extends React.ComponentClass<any>>(
	Component: TContainer,
	fragmentSpec: any
): React.ComponentClass<ContainerProps<ConstructorProps<TContainer>, TContainer>>;

(Note, I still don't handle array fragments like the flow code, but now it should be more than possible). Also I only deal with components derived from React.Component, but I suspect that should be easy to update.

This properly types the componentRef property. I think we should be able to make an "all magic" approach using this - once TS 2.8 lands.

Great work on the typings so far @alloy :) Looking good.

alloy pushed a commit that referenced this pull request Feb 6, 2018
@alloy
Copy link
Owner Author

alloy commented Feb 6, 2018

Going to close this in favour of DefinitelyTyped#23460. We have a ticket to keep track of all the work we need to do which is discussed here https://github.com/kastermester/relay-compiler-language-typescript/issues/7.

@alloy alloy closed this Feb 6, 2018
alloy pushed a commit that referenced this pull request Aug 16, 2018
alloy pushed a commit that referenced this pull request Sep 19, 2018
alloy pushed a commit that referenced this pull request Sep 19, 2018
Updating Fork with latest commits
alloy pushed a commit that referenced this pull request Sep 19, 2018
…d#28868)

* react-router params can only have a string value

* Update index.d.ts

* Use mapped types and make the type optional

* Fix tests

* trailing whitespace
alloy pushed a commit that referenced this pull request Dec 14, 2020
…rray Tests - Usage Tests Cleanup by @reubenrybnik

* Underscore usage tests - addition, removal, and labeling of tests (#1)

* Removing the EnumerableKey type alias because DT linting is not good at dealing with it between different versions of TypeScript.

(cherry picked from commit abe1df7)

* Adding comments that describe and anchor tests, changing a few tests slightly, and removing some tests.

* Adding some chain tests.

* Fixing spelling error.

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Updating the mixin test to properly augment Underscore types.

* Removing an unnecessary generic type specification.

* Wrapping a comment.

* Referencing DefinitelyTyped#33479 in more places.

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Underscore usage tests - type assertions (DefinitelyTyped#2)

* Adding type assertions to usage tests.

* Minor updates to the bind test.

* Removing comments for chain tests that are already in the chain tests section of the file and updating the chain tests header.

* Breaking a function into multiple lines for better readability.

* Adding a separate toArray test that infers a more interesting type than any[].

* Replacing a movie reference with a more generic example.

* Make indentation more consistent.

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Revert "Replacing a movie reference with a more generic example."

This reverts commit 49c0a79.

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Underscore usage tests - reorganization (DefinitelyTyped#3)

* Removing the combinatorial tests label for types.

* Making to the types section of tests.

* Making updates to the collections section of tests.

* Making updates to the arrays section of tests.

* Making updates to the functions section of tests.

* Making updates to the objects section of tests.

* Making updates to the utility section of tests.

* Making updates to the OOP section of tests and adding an OOP header to UnderscoreStatic.

* Making updates to the chaining section of tests.

* Adding a missing word to a sentence.

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Changing "sorting" to "order" when describing sortedIndex

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Switching "values its keys" to "vice versa"

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Removing an inaccurate "no-op" from a description

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Splitting up comments between calling mixin and augmenting type definitions

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

* Removing an extra memoize header.

* Changing "TSC" to "TypeScript."

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>

Co-authored-by: Julian Gonggrijp <dev@juliangonggrijp.com>
alloy pushed a commit that referenced this pull request Dec 14, 2020
…elyTyped#49560)

* Updated ReactNative NativeEventEmitter

NativeEventEmitter and NativeModule were missing definitions.
- Resolved inability to create/extend NativeEventEmitter in Typescript

* 🤖 Update CODEOWNERS

* 🤖 Merge PR DefinitelyTyped#49389 [text-to-svg] Add definitions by @mormahr

* Add definitions for text-to-svg

* [text-to-svg] use class template structure

* [text-to-svg] Add anchor option defaults

* 🤖 Merge PR DefinitelyTyped#49334 [bull-arena] Remove bull-arena heavy dependencies by @bogdan

* 🤖 Merge PR DefinitelyTyped#49434 update firefox-webext-browser to v82 and fix a bunch of stuff by @jsmnbom

* Update to 82.0 and fix many issues

* Fix tab width so it's 4 like before

* 🤖 Merge PR DefinitelyTyped#49402 Add types for the eev package by @borisStanojevic

* Added types for eev package

* Added types for eev package

* Added types for eev package

* Added types for eev package

* Added types for eev package

* Added types for eev package

* Added types for eev package

* Added types for eev package

Co-authored-by: boris.stanojevic <boris.stanojevic@doctorcareanywhere.com>

* 🤖 Merge PR DefinitelyTyped#48870 Add types for Skilja package (array chunker) by @stscoundrel

* Add types for Skilja package

* Update types/skilja/skilja-tests.ts

Co-authored-by: Andrew Branch <andrewbranch@users.noreply.github.com>

* Update types/skilja/index.d.ts

Co-authored-by: Andrew Branch <andrewbranch@users.noreply.github.com>

Co-authored-by: Andrew Branch <andrewbranch@users.noreply.github.com>

* [node] Catch up assert typesVersions <= 3.6 (DefinitelyTyped#49363)

* 🤖 Merge PR DefinitelyTyped#49126 Add types for branca by @BrettIRL

* Add types for tuupola/branca-js

* Decode never returns Error

Co-authored-by: Brett <brett@pop-os.localdomain>

* Create definition for use-synced-local-storage@1.0 (DefinitelyTyped#49426)

* remove(diff2html): remove package (DefinitelyTyped#49424)

Ships as proper TypeScript from version 3.0.0 onwards:

https://github.com/rtfpessoa/diff2html/releases/tag/3.0.0

Thanks!

* 🤖 Merge PR DefinitelyTyped#49381 Updated prosemirror-model to include `hasRequiredAttrs` to `NodeType` by @biw

* Added `hasRequiredAttrs` to `NodeType`

`hasRequiredAttrs` is listed [in the reference](https://prosemirror.net/docs/ref/#model.NodeType) but not the typescript .d.ts

* Update index.d.ts

* Added semi

* IITC (Ingress Intel Total Conversation) types (DefinitelyTyped#49423)

* Add IITC (Ingress Intel Total Conversation) types

* Fix  @types dependencies

* Fix dependencies

no idea how to keep old version dependencies
old iitc 0.26 use old leaflet 0.7

* Remove highlight.js typings (DefinitelyTyped#49293)

* Remove highlight.js typings

highlight.js provides its own typings as of 10.1.0.

* Add back 'highlightjs' typings that point to highlight.js

* Fix dependencies using DT typings for old versions of highlight.js

* Add old @types/highlight.js to remarkable test dependencies

* Add old @types/highlight.js to markdown-it test dependencies

* Update index.d.ts (DefinitelyTyped#49230)

Add missing type to react-cytoscape

* Add new types: Cookie clicker (DefinitelyTyped#49418)

* Add intermediate definitions (@types/cookiclicker)

* cookieclicker: Polish the typings

* cookieclicker: Add temple minigame

* cookieclicker: Add grimoire minigame

* cookieclicker: Complete the typings

* cookeiclicker: Update registerHook

* cookieclicker: Emergency tab fix

* cookieclicker: Add minor changes

* cookieclicker: Update small mistakes

* cookieclicker: Add bob to owner list

* remove(comment-json): remove definition (DefinitelyTyped#49414)

`comment-json` ships its own definition starting 2.4.1:

https://github.com/kaelzhang/node-comment-json/blob/420a7fc91a7f0a4ab565ad0e329cff110b624edb/README.md#L58

Thanks!

* toastify-js types definition (DefinitelyTyped#49411)

* Add types for @rails/ujs (DefinitelyTyped#49395)

* add typing for @rails/ujs

* fix wrong return types

* respect configs of rails__activestorage

* add features typings

* buttonClickSelector can be represented with internal type

* delegate can accept document or window (not only Element)

* add test cases

* fix offenses alerted by dtslint

* prefer unknown (rather than any)

* add test case for Rails.$

* unnest directories so that import path looks more like rails-ujs project structure

* npm-naming lint rule looks not needed actually

* autogenerated github url is wrong

* features/* are not exported

* Rails.confirm should return boolean

* enableElement has same params as disableElement

* AjaxOptions['data'] should be same as param of xhr.send()

* add options for Rails.ajax()

* fix: SelectorObject had a wrong type

* fix dtslint errors

* add abcang as a owner

Co-authored-by: abcang <abcang1015@gmail.com>

* fix sample code event name

* add test cases for internal methods

* test file should not use optional chaining for backward compatibility

* add more strict version of Rails.delegate() for event name intellisense

* this of handler should not be inferred, since it is decided by selector, not element

Co-authored-by: abcang <abcang1015@gmail.com>

* [koa-generic-session] Add the missing `cookie.overwite` field. (DefinitelyTyped#48561)

See https://github.com/pillarjs/cookies#cookiesset-name--value---options-- for details.
This doc is referenced from the repo at https://github.com/koajs/generic-session#options.

The changes is one line of code and one line of test but running prettier adds a lot of minor diffs.

* update(mailparser): version bump and minor changes (DefinitelyTyped#47743)

This commit:
- bumps version to latest major (which seems to be non breaking one):
nodemailer/mailparser@v2.8.1...v3.0.0
- simplifies DT by removing linter exclusion and applying required
  changes
- maintainer added

Thanks!

* update(useragent): v2.3 (DefinitelyTyped#48286)

- minor verison bumpt
- defaults documented for constructors
- simplify package defintion (backwared compatible)
- maintainer added

3rd-Eden/useragent@2.2.1...master

Thanks!

* update(ratelimiter): version 3.4 update and other changes (DefinitelyTyped#47955)

This introduces minor updates from 3.4, while at the same time exporting
types from the module:
- new creation options
- new properties in results
- version bump
- export types properly
- tests amended
- mantainer added

tj/node-ratelimiter@v2.1.1...v3.3.1#diff-168726dbe96b3ce427e7fedce31bb0bc

Thanks!

* update(js-beautify): re-export types for CJS and  minor rversion bump (DefinitelyTyped#46933)

I cannot re-use the module types in proper CJS code, this change is
expected to be backward compatible (no code rewwrite required), while
allowing to import required details in CJS ecosystem:

- re-exported types for CJS consumption without rewriting global export
  code
- tests amended
- minor version bump
- mantainer added

beautifier/js-beautify@v1.11.0...v1.13.0

Thanks!

* feat(wait-on): add options for 5.2 (DefinitelyTyped#48535)

* types for simpleddp (DefinitelyTyped#49003)

* simpleddp package

* compatibility updates

* handle rest params

* handle rest params for subscription

* handle rest params

* some more generics

* subscribe optional rest

Co-authored-by: Aleksandras Kamyšanskis <akamysanskis@solutionlab.net>

* 🤖 Merge PR DefinitelyTyped#48905 [@types/chroma-js] Add missing color.mix method by @tremby

* [d3] Bump types to v6.1 (DefinitelyTyped#49415)

* Added definitions for Common class (DefinitelyTyped#49416)

* added type definitions for Common class

* edit for linter

* small edits to random and choose methods

* Add request argument in handleUpgrade (DefinitelyTyped#49422)

ref: websockets/ws@7d39f19

* Add isDisabled to IndicatorProps (DefinitelyTyped#49428)

Essentially this is JedWatson/react-select#4219 but for IndicatorProps

* add options for Container.wait (DefinitelyTyped#49430)

* 🤖 Merge PR DefinitelyTyped#46576 Rewrite (thereby fix) types for express-session (second attempt) by @HoldYourWaffle

* Rewrite (thereby fix) types for express-session

Supersedes DefinitelyTyped#41809

Fixes DefinitelyTyped#4126
Fixes DefinitelyTyped#16480
Fixes DefinitelyTyped#18527
Fixes DefinitelyTyped#18529

* Fix broken downstream typings

* Fix broken notNeededPackages.json edit

* 🤖 Merge PR DefinitelyTyped#49439 update(toastify-js): UMD support, missing options by @peterblazejewicz

This commit:
- adds support for UMD usage (module or global script)
- rename 'args' to 'options' - as per original package usage and
  documentation
- 'avatar' option
- 'reposition' static-like method support
- tests amended
- mantainer added

https://github.com/apvarun/toastify-js/blob/master/src/toastify.js

Thanks!

* 🤖 Merge PR DefinitelyTyped#49435 Correct the type of dat.gui __folders by @danvk

* 🤖 Merge PR DefinitelyTyped#48493 [nodemailer-mailgun-transport]: add alias apiKey by @zgid123

* 🤖 Merge PR DefinitelyTyped#48961 [alexa-sdk] Remove types by @jablko

* 🤖 Merge PR DefinitelyTyped#49165 Updates type definitions from sharp 0.26.0 to support animated GIF and WEBP formats. by @ShaneSP

* Update type definitions for sharp 0.26.0

* Adds comment describing that using GIF options for output image requires libvips custom compilation

* Re-ran
> definitely-typed@0.0.3 lint /Users/shanesteele-pardue/Documents/open-source/DefinitelyTyped
> dtslint types "sharp" after adding comments.

Co-authored-by: Shane Steele-Pardue <shane.steele-pardue@onecowstanding.com>

* 🤖 Merge PR DefinitelyTyped#49437 [scriptable-ios]: change addSpacer to accept no parameters by @schl3ck

* 🤖 Merge PR DefinitelyTyped#49445 [@brainhubeu/react-carousel] fix: DotsProps missing className by @Semigradsky

* 🤖 Merge PR DefinitelyTyped#49449 [mapbox-gl] map.addImage() supports ImageBitmap as image by @fishead

* update mapbox-gl types

map.addImage() supports `ImageBitmap` as image.

https://github.com/mapbox/mapbox-gl-js/blob/v1.12.0/src/ui/map.js#L1567-L1568

* chore(mapbox-gl): add tests

* add missing semicolon

* 🤖 Merge PR DefinitelyTyped#49452 [mapbox-gl] Add Expression type to *-sort-key properties by @tengl

* 🤖 Merge PR DefinitelyTyped#49392 fundamental-react: update new Tile type and tests by @ThomHuynh

* draft new Tile type and tests

* remove outdated Tileprop 'active' and refactor class Tile to FC

* remove faulty changes

* fix format for linter

Co-authored-by: Luu-Quan Thom Huynh <luu-quan.thom.huynh@sap.com>

* 🤖 Merge PR DefinitelyTyped#49432 Update snowpack-env to fix bug introduced in last change by @FredKSchott

* Update index.d.ts

* Update index.d.ts

* Update snowpack-env-tests.ts

* 🤖 Merge PR DefinitelyTyped#49451 cookieclicker: Fix minor mistakes by @TheGLander

* cookieclicker: Fix minor mistakes

* cookieclicker: Add new tests

* cookieclicker: Fix Mod interface mistake

* fix(js-beautify): correct exported lib types (DefinitelyTyped#49457)

* fix(js-beautify): correct exported lib types
last PR that landed (DefinitelyTyped#46933) caused a regression. see discussion at thread.

* fix: adjust gulp-json-editor to new types

* add types for similarity (DefinitelyTyped#49460)

* add type definitions for base64id (DefinitelyTyped#49454)

* Add umami type definitions (DefinitelyTyped#49453)

* Add umami type definitions

* Fix forgotten author link in umami definition

* Type definitions for rrdir 8.2 (DefinitelyTyped#49448)

* add rrdir

* remove it

Co-authored-by: nzhang4 <nzhang4@stubhub.com>

* [mongoose] add missing option "overwrite" to interface QueryFindOneAndUpdateOptions (DefinitelyTyped#49047)

* [mongoose] add missing overwrite option to interface QueryFindOneAndUpdateOptions

* update version

* [gatsby-transformer-remark] Add types (DefinitelyTyped#49443)

* [office-js] [office-js-preview] (Outlook) Body.prependAsync behavior (DefinitelyTyped#49466)

* 🤖 Merge PR DefinitelyTyped#49262 [creditkey-js] Add a typed version of the creditkey-js package by @TristanTaradel

* credit-key files including tests

* fixing tslint errors

* made file prettier

* added comment to top of file

* added header to match other projects

* change tslint extend

* remove patch version

* update definitions by line

* prettified tests file

* removed dom and changed tests to exclude console logging, also changed to directly export instead of creating a module

* Update iitc header (DefinitelyTyped#49472)

It's now on npm, so doesn't need the non-npm marker

* fix(express): point `express.static` to `serve-static` with generic as `express.Response` (DefinitelyTyped#48964)

* 🤖 Merge PR DefinitelyTyped#49391 [@types/carbon-components-react] Update "value" type of NumberInput to contain empty string by @baeharam

Signed-off-by: mazino <mazino@spoqa.com>

* Add `dispose` methods for Mocha (DefinitelyTyped#49382)

* Reorganize methods.

* Add dispose methods to Mocha.

* 🤖 Merge PR DefinitelyTyped#49302 add jrf-pip npm package by @jirufik

* add jrf-pip npm package

* refactor type any to T in jrf-pip

* Support flashScrollIndicators on react native ScrollView (DefinitelyTyped#49463)

* 🤖 Merge PR DefinitelyTyped#49483 react-date-range: Add classNames prop to CommonCalendarProps by @janizde

* add classNames prop to CommonCalendarProps

* bump version number

* remove patch from version number

* remove trailing whitespace

* README: update and sync TOC & headers (DefinitelyTyped#49489)

* 🤖 Merge PR DefinitelyTyped#49270 Add sphere-engine package by @Eggbertx

* Add sphere-engine types

* Add required tsconfig keys and documentation URLs

* Fix dtlint errors

* Rename sphere-engine to sphere-engine-browser

* Clarify that sphere-engine is a non-npm package

* re-add version to index.d.ts

* disable npm-naming

* replace tabs with spaces

* Move 1.x API into subdirectory

* Remove unnecessary comments, use standard API version

Co-authored-by: Eggbertx <eggbertx@users.noreply.github.com>

* Add type definitions for arrive.js (DefinitelyTyped#49488)

* Add type definitions for arrive.js

* Use Element instead of HTMLElement

* update(stopword): v1 update (DefinitelyTyped#48666)

- new languages added
- version bump
- support for browser via global script export
- naming aligned with package README
- mantainer added

fergiemcdowall/stopword@v0.3.5...v1.0.3

Thanks!

* [applicationinsights-js] Remove types (DefinitelyTyped#49496)

* Remove self from Definitions for `type/youtube` (DefinitelyTyped#49493)

* fix(braintree): updates bt dropin web definitions (DefinitelyTyped#49491)

The braintree-web-drop-in definitions were a little bit incomplete and
also wrong in some cases. All types are available in BT's JSDoc:

https://braintree.github.io/braintree-web-drop-in/docs/current/module-braintree-web-drop-in.html#.create

* [@types/fs-extra] match types for create and ensure (DefinitelyTyped#49490)

* fix(fs-extra): match types for create and ensure

* chore: linting

* chore: linting

* [webpack] pitch loader has a this context (DefinitelyTyped#49482)

* Update type definitions for rrdir 8.2 (DefinitelyTyped#49474)

* add rrdir

* remove it

* Update index.d.ts

Co-authored-by: nzhang4 <nzhang4@stubhub.com>

* webpack: added asset types (DefinitelyTyped#49471)

* chore(webpack): added asset types

* support string in loaderCallback sourcemap

* 🤖 Merge PR DefinitelyTyped#49477 Updated onChange parameters to include selection key by @charliemday

* Add ContainerProps to react-select exports

* Combined container exports

* Updated onChange parameter type

* Fixed test and extended onChangeProps

* 🤖 Merge PR DefinitelyTyped#49455 [@entropy/winston-elasticsearch-apm] feat: adding types to @entropy/winston-elasticsearch-apm by @michael-vasyliv

* feat: adding types to @entropy/winston-elasticsearch-apm

* refactor: removing extra rule

* fix: removing elastic-apm-node from notNeededPackages.json

* refactor: removing an extra package

* Revert "fix: removing elastic-apm-node from notNeededPackages.json"

This reverts commit 6b6faaf.

* build: trigger build

* refactor: removing extra comment

* refactor: changing order of packages in package.json

* refactor: adding `export =`

* refactor: removing extra rule

* refactor: removing empty object

* 🤖 Merge PR DefinitelyTyped#49481 [next-auth] add `scope?` on `ProviderLinkedInOptions` by @kulbon

Co-authored-by: Konrad Kuliś <konrad@krakweb.pl>

* 🤖 Merge PR DefinitelyTyped#48206 [@types/jsx-pdf] add missing SVG props by @k-yle

* add missing SVG props

* add QR code and Fragment

* 🤖 Merge PR DefinitelyTyped#49248 Update awsProvider.d.ts in serverless by @BaptistG

Add metrics to the ApiGateway Interface

* react-native-wol types (DefinitelyTyped#49509)

* Add definition of react-native-wol

* Wrapped function in module declaration.

* Added tests and rewrote to make tests pass

* 🤖 Merge PR DefinitelyTyped#49425 [server-destroy] Fix types and update tests by @xapdkop

* Fix types and update tests

Use net.Server instead of http.Server (since http.Server based on net.Server)

This will allow to use package not only for http.Server but also for http2.Http2Server and http2.Http2SecureServer (and any other servers based on net.Server)

* Correct `callback` type

It should be the same as the `callback` parameter of  net.Server.close

* Revert the declaration version to 1.0

Should be the same as the version of server-destroy

* Updated IndicatorState Props (DefinitelyTyped#49505)

* `react-aria-menubutton`: correct defaults (DefinitelyTyped#49506)

* @mapbox/polyline: represent latlngs as [number, number] (DefinitelyTyped#48644)

* [@types/kurento-client] Add classes, events and complexTypes and fix bugs (DefinitelyTyped#47756)

* Update @types/kurento-client adding a new classes and some callbacks to existent classes

* Update kurento-client reordering objects based on dependencies

* Update kurento-client fixing WebRtcEndpoint event listener

* Update kurento-client introducing BaseEvent and Event type and updating EventEmitter.on()'s type annotations

* Updating kurento-client applying prettier to kurento-client-test.ts

* Update kurento-client reordering complexTypes

* Update kurento-client adding tests

* Fixed @types/async whilst type def (DefinitelyTyped#47649)

Co-authored-by: Itay Levy <itayl@ironsrc.com>

* feat(@babel/template): Update to v7.4 (DefinitelyTyped#47140)

* 🤖 Merge PR DefinitelyTyped#49479 fix(express-session): remove unnecessary needed guard for "initialized" sessions by @simllll

* 🤖 Merge PR DefinitelyTyped#49476 Type Definition for beautify 0.0.8 by @Edward-Roshan

* add definition

* update

* update

seems should be like this

Co-authored-by: nzhang4 <nzhang4@stubhub.com>

* 🤖 Merge PR DefinitelyTyped#49468 Natural: Add missing tokenizer definitions by @thatcort

* Add missing tokenizers

* Add AggressiveTokenizerNl

* Natural: Add test for SentenceTokenizer

Co-authored-by: Brian Cort <brian@pienso.com>

* 🤖 Merge PR DefinitelyTyped#49333 Add barcodes types to the node onfleet types by @jtassin

* 🤖 Merge PR DefinitelyTyped#48893 Update Serial types to line up with Chrome 86.0.4240.75 changes by @maciejmrozinski

* 🤖 Merge PR DefinitelyTyped#49540 [@types/ffmpeg] Fix ffmpeg typos, add documentation and tests by @vladpirlog

* ✏️ Fix types/ffmpeg typos

* 📝 Add documentation for functions

* ✅ Add tests for type definitions

* 🤖 Merge PR DefinitelyTyped#49543 fix(express-mysql-session): Update MySQLStoreClass to inherit expressSession.Store by @Aki-7

express-session.Store

* Resolved pullrequest comments 49560 #1 and DefinitelyTyped#2

* Ran Prittier on both react-native and test

Co-authored-by: TS Bot <bot@typescriptlang.org>
Co-authored-by: Moritz Mahringer <me@moritzmahringer.de>
Co-authored-by: Bogdan Gusiev <agresso@gmail.com>
Co-authored-by: Jasmin Bom <jsmnbom@gmail.com>
Co-authored-by: Boris Stanojevic <borisstanojevicfkkt@gmail.com>
Co-authored-by: boris.stanojevic <boris.stanojevic@doctorcareanywhere.com>
Co-authored-by: Sampo Silvennoinen <20028934+stscoundrel@users.noreply.github.com>
Co-authored-by: Andrew Branch <andrewbranch@users.noreply.github.com>
Co-authored-by: Jack Bates <jack@nottheoilrig.com>
Co-authored-by: Brett <brett@trademarktechnology.co.za>
Co-authored-by: Brett <brett@pop-os.localdomain>
Co-authored-by: Stanislav Termosa <termosa.stanislav@gmail.com>
Co-authored-by: Piotr Błażejewicz (Peter Blazejewicz) <peterblazejewicz@users.noreply.github.com>
Co-authored-by: Ben Williams <ben@719ben.com>
Co-authored-by: McBen <viertelvor12@gmx.net>
Co-authored-by: Wilson Gramer <12683684+WilsonGramer@users.noreply.github.com>
Co-authored-by: zalmane <oren.elias@gmail.com>
Co-authored-by: TheGLander <34986581+TheGLander@users.noreply.github.com>
Co-authored-by: Blanc Adrien <ifreezback@gmail.com>
Co-authored-by: fsubal <fsubal@users.noreply.github.com>
Co-authored-by: abcang <abcang1015@gmail.com>
Co-authored-by: Victor Berchet <victor@suumit.com>
Co-authored-by: Andrew Leedham <AndrewLeedham@outlook.com>
Co-authored-by: SPWizard01 <the.mtrix@gmail.com>
Co-authored-by: Aleksandras Kamyšanskis <akamysanskis@solutionlab.net>
Co-authored-by: Bart Nagel <bart@tremby.net>
Co-authored-by: Nathan Bierema <nbierema@gmail.com>
Co-authored-by: rgreen32 <35779241+rgreen32@users.noreply.github.com>
Co-authored-by: Shrujal Shah <shrujalshah@hotmail.com>
Co-authored-by: charliemday <45036245+charliemday@users.noreply.github.com>
Co-authored-by: 황승현 <lesomnus@gmail.com>
Co-authored-by: Ravi van Rooijen <ravivanrooijen@live.nl>
Co-authored-by: Dan Vanderkam <danvk@sidewalklabs.com>
Co-authored-by: Dương Tấn Huỳnh Phong <alphanolucifer@gmail.com>
Co-authored-by: Shane Steele-Pardue <shanesp@live.unc.edu>
Co-authored-by: Shane Steele-Pardue <shane.steele-pardue@onecowstanding.com>
Co-authored-by: schl3ck <42554556+schl3ck@users.noreply.github.com>
Co-authored-by: Dmitry Semigradsky <semigradskyd@gmail.com>
Co-authored-by: Chuan Zh <zhchuan7@gmail.com>
Co-authored-by: Tomas Englundh <github@tengl.dev>
Co-authored-by: ThomHuynh <59808215+ThomHuynh@users.noreply.github.com>
Co-authored-by: Luu-Quan Thom Huynh <luu-quan.thom.huynh@sap.com>
Co-authored-by: Fred K. Schott <fkschott@gmail.com>
Co-authored-by: Avi Vahl <avi.vahl@wix.com>
Co-authored-by: Christian Murphy <christian.murphy.42@gmail.com>
Co-authored-by: Shadman Kolahzary <shadman.ko@gmail.com>
Co-authored-by: Noah Overcash <me@ncovercash.dev>
Co-authored-by: Tekdycaml <zhang_nan_163@163.com>
Co-authored-by: nzhang4 <nzhang4@stubhub.com>
Co-authored-by: Reece Adamson <41651655+radamson@users.noreply.github.com>
Co-authored-by: Emily Marigold Klassen <forivall@gmail.com>
Co-authored-by: Elizabeth Samuel <elizs@microsoft.com>
Co-authored-by: TristanTaradel <50833459+TristanTaradel@users.noreply.github.com>
Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>
Co-authored-by: Devansh Jethmalani <jethmalani.devansh@gmail.com>
Co-authored-by: 배하람 <hisfedev@gmail.com>
Co-authored-by: Daniel Rosenwasser <DanielRosenwasser@users.noreply.github.com>
Co-authored-by: jirufik <42334265+jirufik@users.noreply.github.com>
Co-authored-by: Alpha <alpha0010@users.noreply.github.com>
Co-authored-by: Jannik Portz <janizde@users.noreply.github.com>
Co-authored-by: Eli Barzilay <eli@barzilay.org>
Co-authored-by: Eggbertx <76852+Eggbertx@users.noreply.github.com>
Co-authored-by: Eggbertx <eggbertx@users.noreply.github.com>
Co-authored-by: Vijay Pemmaraju <vijayvmp@gmail.com>
Co-authored-by: Daz Wilkin <DazWilkin@users.noreply.github.com>
Co-authored-by: Ricard Solé <3116474+iamricard@users.noreply.github.com>
Co-authored-by: Gray Zhang <otakustay@gmail.com>
Co-authored-by: hiroki <hiroki.osame@gmail.com>
Co-authored-by: Michael <mihail.vasyliv.mail@gmail.com>
Co-authored-by: Konrad <32324644+kulbon@users.noreply.github.com>
Co-authored-by: Konrad Kuliś <konrad@krakweb.pl>
Co-authored-by: Kyℓe Hensel <k-yle@users.noreply.github.com>
Co-authored-by: Baptiste Guerin <38328426+BaptistG@users.noreply.github.com>
Co-authored-by: Keana Delmotte <keana.delmotte@gmail.com>
Co-authored-by: Anatoly Pitikin <xapdkop@outlook.com>
Co-authored-by: Oliver Joseph Ash <oliverjash@gmail.com>
Co-authored-by: Joshua Horowitz <joshuah@alum.mit.edu>
Co-authored-by: Yuichiro Tsuchiya <t.yic.yt@gmail.com>
Co-authored-by: Itay Levy <levyitay@gmail.com>
Co-authored-by: Itay Levy <itayl@ironsrc.com>
Co-authored-by: ExE Boss <3889017+ExE-Boss@users.noreply.github.com>
Co-authored-by: Simon Tretter <simllll@users.noreply.github.com>
Co-authored-by: Brian Cort <12662578+thatcort@users.noreply.github.com>
Co-authored-by: Brian Cort <brian@pienso.com>
Co-authored-by: Julien TASSIN <julien.tassin.pro@gmail.com>
Co-authored-by: Maciej Mroziński <maciej.k.mrozinski@gmail.com>
Co-authored-by: Vlad Pirlog <avi.pirlog@gmail.com>
Co-authored-by: Akihrio Kiuchi <44729662+Aki-7@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
4 participants