diff --git a/src/ruleset/__tests__/__fixtures__/json-schema-org-ruleset.json b/src/ruleset/__tests__/__fixtures__/json-schema-org-ruleset.json new file mode 100644 index 000000000..ddf77d0f5 --- /dev/null +++ b/src/ruleset/__tests__/__fixtures__/json-schema-org-ruleset.json @@ -0,0 +1,13 @@ +{ + "rules": { + "json-schema": { + "given": "$", + "then": { + "function": "valid", + "functionOptions": { + "$ref": "http://json-schema.org/draft-04/schema#" + } + } + } + } +} diff --git a/src/ruleset/__tests__/reader.jest.test.ts b/src/ruleset/__tests__/reader.jest.test.ts index 788d614ff..ef3819fcb 100644 --- a/src/ruleset/__tests__/reader.jest.test.ts +++ b/src/ruleset/__tests__/reader.jest.test.ts @@ -557,6 +557,27 @@ describe('Rulesets reader', () => { }); }); + it('should not resolve json-schema.org $refs', async () => { + expect(await readRuleset(getFixturePath('json-schema-org-ruleset.json'))).toEqual( + expect.objectContaining({ + rules: { + 'json-schema': { + enabled: true, + given: '$', + recommended: true, + severity: DiagnosticSeverity.Warning, + then: { + function: 'valid', + functionOptions: { + $ref: 'http://json-schema.org/draft-04/schema#', + }, + }, + }, + }, + }), + ); + }); + describe('Exceptions loading', () => { it('should handle loading a standalone ruleset', async () => { const ruleset = await readRuleset(path.join(__dirname, './__fixtures__/exceptions/standalone.yaml')); diff --git a/src/ruleset/readRuleset.ts b/src/ruleset/readRuleset.ts index 873c596bc..f4f82a27a 100644 --- a/src/ruleset/readRuleset.ts +++ b/src/ruleset/readRuleset.ts @@ -81,6 +81,14 @@ const createRulesetProcessor = ( baseUri: rulesetUri, dereferenceInline: false, uriCache, + transformRef(opts) { + const host = opts.ref?.host(); + if (host === 'json-schema.org') { + return; + } + + return opts.ref; + }, async parseResolveResult(opts) { opts.result = parseContent(opts.result, opts.targetAuthority.pathname()); return opts;