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

TypeScript Definition for Cytoscape.js - It is being worked on now! #1012

Open
Cyberider opened this issue Jul 15, 2015 · 56 comments
Open

TypeScript Definition for Cytoscape.js - It is being worked on now! #1012

Cyberider opened this issue Jul 15, 2015 · 56 comments
Labels
pinned A long-lived issue, such as a discussion

Comments

@Cyberider
Copy link

For any of you that use or are thinking of using TypeScript to strengthen your JS coding there is s TS definition file project in the works.

Fabian-Schmidt (not me) is working on it at:
https://github.com/Fabian-Schmidt/DefinitelyTyped/tree/master/cytoscape

I use TypeScript so I'm excited to be able to use cytoscape.js with TypeScript.

Rick

@Killbot5000
Copy link

I'm in the process of completing the work of Fabian-Schmidt.

I'll try to get everything upstream by the end of August, but the process of branching and merging is still new to me, so a delay is possible.

In the meantime, feel free to bug me for the latest version.

Regards, KB5000

@Cyberider
Copy link
Author

If it helps:

In the discussion at: DefinitelyTyped/DefinitelyTyped#4763
@maxkfranz offers a JSON spec of the API.

Between that and this project:
https://github.com/horiuchi/dtsgenerator (TypeScript d.ts file generate from JSON Schema file)

Can you get the JSON spec to generate the d.ts definition file?

@phreed
Copy link

phreed commented Jun 23, 2016

Would you mind it I made this a typed-typings?
https://github.com/typed-typings
The advantages are described here...
typings/typings#322

@Cyberider
Copy link
Author

What is your typed-typings? A curated list of typed definitions?

