Security News
New Python Packaging Proposal Aims to Solve Phantom Dependency Problem with SBOMs
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
@stoplight/json-ref-resolver
Advanced tools
@stoplight/json-ref-resolver is a utility for resolving JSON references ($ref) in JSON documents. It helps in dereferencing and bundling JSON schemas or other JSON documents that contain references to other documents or internal references.
Dereferencing JSON References
This feature allows you to resolve internal JSON references within a document. The example shows how a reference to '#/bar' is resolved to the actual content of 'bar'.
const { resolve } = require('@stoplight/json-ref-resolver');
const document = {
"foo": { "$ref": "#/bar" },
"bar": { "baz": 123 }
};
resolve(document).then(result => {
console.log(result);
// Output: { foo: { baz: 123 }, bar: { baz: 123 } }
});
Resolving External JSON References
This feature allows you to resolve external JSON references by fetching the referenced document from a URL. The example shows how a reference to an external URL is resolved.
const { resolve } = require('@stoplight/json-ref-resolver');
const document = {
"foo": { "$ref": "http://example.com/bar.json" }
};
resolve(document).then(result => {
console.log(result);
// Output will depend on the content of http://example.com/bar.json
});
Custom Resolvers
This feature allows you to define custom resolvers for handling specific types of references. The example shows how to create a custom resolver for a 'custom://' scheme.
const { resolve } = require('@stoplight/json-ref-resolver');
const customResolver = {
canRead: (file) => file.url.startsWith('custom://'),
read: (file) => Promise.resolve({ custom: 'data' })
};
const document = {
"foo": { "$ref": "custom://example" }
};
resolve(document, { resolvers: [customResolver] }).then(result => {
console.log(result);
// Output: { foo: { custom: 'data' } }
});
json-schema-ref-parser is a powerful library for parsing, resolving, and dereferencing JSON Schema $ref pointers. It supports both internal and external references and provides similar functionality to @stoplight/json-ref-resolver. However, it is more focused on JSON Schema specifically.
json-ref-lite is a lightweight library for resolving JSON references. It is simpler and has fewer features compared to @stoplight/json-ref-resolver, making it suitable for basic use cases where performance and simplicity are priorities.
json-refs is another library for resolving JSON references. It provides a comprehensive set of features for both internal and external references, similar to @stoplight/json-ref-resolver. It also includes additional utilities for working with JSON references.
Recursively resolves JSON pointers and remote authorities.
Supported in modern browsers and node.
# latest stable
yarn add @stoplight/json-ref-resolver
All relevant types and options can be found in src/types.ts.
import { Resolver } from '@stoplight/json-ref-resolver';
// some example http library
const request = require('request');
// if we're in node, we create a file reader with fs
const fs = require('fs');
// create our resolver instance
const resolver = new Resolver({
// readers can do anything, so long as they define an async read function that resolves to a value
readers: {
// this reader will be invoked for refs with the https protocol
https: {
async read(ref: uri.URI) {
return request(ref.toString());
},
},
// this reader will be invoked for refs with the file protocol
file: {
async read(ref: uri.URI) {
return fs.read(ref.toString());
},
},
},
});
const resolved = await resolver.resolve({
definitions: {
someOASFile: {
$ref: './main.oas2.yml#/definitions/user',
},
someMarkdownFile: {
$ref: 'https://foo.com/intro.md',
},
},
});
console.log(resolved.result);
// ==> outputs the original object, with refs resolved and replaced
//
// {
// definitions: {
// someOASFile: {
// // ... the data located in the relative file `./main.oas2.yml` and inner json path `#/definitions/user`
// },
// someMarkdownFile: {
// // ... the data located at the url `https://foo.com/intro.md`
// }
// },
// }
FAQs
Recursively resolve JSON pointers and remote authorities.
The npm package @stoplight/json-ref-resolver receives a total of 192,403 weekly downloads. As such, @stoplight/json-ref-resolver popularity was classified as popular.
We found that @stoplight/json-ref-resolver demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Security News
Socket CEO Feross Aboukhadijeh discusses open source security challenges, including zero-day attacks and supply chain risks, on the Cyber Security Council podcast.
Security News
Research
Socket researchers uncover how threat actors weaponize Out-of-Band Application Security Testing (OAST) techniques across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.