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

Unexpected references in component generation #98

Open
jeswr opened this issue Apr 2, 2022 · 2 comments
Open

Unexpected references in component generation #98

jeswr opened this issue Apr 2, 2022 · 2 comments
Labels
bug Something isn't working

Comments

@jeswr
Copy link

jeswr commented Apr 2, 2022

If I run yarn install on this commit then the components file for the actor-optimize-rule file contains references to actor-dereference-rule-parse which isn't even a dependency of the package

ActorOptimizeRule.ts

import type { IAction, IActorArgs, IActorOutput, IActorTest, Mediate } from '@comunica/core';
import { Actor } from '@comunica/core';
import type { Rule } from '@comunica/reasoning-types';
import type { IActionContext } from '@comunica/types';
import type { AsyncIterator } from 'asynciterator';
import type { Algebra } from 'sparqlalgebrajs';

/**
 * A comunica actor for optimizing reasoning rules
 *
 * Actor types:
 * * Input:  IActionOptimizeRule:      TODO: fill in.
 * * Test:   <none>
 * * Output: IActorOptimizeRuleOutput: TODO: fill in.
 *
 * @see IActionOptimizeRule
 * @see IActorOptimizeRuleOutput
 */
export abstract class ActorOptimizeRule extends Actor<IActionOptimizeRule, IActorTest, IActorOptimizeRuleOutput> {
  /**
   * @param args - @defaultNested {<default_bus> a <cc:components/Bus.jsonld#Bus>} bus
   */
  public constructor(args: IActorOptimizeRuleArgs) {
    super(args);
  }
}

export interface IActionOptimizeRule extends IAction {
  rules: AsyncIterator<Rule>;
  /**
   * An optional pattern to to restrict the rules to infer for
   */
  pattern?: Algebra.Pattern;
}

export interface IActorOptimizeRuleOutput extends IActorOutput {
  rules: AsyncIterator<Rule>;
  pattern?: Algebra.Pattern;
  context: IActionContext;
}

export type IActorOptimizeRuleArgs = IActorArgs<IActionOptimizeRule, IActorTest, IActorOptimizeRuleOutput>;

export type MediatorOptimizeRule = Mediate<IActionOptimizeRule, IActorOptimizeRuleOutput>;

components/ActorOptimizeRule.jsonld

