stoplightio / vscode-spectral

VS Code extension bringing the awesome Spectral JSON/YAML linter with OpenAPI/AsyncAPI support
https://marketplace.visualstudio.com/items?itemName=stoplight.spectral
Apache License 2.0
72 stars 23 forks source link

Error with extending ruleset from an NPM package #214

Open exoszajzbuk opened 1 year ago

exoszajzbuk commented 1 year ago

The following error occurs when defining.spectral.js in a project repo which would extend a ruleset from a private NPM package (in this case @team-supercharge/oasg/ruleset)

import oasgRuleset from '@team-supercharge/oasg/ruleset';

export default {
  extends: oasgRuleset,
}

The extension seems to be trying to load the dependency from a CDN, previous versions (using Spectral 5) used to correctly trying to load the @team-supercharge/oasg/ruleset locally from the node_modules directory.

[Error - 09:43:31] An error occurred while validating document /Users/bali/Devel/project/api/spec.openapi.yaml: Unable to read ruleset at /Users/bali/Devel/project/.spectral.js. Error: Could not load https://cdn.skypack.dev/-/@team-supercharge/oasg@v10.0.2-2VJzdTnx52EvLlWlHHZk/dist=es2019,mode=raw/ruleset (imported by https://cdn.skypack.dev/@team-supercharge/oasg/ruleset): Error fetching https://cdn.skypack.dev/-/@team-supercharge/oasg@v10.0.2-2VJzdTnx52EvLlWlHHZk/dist=es2019,mode=raw/ruleset: Not Found

When using a YAML ruleset .spectral.yaml the following error occurs:

extends: '@team-supercharge/oasg/ruleset'
[Error - 09:59:44] An error occurred while validating document /Users/bali/Devel/project/api/spec.openapi.yaml: Unable to read ruleset at /Users/bali/Devel/project/.spectral.yaml. Error: Could not load /Users/bali/Devel/project/@team-supercharge/oasg/ruleset (imported by .spectral.js): ENOENT: no such file or directory, open '/Users/bali/Devel/project/@team-supercharge/oasg/ruleset'

In this case the extension tries to load the ruleset from the project folder, instead of from inside node_modules.

In both cases running Spectral from the CLI works totally fine.

Environment:

exoszajzbuk commented 1 year ago

any updates on this?

sduc commented 1 year ago

I'm seeing the same issue. It seems like it is not looking into the node_modules folder but only at the root of the workspace. The cli work perfectly fine but not the vscode extension.

sduc commented 1 year ago

There is a hack to make it work @exoszajzbuk you can just point the the path to your dep. for example we have a @bastion-technologies/spectral-ruleset npm package and we can just add

extends:
    - "node_modules/@bastion-technologies/spectral-ruleset/dist/ruleset.js"

in the .spectral.yml file in the repo. Not idea but works until the extension supports npm packages rulesets.

Note that it also works with the cli in case you also use it in your CIs for example.

Gouveia15 commented 1 year ago

Hello everyone, just opened a pull request that can fix this problem, https://github.com/stoplightio/vscode-spectral/pull/218 . Waiting for some feedback, thanks!

afmhenry commented 1 year ago

I have a similar issue, but when applying non-ruleset node packages in my custom scripts.

FetchError: Could not load

Is there any workaround for that?

kennethaasan commented 3 months ago

I have the same issue. Does #218 fix this?

exoszajzbuk commented 3 months ago

Can #218 be merged to fix this issue?