Skip to content

Circular dependency between base-widget.ts and gridstack.component.ts #2955

Closed

Description

@d-luitwieler-anva

There is a circular dependency between gridstack.component.ts and base-widget.ts, which in some scenarios will lead to errors. One of those scenario's can be found in the example below where we cannot extend from BaseWidget.
Worth mentioning is that we have other unit tests and other code in the same codebase that extend BaseWidget without any problems.

The issue was discovered in version 11.3.0, but has likely existed long before.

Example.

test-base-widget.spec.ts (jest unit test)

import { BaseWidget } from 'gridstack/dist/angular';

class TestComponent extends BaseWidget {}

it('test', () => {
  // nothing
});

Running this unit test will throw the following error:

Image

We have seen similar weird issues in the past with other code that were eventually tracked down to be caused by Circular Dependencies and often those circular dependencies had existed for a longer period of time, it just never manifested in errors before.

So it is just a matter of time before actual issues occur in other parts of a client's codebase.

Activity

  1. adumesny commented on Feb 24, 2025

    @adumesny
    Member

    I see BaseWidget doing
    import { NgCompInputs, NgGridStackWidget } from './gridstack.component';
    so there is circular, BUT those changes are 21 months old so this isn't new so maybe something else ???

  2. d-luitwieler-anva commented on Feb 24, 2025

    @d-luitwieler-anva
    Author

    We have seen enough circular dependencies in the last few years to know that the order of imports can also matter for either seeing an error or not. So perhaps import changes of any of the dependencies might be the reason the problem never appeared before.

  3. added 2 commits that reference this issue on Feb 25, 2025
    c2665e9
    cae38a1
  4. adumesny commented on Feb 25, 2025

    @adumesny
    Member

    hopefully fixed in next release...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions