React-diagrams: Extending PortModel causes Maximum call stack size exceeded with [email protected]

Created on 3 Dec 2018  路  3Comments  路  Source: projectstorm/react-diagrams

After upgrading to typescript 3.2.1 I started to get this:

RangeError: Maximum call stack size exceeded
    at resolveNameHelper (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:31831:35)
    at resolveName (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:31829:20)
    at resolveEntityName (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:32680:26)
    at resolveTypeReferenceName (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:38485:20)
    at getTypeFromTypeReference (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:38670:30)
    at getTypeFromTypeNode (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:40178:28)
    at getConstraintFromTypeParameter (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:38328:72)
    at fillMissingTypeArguments (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:37877:49)
    at getTypeFromClassOrInterfaceReference (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:38429:78)
    at getTypeReferenceTypeWorker (D:\NODEJS\workbench-ts\node_modules\typescript\lib\typescript.js:38559:24)

Investigating I found that it happens when I'm creating a class that extends from PortModel.
How to reproduce:

  • Run this with typescript 3.2.1
import {
  LinkModel,
  DiagramEngine,
  PortModel,
  DefaultLinkModel
} from "storm-react-diagrams";

export class DiamondPortModel extends PortModel {
  public position: string | "top" | "bottom" | "left" | "right";

  constructor(pos: string = "top") {
    super(pos, "diamond");
    this.position = pos;
  }

  public serialize() {
    return Object.assign(super.serialize(), {
      position: this.position
    });
  }

  public deSerialize(data: any, engine: DiagramEngine) {
    super.deSerialize(data, engine);
    this.position = data.position;
  }

  public createLinkModel(): LinkModel {
    return new DefaultLinkModel();
  }
}
  • Get the Maximum call stack size exceeded exception

Version:
"react": "^16.6.3",
"react-dom": "^16.6.3",
"storm-react-diagrams": "^5.2.1",
"typescript": "^3.2.1",

bug

Most helpful comment

After forking the project and updating few dependencies I found this in BaseEntity.ts

export interface BaseEvent<T extends BaseEntity = any> {
    entity: BaseEntity<BaseListener>;
    stopPropagation: () => any;
    firing: boolean;
    id: string;
}

<T extends BaseEntity = any>

The generic T is not used though and removing it fixes the infinite loop.
This is just to give you as much information as possible.

Let me know if I can help in any way.

Cheers.

All 3 comments

After forking the project and updating few dependencies I found this in BaseEntity.ts

export interface BaseEvent<T extends BaseEntity = any> {
    entity: BaseEntity<BaseListener>;
    stopPropagation: () => any;
    firing: boolean;
    id: string;
}

<T extends BaseEntity = any>

The generic T is not used though and removing it fixes the infinite loop.
This is just to give you as much information as possible.

Let me know if I can help in any way.

Cheers.

For what it's worth I'm seeing similar call stack errors simply by building the storybook on a fresh clone of the repo. Looks like nothing is currently building with any version of Typescript >= 3.2.0. Revert back to [email protected] and things seem to build fine again.