{
  "@context": [
    "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-optimize-rule/^1.0.0/components/context.jsonld",
    "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^2.0.0/components/context.jsonld"
  ],
  "@id": "npmd:@comunica/bus-optimize-rule",
  "components": [
    {
      "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule",
      "@type": "AbstractClass",
      "requireElement": "ActorOptimizeRule",
      "extends": [
        {
          "@type": "GenericComponentExtension",
          "component": "cc:components/Actor.jsonld#Actor",
          "genericTypeInstances": [
            "cbor:components/ActorOptimizeRule.jsonld#IActionOptimizeRule",
            "cc:components/Actor.jsonld#IActorTest",
            "cbor:components/ActorOptimizeRule.jsonld#IActorOptimizeRuleOutput"
          ]
        }
      ],
      "comment": "A comunica actor for optimizing reasoning rules  Actor types: * Input:  IActionOptimizeRule:      TODO: fill in. * Test:   <none> * Output: IActorOptimizeRuleOutput: TODO: fill in.",
      "parameters": [
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule_args_name",
          "range": "xsd:string",
          "default": {
            "@id": "rdf:subject"
          },
          "comment": "The name for this actor."
        },
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule_args_bus",
          "range": {
            "@type": "ParameterRangeGenericComponent",
            "component": "cc:components/Bus.jsonld#Bus",
            "genericTypeInstances": [
              {
                "@type": "ParameterRangeGenericComponent",
                "component": "cc:components/Actor.jsonld#Actor",
                "genericTypeInstances": [
                  {
                    "@type": "ParameterRangeGenericTypeReference",
                    "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_I"
                  },
                  {
                    "@type": "ParameterRangeGenericTypeReference",
                    "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_T"
                  },
                  {
                    "@type": "ParameterRangeGenericTypeReference",
                    "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_O"
                  }
                ]
              },
              {
                "@type": "ParameterRangeGenericTypeReference",
                "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_I"
              },
              {
                "@type": "ParameterRangeGenericTypeReference",
                "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_T"
              },
              {
                "@type": "ParameterRangeGenericTypeReference",
                "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_O"
              }
            ]
          },
          "default": {
            "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule_default_bus",
            "@type": "cc:components/Bus.jsonld#Bus"
          },
          "comment": "The bus this actor subscribes to."
        },
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule_args_beforeActors",
          "range": {
            "@type": "ParameterRangeUnion",
            "parameterRangeElements": [
              {
                "@type": "ParameterRangeArray",
                "parameterRangeValue": {
                  "@type": "ParameterRangeGenericComponent",
                  "component": "cc:components/Actor.jsonld#Actor",
                  "genericTypeInstances": [
                    {
                      "@type": "ParameterRangeGenericTypeReference",
                      "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_I"
                    },
                    {
                      "@type": "ParameterRangeGenericTypeReference",
                      "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_T"
                    },
                    {
                      "@type": "ParameterRangeGenericTypeReference",
                      "parameterRangeGenericType": "npmd:@comunica/actor-dereference-rule-parse/^1.0.0/components/ActorDereferenceRuleParse.jsonld#ActorDereferenceRuleParse__generic_O"
                    }
                  ]
                }
              },
              {
                "@type": "ParameterRangeUndefined"
              }
            ]
          },
          "comment": "Actor that must be registered in the bus before this actor."
        }
      ],
      "memberFields": [
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule__member_constructor",
          "memberFieldName": "constructor"
        }
      ],
      "constructorArguments": [
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule_args__constructorArgument",
          "fields": [
            {
              "keyRaw": "name",
              "value": {
                "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule_args_name"
              }
            },
            {
              "keyRaw": "bus",
              "value": {
                "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule_args_bus"
              }
            },
            {
              "keyRaw": "beforeActors",
              "value": {
                "@id": "cbor:components/ActorOptimizeRule.jsonld#ActorOptimizeRule_args_beforeActors"
              }
            }
          ]
        }
      ]
    },
    {
      "@id": "cbor:components/ActorOptimizeRule.jsonld#IActionOptimizeRule",
      "@type": "AbstractClass",
      "requireElement": "IActionOptimizeRule",
      "extends": [
        "cc:components/Actor.jsonld#IAction"
      ],
      "parameters": [],
      "memberFields": [
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#IActionOptimizeRule__member_rules",
          "memberFieldName": "rules"
        },
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#IActionOptimizeRule__member_pattern",
          "memberFieldName": "pattern"
        }
      ],
      "constructorArguments": []
    },
    {
      "@id": "cbor:components/ActorOptimizeRule.jsonld#IActorOptimizeRuleOutput",
      "@type": "AbstractClass",
      "requireElement": "IActorOptimizeRuleOutput",
      "extends": [
        "cc:components/Actor.jsonld#IActorOutput"
      ],
      "parameters": [],
      "memberFields": [
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#IActorOptimizeRuleOutput__member_rules",
          "memberFieldName": "rules"
        },
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#IActorOptimizeRuleOutput__member_pattern",
          "memberFieldName": "pattern"
        },
        {
          "@id": "cbor:components/ActorOptimizeRule.jsonld#IActorOptimizeRuleOutput__member_context",
          "memberFieldName": "context"
        }
      ],
      "constructorArguments": []
    }
  ]
}
@jeswr
Copy link
Author

jeswr commented Apr 3, 2022

The problem is resolved in the monrepo by replacing

"build:components": "componentsjs-generator engines/* packages/*"

with

"build:components": "lerna exec -- npm run build:components --if-present"

in the global package.json

@rubensworks
Copy link
Member

That seems to be a bug in generics generation indeed.

I suspect there's a caching issue here: https://github.com/LinkedSoftwareDependencies/Components-Generator.js/blob/master/lib/parse/ParameterResolver.ts#L427-L429
Probably, the generics are not properly taking into account, which results in (incorrect) hash collisions.

@rubensworks rubensworks added the bug Something isn't working label Apr 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants