meetecho / janode

A Node.js adapter for the Janus WebRTC server
ISC License
98 stars 36 forks source link

Type defs #5

Open augustblack opened 2 years ago

augustblack commented 2 years ago

Here is a potential first start at typescript definitions for janode.

I did my best to create the defs without introducing any extra tooling. All defs live under ./types. However, it does require modifying the package.json I believe that since you require a minimum of node 14, this should be fine. To use with typescript, one will need a recent 4.7 and set ["moduleResolution": "nodenext"] in the tsconfig.json

I'd be happy to do my best to maintain the types moving forward

atoppi commented 2 years ago

Thanks @augustblack for the huge work! I'll take a look in the next few days.

augustblack commented 2 years ago

Thanks @augustblack for the huge work! I'll take a look in the next few days.

Alright, let me know. Happy to make adjustments if needed. I'm concerned that the way I have it set up requires a nightly build of typescript. Only the most recent typescript will recognize the "import": { "types" :... } format in package.json

Maybe there is a better way to organize the definitions for less bleeding-edge implementations.

This is my first time trying to package ts definitions.

atoppi commented 2 years ago

I'm concerned that the way I have it set up requires a nightly build of typescript.

I agree, if a not-stable version of TS is needed I guess this can not be considered for merging now.

This is my first time trying to package ts definitions.

Me too :-) Need to gather some data before reviewing / enhancing.

I'm converting the PR to "draft" since I suspect more work is definitely needed.

augustblack commented 2 years ago

I'm concerned that the way I have it set up requires a nightly build of typescript.

I agree, if a not-stable version of TS is needed I guess this can not be considered for merging now.

This is my first time trying to package ts definitions.

Me too :-) Need to gather some data before reviewing / enhancing.

I'm converting the PR to "draft" since I suspect more work is definitely needed.

No problem. Fwiw. the definitions work great and I don't suspect it will be long before TS 4.7 is released.

AFACT, if we could pull the defs into a single .d.ts , then we shouldn't have issues with TS < 4.7

The problem is the subpath import structure you have with janode and trying to match that in the type defs.

For example, you import for JS with:

import Janode from 'janode';
import AudioBridgePlugin from 'janode/plugins/audiobridge';

Having the TS defs mimic the subpath audiobridge plugin import is the hard part. To do so, we need to afaict have the defs in a similar folder structure. However, only TS 4.7 can read package.json in such a way as I have in this pull request to define the subpath imports.

Currently, this PR does it so:

import Janode from 'janode';
import Connection from 'janode/connection';
import Session from 'janode/session';
import AudioBridgePlugin from 'janode/plugins/audiobridge';

If you like, I could clean it up into one .d.ts file and have import on the TS side do something like:

import Janode, {Connection, Session, AudioBridgePlugin } from 'janode';

That would, however, cause conflicts I imagine when you are pulling the type definition for the AudioBridgePlugin from 'janode', but the actual code from 'jandoe/plugins/audiobridge'

Maybe there is a way to do a single .d.ts file and still import from a subpath like janode/plugins/audiobridge, but I couldn't find it. The only way I could find to do the subpath import was the one proposed in this PR that requires the newest TS version.

Thanks for the consideration and happy to follow any suggestions you have.

augustblack commented 2 years ago

I fixed a few minor things. I'm sure as I test this out, there will be more.

To test, you will need to add to your project where using janode:

npm install -D typescript@beta.

nightly isn't needed, beta is enough. Fwiw, the TS 4.7 should be released by the end of May.

and then in tsconfig.json for your project, be sure to set:

"moduleResolution": "nodenext",

No hurry on my part for the merge (if at all).

From what I can tell, this PR has no intrusion on the JS side of things and should be safe to merge. If anything, it might encourage other to contribute.

rchoffar commented 2 years ago

Thx i was looking for this ! Works well with typescript !

augustblack commented 2 years ago

That's great, @rchoffar

I've only been using it on the audiobridge. Please let me know if there are any type issues with the other plugins.

rchoffar commented 2 years ago

I tried to use it with videoroom plugin and it worked well on 0.x Unfortunetly i switched to janus 1.x and Janode is not compatible with it. This is not related to your PR.

atoppi commented 2 years ago

@rchoffar what is not compatible with 1.x ? janode does not still support multistream syntax, but it should work on janus 1.x using the 0.x syntax. Indeed I regularly use janode with janus 1.x.

If you discovered something that is not working please submit a new issue.

rchoffar commented 2 years ago

@atoppi No sry that's not what i wanted to say, i wanted to upgrade to 1.x in order to use multistream features but janode does not support multistream syntax as you said.

augustblack commented 2 years ago

fwiw, typescript 4.7 has been out for a while now.

making things work is now as simple as: npm install -D typescript

capital-G commented 1 year ago

Any news on this?

alexandermaisey commented 4 months ago

Hello, is there any update on this PR?

atoppi commented 4 months ago

I just noticed that my comments have never received response @augustblack

augustblack commented 4 months ago

I've been updating the ts defs for the audiobridge and streaming plugins incrementally as I am working on my project, but I don't think I'll have the capacity to maintain the type defs for all plugins as janode develops, or even keep things up to date.

I personally think it would be less work and more appropriate to convert janode to TS. #24

Is there any desire to move in that direction? I wish I could help out more.

atoppi commented 3 months ago

@augustblack not planned migrating to TS in the short term unfortunately. I guess we need to find some time to properly support type defs.