```
$ git clone https://github.com/projectstorm/react-diagrams.git
$ cd react-diagrams
$ yarn install
$ yarn upgrade typescript@latest
$ yarn run storybook
yarn run v1.12.3
$ start-storybook -p 9001 -c .storybook
info @storybook/react v3.4.3
info
info => Loading custom addons config.
info => Loading custom webpack config (extending mode).
15% building modules 46/49 modules 3 active ...odules/react/cjs/react.development.js
[at-loader] Using [email protected] from typescript and "tsconfig.json" from react-diagrams/tsconfig.json.

22% building modules 107/127 modules 20 active ...ct-diagrams/demos/demo-simple/docs.md[at-loader]: Child process failed to process the request: RangeError: Maximum call stack size exceeded
at getSymbolOfNode (react-diagrams/node_modules/typescript/lib/typescript.js:33073:20)
at resolveNameHelper (react-diagrams/node_modules/typescript/lib/typescript.js:31900:45)
at resolveName (react-diagrams/node_modules/typescript/lib/typescript.js:31829:20)
at resolveEntityName (react-diagrams/node_modules/typescript/lib/typescript.js:32680:26)
at resolveTypeReferenceName (react-diagrams/node_modules/typescript/lib/typescript.js:38485:20)
at getTypeFromTypeReference (react-diagrams/node_modules/typescript/lib/typescript.js:38670:30)
at getTypeFromTypeNode (react-diagrams/node_modules/typescript/lib/typescript.js:40178:28)
at getConstraintFromTypeParameter (react-diagrams/node_modules/typescript/lib/typescript.js:38328:72)
at fillMissingTypeArguments (react-diagrams/node_modules/typescript/lib/typescript.js:37877:49)
at getTypeFromClassOrInterfaceReference (react-diagrams/node_modules/typescript/lib/typescript.js:38429:78)
at getTypeReferenceTypeWorker (react-diagrams/node_modules/typescript/lib/typescript.js:38559:24)
at getTypeReferenceType (react-diagrams/node_modules/typescript/lib/typescript.js:38492:24)
at getTypeFromTypeReference (react-diagrams/node_modules/typescript/lib/typescript.js:38671:28)
at getTypeFromTypeNode (react-diagrams/node_modules/typescript/lib/typescript.js:40178:28)
at getConstraintFromTypeParameter (react-diagrams/node_modules/typescript/lib/typescript.js:38328:72)
at fillMissingTypeArguments (react-diagrams/node_modules/typescript/lib/typescript.js:37877:49)
22% building modules 108/127 modules 19 active ...ct-diagrams/demos/demo-simple/docs.md[at-loader]: Child process failed to process the request: RangeError: Maximum call stack size exceeded
at getLateBoundSymbol (react-diagrams/node_modules/typescript/lib/typescript.js:36707:36)
at getSymbolOfNode (react-diagrams/node_modules/typescript/lib/typescript.js:33073:51)
at resolveNameHelper (react-diagrams/node_modules/typescript/lib/typescript.js:31968:45)
at resolveName (react-diagrams/node_modules/typescript/lib/typescript.js:31829:20)
at resolveEntityName (react-diagrams/node_modules/typescript/lib/typescript.js:32680:26)
at resolveTypeReferenceName (react-diagrams/node_modules/typescript/lib/typescript.js:38485:20)
at getTypeFromTypeReference (react-diagrams/node_modules/typescript/lib/typescript.js:38670:30)
at getTypeFromTypeNode (react-diagrams/node_modules/typescript/lib/typescript.js:40178:28)
at getConstraintFromTypeParameter (react-diagrams/node_modules/typescript/lib/typescript.js:38328:72)
at fillMissingTypeArguments (react-diagrams/node_modules/typescript/lib/typescript.js:37877:49)
at getTypeFromClassOrInterfaceReference (react-diagrams/node_modules/typescript/lib/typescript.js:38429:78)
at getTypeReferenceTypeWorker (react-diagrams/node_modules/typescript/lib/typescript.js:38559:24)
at getTypeReferenceType (react-diagrams/node_modules/typescript/lib/typescript.js:38492:24)
at getTypeFromTypeReference (react-diagrams/node_modules/typescript/lib/typescript.js:38671:28)
at getTypeFromTypeNode (react-diagrams/node_modules/typescript/lib/typescript.js:40178:28)
at getConstraintFromTypeParameter (react-diagrams/node_modules/typescript/lib/typescript.js:38328:72)
...
```

Should be fixed now in 6 beta, going to close for now

Was this page helpful?
0 / 5 - 0 ratings

Related issues

quangas picture quangas  路  3Comments

gugaevkirill picture gugaevkirill  路  3Comments

CarlousF picture CarlousF  路  3Comments

t-gacema picture t-gacema  路  4Comments

shortwavedave picture shortwavedave  路  3Comments