Date: Thu, 23 Jun 2016 11:18:21 -0700
From: notifications@github.com
To: cytoscape.js@noreply.github.com
CC: rickgodwin@hotmail.com; author@noreply.github.com
Subject: Re: [cytoscape/cytoscape.js] TypeScript Definition for Cytoscape.js - It is being worked on now! (#1012)

Would you mind it I made this a typed-typings?

https://github.com/typed-typings


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

@maxkfranz
Copy link
Member

maxkfranz commented Jun 24, 2016

Whatever way Typescript definitions are published, it would be great if it could be automated on the Cytoscape.js side so that they're automatically kept up to date.

The docmaker.js file generates the HTML version of the docs from docmaker.json. It would be great if a tsdefmaker.js file could be made to output a .d.ts file. That way, everything could be automated with each release.

I'm not an expert an TS or TS defs, so it would be great if someone wanted to make a PR to do this.

Thanks

@phreed
Copy link

phreed commented Jun 24, 2016

Typed-Typings is similar to DefinitelyTyped except rather than having all the typing definition files in a single git repository they can be placed in a number of places.
This also allows for a registry for different versions of the typings.

@Cyberider
Copy link
Author

okay, great. Sure, do what you got to do regarding cytoscape.js

Date: Fri, 24 Jun 2016 10:51:49 -0700
From: notifications@github.com
To: cytoscape.js@noreply.github.com
CC: rickgodwin@hotmail.com; author@noreply.github.com
Subject: Re: [cytoscape/cytoscape.js] TypeScript Definition for Cytoscape.js - It is being worked on now! (#1012)

Typed-Typings is similar to DefinitelyTyped except rather than having all the typing definition files in a single git repository they can be placed in a number of places.

This also allows for a registry for different versions of the typings.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

@Cyberider
Copy link
Author

Okay sounds great but I have nothing to do with the cytoscape.js project! I have just expressed a desire to have TS defs for it.
Rick

Date: Fri, 24 Jun 2016 08:10:20 -0700
From: notifications@github.com
To: cytoscape.js@noreply.github.com
CC: rickgodwin@hotmail.com; author@noreply.github.com
Subject: Re: [cytoscape/cytoscape.js] TypeScript Definition for Cytoscape.js - It is being worked on now! (#1012)

Whatever way Typescript definitions are published, it would be great if it could be automated on the Cytoscape.js side so that they're automatically kept up to date.

The docmaker.js file generates the HTML version of the docs from docmaker.json. It would be great if docmaker.js could be refashioned into a tsdefmaker.js file to output a .d.ts file. That way, everything could be automated with each release.

I'm not an expert an TS or TS defs, so it would be great if someone wanted to make a PR to do this.

Thanks


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

@aindlq
Copy link

aindlq commented Jul 12, 2016

@phreed Are you still going to publish the typings?

fyi I'm successfully using them in my project, so far so good. Also I've made some significant improvements to them in the Styles/CSS part.

@phreed
Copy link

phreed commented Jul 12, 2016

Pretty soon.
I do not need them quite yet for my project.

@ktong
Copy link

ktong commented Jul 20, 2016

@phreed Would you mind to share me your typed-typings? I am using cytoscape in an angular2 based projects.

Thanks

@calebeaires
Copy link

Is there some news about cytoscape typing?

@phreed
Copy link

phreed commented Dec 14, 2016

I am continuing to work on them.
You can use them in there current state from my github project.
I add the following to my package.json file

"devDependencies": {
...
"@types/cytoscape": "github:phreed/ts-typings#cytoscape",
...
}

and then
npm install @types/cytoscape
or
npm install --save-dev github:phreed/ts-typings#cytoscape

@calebeaires
Copy link

@phreed very thanks for it!

@Cyberider
Copy link
Author

Wow, nice work @phreed!

Why not PR your work-in-progress to the Typescript Definitions repository DefinitelyTyped so others can help you polish it up?

@felixfbecker
Copy link

After #1012 (comment),
why not do PR to this repo and publish them with npm? That would be even better than DefinitelyTyped

@maxkfranz
Copy link
Member

maxkfranz commented Apr 24, 2017

Unless the process of creating ts defs can be completely automated through the existing docs build, then they won't be maintained in the official repo.

It would be great if someone would create a community npm package. Maybe @phreed would like to publish https://github.com/phreed/ts-typings/tree/cytoscape to npm, or maybe someone could create a new Github repo based on @phreed's work that could centralise community ts defs for Cytoscape.

@felixfbecker
Copy link

The .d.ts file would have to get updated on interface changes. The alternative would be to actually use TypeScript in this library, which would provide a variety of benefits (type safety => less bugs). In that case .d.ts files would get generated automatically.

The official distribution channel for community typings is through DefinitelyTyped (which gets published to @types on npm).

@maxkfranz
Copy link
Member

@phreed's defs are for Typed-Typings rather than DefinitelyTyped.

I don't think it's likely that Cytoscape will be rewritten in TS. If the community wants to maintain a separate defs package to support TS users, that's great and we'd be glad to link to it!

@Lambik
Copy link

Lambik commented Apr 27, 2017

Afaik there are no typings yet for version 3.0.0? :(

@phreed
Copy link

phreed commented Apr 27, 2017 via email

@felixfbecker
Copy link

@phreed how's it going? Any update?

@phreed
Copy link

phreed commented May 16, 2017

This is where things are now
https://github.com/phreed/ts-typings/tree/cytoscape
I am working through the v3 api and should have something in @types within the next couple of days.

@phreed
Copy link

phreed commented May 18, 2017

I have a draft version for the v3 api.
https://github.com/phreed/ts-typings/tree/cytoscape3

@phreed
Copy link

phreed commented May 18, 2017 via email

@maxkfranz
Copy link
Member

Should this:

 interface Stylesheet {
     selector: string;
     css: Css.Node | Css.Edge;
 }

actually read:

 interface Stylesheet {
     selector: string;
     style: Css.Node | Css.Edge;
 }

Either works in 2.x or 3.2, but style is preferred and css is now undocumented/deprecated.

@WaynePlummer
Copy link

Yes, I deleted my original post once I realised that this must be what was going on... but thanks, @phreed and @maxkfranz both for confirming :)

@opavader
Copy link

@maxkfranz I think for now TS users will be very much happy with simple inclusion of typedef files created by @phreed . typedef files are fairly easy to maintain as they are limited mostly to api only and there are rarely major breaking changes in any libraries api.
For development of library, I guess JSDoc comments will be suffice for most contributors.

@phreed
Copy link

phreed commented Jun 13, 2017

Have any of you had a chance to give it a try?
https://github.com/phreed/ts-typings/tree/cytoscape3
Should I go ahead a push it out to DefinitelyTyped?
The typings are working for my current project.
I am planning on using cytoscape.js from ClojureScript for my next project.
I won't be able to spend much time on maintenance, so somebody else should probably pick this up.

@phreed
Copy link

phreed commented Jun 13, 2017

@maxkfranz I am not sure what you mean by TS requiring semantic changes to the underlying JS. From my perspective there are no changes necessary to the underlying JS or semantically or otherwise. The typings simply provide some of the missing description of an otherwise obscure semantic.

@maxkfranz
Copy link
Member

I am not sure what you mean by TS requiring semantic changes to the underlying JS.

@phreed (1) (a : int, b : int) => a + b is different from (1) (a : String, b : String) => a + b even though the compiled result is the same. But my original point was that either of the two previous lines is different than (3) (a, b) => a + b: (1) and (2) have additional semantics not present in (3) and no browser is able to interpret (1) or (2). Using comments to annotate (3) with types doesn't break anything, whereas (1) or (2) are broken unless you buy into the TS ecosystem and require any contributor or user (who modifies the source) to do the same. That's my real concern. Anybody familiar with JS should be able to just edit the source, not just TS experts.

@opavader Yes, @phreed's definition for the lib is great! My points mainly concern the future. Say a year from now, is that definition file up-to-date? Longterm, it's probably best if generation of the definition can be automated from the lib source so it's always up-to-date.

@felixfbecker
Copy link

@maxkfranz you don't need to add TS types to the source. It's possible to add the .d.ts files alongside the .js files, which means the JS will run fine in any browser.

@maxkfranz
Copy link
Member

@felixfbecker That's correct, but it seems you do need to add TS types to the source if you want to generate the definition automatically from the source. The Cytoscape Consortium has limited resources and TS support, in the grand scheme of things, is a relatively low priority. If TS support can't be automated and very easily maintained (like with JSDoc comments), then there probably won't be first-party TS support.

If the goal of everyone in the thread is to have a high quality, up-to-date definition in the longterm, then I think we should try to aim for automated, easily-maintained JSDoc comments as I've mentioned. I found this on the wiki, but the docs don't say anything about support.

@felixfbecker
Copy link

Understood. I think we can live fine with external typings.

@opavader
Copy link

opavader commented Jun 14, 2017

@phreed I used your typedefs and so far have worked well and I will be happy to continue with the maintenance.

@maxkfranz There is such a tool tsd-jsdoc, though this too will require lot of additions & cleanup of current jsdoc comments.

@phreed
Copy link

phreed commented Jun 14, 2017

@opavader We should move forward with pushing the typings from my ts-typings repo, as they are, into DefinitelyTyped.
The DefinitelyTyped location will then be the primary source.

I believe the typings to be complete as far as covering the API.
What remains is testing which includes adding all of the samples into the test file and people like you all kicking it around.

@opavader
Copy link

@phreed shouldn't it be bundled with this package itself. PRs to DefinitelyTyped often take multiple days to get merged. Updates & versioning will be eased as well.

@phreed
Copy link

phreed commented Jun 14, 2017

@maxkfranz Is the following the substance of your point?

The primary question regarding providing data and function type specifications is...
What would the cytoscape.js people be willing to do?

  • keep a set of informal / formal specifications in the jsdocs (current approach)
  • keep a set of formal specifications in the jsdocs
  • keep a set of type specifications separate from the main javascript but in the cytoscape repository @opavader
  • notify a collaborator (us) that the api has changed

A secondary question...
What should the form of these specifications?

  • flow, typescript, jsdoc,

@felixfbecker
Copy link

The existing tools to convert JSDoc to TypeScript definitions are all oriented to serve as a starting point for writing definitions, not continuously automating their generation. That is because the TypeScript type system is way more expressive to describe JavaScript APIs than JSDoc.

@maxkfranz
Copy link
Member

maxkfranz commented Jun 14, 2017

@phreed

keep a set of informal / formal specifications in the jsdocs (current approach)

We don't even have this yet in the lib. There's a hand-rolled docs generator script from a json spec.

keep a set of formal specifications in the jsdocs

Ideally we could use formal jsdoc comments throughout (at least) the public-facing api to generate the docs, ts defs, and flow defs. This would be a good, longterm option. The source doesn't have any jsdoc comments yet, so this would all be todo.

keep a set of type specifications separate from the main javascript but in the cytoscape repository @opavader

This is the best option in the shortterm.

notify a collaborator (us) that the api has changed

That should be easy/automatic, because all api changes are documented in each version's milestone.

@felixfbecker Do you have an example of jsdoc not being enough? My understanding is that detailed-enough jsdoc comments should suffice for features like intellisense/autocomplete. Tern seems able to do it with just jsdoc comments, so I think ts should be able to do the same.

@wy193777
Copy link

@phreed Do you want to push your definition to DefinitelyTyped now? Usually other users need to use it in typescript could take care of it.

@wy193777
Copy link

I created a pull request after fix lint and other small errors. Push it to DefinitelyTyped could let other users use it and fix problems when they are using it. Ideally this could be maintained by users automatically without cytoscape developer. DefinitelyTyped/DefinitelyTyped#20511

@wy193777
Copy link

Today the type definition has been merged to DefinitelyTyped, but it has some problems.

When I import the module: import * as cytoscape from "cytoscape";, and call cytoscape(), compiler tell me Cannot invoke an expression whose type lacks a call signature. Type 'typeof "./node_modules/@types/cytoscape/index"' has no compatible call signatures.. But the compile result is right in this condition.

When I call with cytoscape.cytoscape(), ts compiler doesn't show an error but compile result is cytoscape_1.cytoscape() which is incorrect because the library supposed to be called directly.

cytoscape type source on DefinitelyTyped: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/d9ca7d7efff765abe162023a9aa47f51f473bfd7/types/cytoscape/index.d.ts

Can someone familiar with typescript look into it? I've worked on it for the whole day without any solution.

@opavader
Copy link

Shouldn't cytoscape be declared as a class with a constructor, like its done here types/dygraphs/index.d.ts#L924?

@wy193777
Copy link

I just submitted an fix for it: DefinitelyTyped/DefinitelyTyped#20616. This would solve the import problem. @opavader

@WaynePlummer
Copy link

I am not sure what the best forum is for reporting problems with the cytoscape typings themselves?

I have seen two issues:

  1. The function scratch() and friends should be available on Core
  2. The function jsons() returns POJOs, not JSON strings as its name might suggest, so "string[]" is not the right return type (probably should be "ElementDefinition[]").

Thanks for finally getting this up on npm :)

@wy193777
Copy link

@WaynePlummer If you like you could submit a pull request on DefinitelyTyped project to fix the problem.

@adaamz
Copy link

adaamz commented Jun 22, 2018

Any update here? :-)

@wy193777
Copy link

wy193777 commented Jun 22, 2018

@CzechBoy The type definition is already in DefinitelyTyped.

@adaamz
Copy link

adaamz commented Jun 23, 2018

@wy193777 Ok, so we can closed this issue?

@wy193777
Copy link

I think so. Someone has the permission can close it now.

@rahul799
Copy link

Hello everyone,
I have been working on this issue as a part of my GSoD project under the mentorship of @maxkfranz .

This project's main objective was to convert the documentation for Cytoscape, currently a JSON specification with references to Markdown files, to JSDoc annotations. From the JSDoc comments, a Typescript definition file will be generated using tsd-jsdoc module.

Right now I am fixing a few minor issues and very soon we will be able to support TypeScript in the new release.

PR for the same has been merged.
I am looking for some more feedback ( it can be a bug report or a new feature request ) or the area of improvements that can be done. I will be very happy to address all the inputs and make my contribution more valuable.

@maxkfranz
Copy link
Member

@phreed @opavader @Cyberider, and others:

Let's get these typings directly into the main Cytoscape repo.

What would be involved in this process, i.e.

  • basic integration,
  • precedence over DT,
  • new build steps,
  • etc.

@maxkfranz maxkfranz reopened this Oct 23, 2023
@maxkfranz maxkfranz added the pinned A long-lived issue, such as a discussion label Oct 26, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pinned A long-lived issue, such as a discussion
Projects
None yet
Development

No branches or pull requests