New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@open-rpc/schema-utils-js

Package Overview
Dependencies
Maintainers
2
Versions
55
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@open-rpc/schema-utils-js - npm Package Compare versions

Comparing version 2.0.5 to 2.1.0

build/apply-extension-spec.d.ts

309

build/dereference-document.js

@@ -55,2 +55,3 @@ "use strict";

var dereferencer_1 = __importDefault(require("@json-schema-tools/dereferencer"));
var meta_schema_1 = __importDefault(require("@open-rpc/meta-schema"));
var reference_resolver_1 = __importDefault(require("@json-schema-tools/reference-resolver"));

@@ -90,3 +91,4 @@ var fast_safe_stringify_1 = __importDefault(require("fast-safe-stringify"));

// returns resolved value of the reference
return [2 /*return*/, _a.sent()];
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return [2 /*return*/, (_a.sent())];
case 3:

@@ -100,3 +102,3 @@ err_1 = _a.sent();

"pointer: ".concat($ref),
"reference object: ".concat((0, fast_safe_stringify_1.default)(item))
"reference object: ".concat((0, fast_safe_stringify_1.default)(item)),
].join("\n"));

@@ -130,2 +132,10 @@ case 4: return [2 /*return*/];

}); };
var matchDerefItems = function (items, doc, resolver) { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
if (Array.isArray(items)) {
return [2 /*return*/, derefItems(items, doc, resolver)];
}
return [2 /*return*/, derefItem(items, doc, resolver)];
});
}); };
var handleSchemaWithSchemaComponents = function (s, schemaComponents) { return __awaiter(void 0, void 0, void 0, function () {

@@ -160,3 +170,3 @@ var dereffer, dereffed, e_1;

"error message: ".concat(e_1.message),
"schema in question: ".concat((0, fast_safe_stringify_1.default)(s))
"schema in question: ".concat((0, fast_safe_stringify_1.default)(s)),
].join("\n"));

@@ -232,2 +242,208 @@ case 4: return [2 /*return*/];

}); };
// remap the definitions map to remove the definitions. prefix and replace it with the parent object type
var remap = function (definitionsMap) {
var _a, _b;
var remappedDefinitions = {};
var graph = new Map();
var resolved = new Set();
// Build dependency graph
for (var _i = 0, _c = Object.entries(definitionsMap); _i < _c.length; _i++) {
var _d = _c[_i], key = _d[0], paths = _d[1];
graph.set(key, new Set());
for (var _e = 0, paths_1 = paths; _e < paths_1.length; _e++) {
var path = paths_1[_e];
var parts = path.split(".");
if (parts.length === 1) {
(_a = graph.get(key)) === null || _a === void 0 ? void 0 : _a.add(path);
}
else if (path.startsWith("definitions.")) {
parts.shift(); // Remove 'definitions'
var parentType = parts[0];
if (parentType && parentType !== key) {
(_b = graph.get(key)) === null || _b === void 0 ? void 0 : _b.add(parentType);
}
}
}
}
// Helper to resolve a definition and its dependencies
var resolveDef = function (key) {
var _a;
if (resolved.has(key))
return;
// Resolve dependencies first
(_a = graph.get(key)) === null || _a === void 0 ? void 0 : _a.forEach(function (dep) { return resolveDef(dep); });
if (!definitionsMap[key]) {
return key;
}
var accumulatedPaths = [];
definitionsMap[key].forEach(function (path) {
if (!path.startsWith("definitions.")) {
accumulatedPaths.push(path);
return;
}
var parts = path.split(".");
parts.shift(); // Remove 'definitions'
var parentType = parts.shift();
var remainingPath = parts.join(".");
if (!parentType || !remappedDefinitions[parentType]) {
accumulatedPaths.push(remainingPath);
return;
}
remappedDefinitions[parentType].forEach(function (basePath) {
var newPath = basePath ? "".concat(basePath, ".").concat(remainingPath) : remainingPath;
accumulatedPaths.push(newPath);
});
});
remappedDefinitions[key] = accumulatedPaths;
resolved.add(key);
};
// Resolve all definitions
Object.keys(definitionsMap).forEach(resolveDef);
return remappedDefinitions;
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function createDefinitionsMap(schema, path) {
if (path === void 0) { path = ""; }
var definitionsMap = {};
var simplifyPath = function (path) {
// Remove .items, .patternProperties, and anything after them
return path.split(/\.(items|patternProperties)/)[0];
};
var addToMap = function (definitionName, currentPath) {
if (definitionName && definitionName !== "referenceObject") {
if (!definitionsMap[definitionName]) {
definitionsMap[definitionName] = [];
}
var simplifiedPath = simplifyPath(currentPath);
if (simplifiedPath && !definitionsMap[definitionName].includes(simplifiedPath)) {
definitionsMap[definitionName].push(simplifiedPath);
}
}
};
// Handle object properties recursively
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var traverseObject = function (obj, currentPath) {
if (!obj || typeof obj !== "object")
return;
// Handle direct $ref
if ("$ref" in obj) {
var definitionName = obj["$ref"].split("/").pop();
addToMap(definitionName, currentPath);
}
// Handle arrays with items
if ("items" in obj) {
// Direct $ref in items
if (obj.items.$ref) {
var definitionName = obj.items.$ref.split("/").pop();
addToMap(definitionName, "".concat(currentPath, ".items"));
}
// oneOf in items
if (obj.items.oneOf) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
obj.items.oneOf.forEach(function (item) {
if (item.$ref) {
var definitionName = item.$ref.split("/").pop();
addToMap(definitionName, "".concat(currentPath, ".items"));
}
});
}
}
// Handle properties
if ("properties" in obj) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
Object.entries(obj.properties).forEach(function (_a) {
var key = _a[0], value = _a[1];
var newPath = currentPath ? "".concat(currentPath, ".").concat(key) : key;
traverseObject(value, newPath);
});
}
// Handle oneOf at current level
if ("oneOf" in obj) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
obj.oneOf.forEach(function (item) {
if (item.$ref) {
var definitionName = item.$ref.split("/").pop();
addToMap(definitionName, currentPath);
}
traverseObject(item, currentPath);
});
}
// Recursively traverse all other properties
Object.entries(obj).forEach(function (_a) {
var key = _a[0], value = _a[1];
if (value &&
typeof value === "object" &&
key !== "properties" &&
key !== "items" &&
key !== "oneOf") {
var newPath = currentPath ? "".concat(currentPath, ".").concat(key) : key;
traverseObject(value, newPath);
}
});
};
traverseObject(schema, path);
return remap(definitionsMap);
}
function resolveDefinition(definitionsMap, definitionKey) {
return definitionsMap[definitionKey] || [];
}
// Traverses an object based on a dot-separated path and returns all matching objects at that path
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var getDoc = function (docName, derefDoc) {
var docNames = docName.split(".");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var traverseObject = function (obj, pathParts) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var results = [];
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var traverse = function (current, depth) {
if (!current)
return;
// If we've reached our target depth, collect this object
if (depth === pathParts.length) {
results.push(current);
return;
}
var part = pathParts[depth];
var next = current[part];
// Handle both arrays and objects
if (Array.isArray(next)) {
next.forEach(function (item) { return traverse(item, depth + 1); });
}
else if (next && typeof next === "object") {
traverse(next, depth + 1);
}
};
traverse(obj, 0);
return results;
};
return { items: traverseObject(derefDoc, docNames) };
};
/* eslint-disable @typescript-eslint/no-explicit-any */
var handleExtension = function (extensionOrRef, doc, resolver) { return __awaiter(void 0, void 0, void 0, function () {
var componentSchemas, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(extensionOrRef.$ref !== undefined)) return [3 /*break*/, 2];
return [4 /*yield*/, derefItem({ $ref: extensionOrRef.$ref }, doc, resolver)];
case 1:
extensionOrRef = _b.sent();
_b.label = 2;
case 2:
componentSchemas = {};
if (doc.components && doc.components.schemas) {
componentSchemas = doc.components.schemas;
}
if (!(extensionOrRef.schema !== undefined)) return [3 /*break*/, 4];
_a = extensionOrRef;
return [4 /*yield*/, handleSchemaWithSchemaComponents(extensionOrRef.schema, componentSchemas)];
case 3:
_a.schema = _b.sent();
_b.label = 4;
case 4: return [2 /*return*/, extensionOrRef];
}
});
}); };
/* eslint-enable @typescript-eslint/no-explicit-any */
var handleMethod = function (methodOrRef, doc, resolver) { return __awaiter(void 0, void 0, void 0, function () {

@@ -358,5 +574,5 @@ var method, _a, _b, _c, _d, _i, _e, exPairing, _f, _g, _h, _j, componentSchemas, params, _k, params_1, p, _l, result, _m;

return __awaiter(this, void 0, void 0, function () {
var derefDoc, methods, _i, _a, method, _b, _c;
return __generator(this, function (_d) {
switch (_d.label) {
var derefDoc, definitionsMap, extensions, extensionDerefs, _i, _a, extension, derefedExtension, _b, _c, def, methods, _d, _e, method, _f, _g, _h, extensionDerefs_1, extension, _j, _k, docName, items, _l, items_2, item, _m, _o;
return __generator(this, function (_p) {
switch (_p.label) {
case 0:

@@ -366,17 +582,27 @@ derefDoc = __assign({}, openrpcDocument);

case 1:
derefDoc = _d.sent();
derefDoc = _p.sent();
return [4 /*yield*/, handleSchemasInsideContentDescriptorComponents(derefDoc)];
case 2:
derefDoc = _d.sent();
methods = [];
_i = 0, _a = derefDoc.methods;
_d.label = 3;
derefDoc = _p.sent();
definitionsMap = createDefinitionsMap(meta_schema_1.default);
extensions = [];
extensionDerefs = [];
if (!derefDoc["x-extensions"]) return [3 /*break*/, 7];
_i = 0, _a = derefDoc["x-extensions"];
_p.label = 3;
case 3:
if (!(_i < _a.length)) return [3 /*break*/, 6];
method = _a[_i];
_c = (_b = methods).push;
return [4 /*yield*/, handleMethod(method, derefDoc, resolver)];
extension = _a[_i];
return [4 /*yield*/, handleExtension(extension, derefDoc, resolver)];
case 4:
_c.apply(_b, [_d.sent()]);
_d.label = 5;
derefedExtension = _p.sent();
extensions.push(derefedExtension);
for (_b = 0, _c = derefedExtension.restricted; _b < _c.length; _b++) {
def = _c[_b];
extensionDerefs.push({
extensionName: derefedExtension.name,
docNames: resolveDefinition(definitionsMap, def),
});
}
_p.label = 5;
case 5:

@@ -386,2 +612,53 @@ _i++;

case 6:
derefDoc["x-extensions"] = extensions;
_p.label = 7;
case 7:
methods = [];
_d = 0, _e = derefDoc.methods;
_p.label = 8;
case 8:
if (!(_d < _e.length)) return [3 /*break*/, 11];
method = _e[_d];
_g = (_f = methods).push;
return [4 /*yield*/, handleMethod(method, derefDoc, resolver)];
case 9:
_g.apply(_f, [_p.sent()]);
_p.label = 10;
case 10:
_d++;
return [3 /*break*/, 8];
case 11:
_h = 0, extensionDerefs_1 = extensionDerefs;
_p.label = 12;
case 12:
if (!(_h < extensionDerefs_1.length)) return [3 /*break*/, 19];
extension = extensionDerefs_1[_h];
_j = 0, _k = extension.docNames;
_p.label = 13;
case 13:
if (!(_j < _k.length)) return [3 /*break*/, 18];
docName = _k[_j];
items = getDoc(docName, derefDoc).items;
_l = 0, items_2 = items;
_p.label = 14;
case 14:
if (!(_l < items_2.length)) return [3 /*break*/, 17];
item = items_2[_l];
if (!(item && item[extension.extensionName])) return [3 /*break*/, 16];
_m = item;
_o = extension.extensionName;
return [4 /*yield*/, matchDerefItems(item[extension.extensionName], derefDoc, resolver)];
case 15:
_m[_o] = _p.sent();
_p.label = 16;
case 16:
_l++;
return [3 /*break*/, 14];
case 17:
_j++;
return [3 /*break*/, 13];
case 18:
_h++;
return [3 /*break*/, 12];
case 19:
derefDoc.methods = methods;

@@ -388,0 +665,0 @@ return [2 /*return*/, derefDoc];

5

build/generate-method-id.js

@@ -66,3 +66,6 @@ "use strict";

function generateMethodParamId(method, contentDescriptor) {
var pos = (0, helper_functions_1.findIndex)(method.params, function (o) { return o.name == contentDescriptor.name; });
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var pos = (0, helper_functions_1.findIndex)(method.params, function (o) {
return o.name == contentDescriptor.name;
});
if (pos === -1) {

@@ -69,0 +72,0 @@ throw new ContentDescriptorNotFoundInMethodError(method, contentDescriptor);

@@ -47,3 +47,3 @@ "use strict";

return [4 /*yield*/, (0, fs_extra_1.readJson)(filePath)];
case 1: return [2 /*return*/, _a.sent()];
case 1: return [2 /*return*/, (_a.sent())];
case 2:

@@ -50,0 +50,0 @@ e_1 = _a.sent();

@@ -53,3 +53,3 @@ "use strict";

return [4 /*yield*/, response.json()];
case 2: return [2 /*return*/, _a.sent()];
case 2: return [2 /*return*/, (_a.sent())];
case 3:

@@ -56,0 +56,0 @@ e_1 = _a.sent();

@@ -7,3 +7,3 @@ type TPredicate = (value: any) => boolean;

* @returns {number} || {undefined}
*/
*/
export declare const findIndex: (array: any[], predicate: TPredicate) => number;

@@ -21,3 +21,3 @@ /**

* @returns {any} || {undefined}
*/
*/
export declare const find: (array: any[], predicate: TPredicate) => any;

@@ -30,4 +30,4 @@ /**

* @returns {boolean}
*/
*/
export declare const rpcDocIsEqual: (doc1: any, doc2: any) => boolean;
export {};

@@ -9,3 +9,3 @@ "use strict";

* @returns {number} || {undefined}
*/
*/
var findIndex = function (array, predicate) {

@@ -47,3 +47,3 @@ var length = array == null ? 0 : array.length;

* @returns {any} || {undefined}
*/
*/
var find = function (array, predicate) {

@@ -69,3 +69,3 @@ var length = array == null ? 0 : array.length;

* @returns {boolean}
*/
*/
var rpcDocIsEqual = function (doc1, doc2) {

@@ -86,3 +86,3 @@ var doc1Keys = Object.keys(doc1);

}
else if (typeof doc1[key] === 'object' && typeof doc2[key] === 'object') {
else if (typeof doc1[key] === "object" && typeof doc2[key] === "object") {
if (!(0, exports.rpcDocIsEqual)(doc1[key], doc2[key])) {

@@ -89,0 +89,0 @@ return false;

@@ -45,2 +45,3 @@ "use strict";

}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
_this.ajvValidator.addSchema(param.schema, (0, generate_method_id_1.generateMethodParamId)(method, param));

@@ -69,3 +70,5 @@ });

*/
MethodCallValidator.prototype.validate = function (methodName, params) {
MethodCallValidator.prototype.validate = function (methodName,
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
params) {
var _this = this;

@@ -75,3 +78,5 @@ if (methodName === "rpc.discover") {

}
var method = (0, helper_functions_1.find)(this.document.methods, function (o) { return o.name == methodName; });
var method = (0, helper_functions_1.find)(this.document.methods, function (o) {
return o.name == methodName;
});
if (!method) {

@@ -78,0 +83,0 @@ return new method_not_found_error_1.default(methodName, this.document, params);

@@ -12,3 +12,5 @@ "use strict";

*/
function MethodNotFoundError(methodName, openrpcDocument, receievedParams) {
function MethodNotFoundError(methodName, openrpcDocument,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
receievedParams) {
if (receievedParams === void 0) { receievedParams = []; }

@@ -24,6 +26,8 @@ this.methodName = methodName;

if (openrpcDocument.methods.length > 0) {
msg.push("Valid method names are as follows: ".concat(openrpcDocument.methods.map(function (_a) {
msg.push("Valid method names are as follows: ".concat(openrpcDocument.methods
.map(function (_a) {
var name = _a.name;
return name;
}).join(", ")));
})
.join(", ")));
}

@@ -34,8 +38,10 @@ var stringedParams;

stringedParams = receievedParams
.map(function (p) { try {
return JSON.stringify(p);
}
catch (e) {
return p;
} })
.map(function (p) {
try {
return JSON.stringify(p);
}
catch (e) {
return p;
}
})
.join("\n");

@@ -42,0 +48,0 @@ }

@@ -14,3 +14,5 @@ "use strict";

*/
function ParameterValidationError(paramIndex, expectedSchema, receievedParam, errors) {
function ParameterValidationError(paramIndex, expectedSchema,
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
receievedParam, errors) {
this.paramIndex = paramIndex;

@@ -29,3 +31,3 @@ this.expectedSchema = expectedSchema;

"The Validation errors: \n",
JSON.stringify(errors)
JSON.stringify(errors),
].join("");

@@ -32,0 +34,0 @@ }

"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -18,5 +7,6 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

exports.OpenRPCDocumentValidationError = void 0;
var meta_schema_1 = __importDefault(require("@open-rpc/meta-schema"));
var ajv_1 = __importDefault(require("ajv"));
var meta_schema_2 = __importDefault(require("@json-schema-tools/meta-schema"));
var meta_schema_1 = __importDefault(require("@json-schema-tools/meta-schema"));
var apply_extension_spec_1 = __importDefault(require("./apply-extension-spec"));
var get_extended_metaschema_1 = __importDefault(require("./get-extended-metaschema"));
/**

@@ -68,19 +58,16 @@ * @ignore

var ajv = new ajv_1.default();
ajv.addSchema(meta_schema_2.default, "https://meta.json-schema.tools");
var metaSchemaCopy = __assign({}, meta_schema_1.default);
delete metaSchemaCopy.definitions.JSONSchema.$id;
delete metaSchemaCopy.definitions.JSONSchema.$schema;
delete metaSchemaCopy.$schema;
delete metaSchemaCopy.$id;
ajv.addSchema(meta_schema_1.default, "https://meta.json-schema.tools");
var extMetaSchema = (0, get_extended_metaschema_1.default)();
try {
ajv.validate(metaSchemaCopy, document);
extMetaSchema = (0, apply_extension_spec_1.default)(document, extMetaSchema);
ajv.validate(extMetaSchema, document);
}
catch (e) {
throw new Error([
'schema-utils-js: Internal Error',
'-----',
"schema-utils-js: Internal Error",
"-----",
e,
'-----',
'If you see this report it: https://github.com/open-rpc/schema-utils-js/issues',
].join('\n'));
"-----",
"If you see this report it: https://github.com/open-rpc/schema-utils-js/issues",
].join("\n"));
}

@@ -87,0 +74,0 @@ if (ajv.errors) {

{
"name": "@open-rpc/schema-utils-js",
"private": false,
"version": "2.0.5",
"version": "2.1.0",
"description": "",

@@ -14,2 +14,3 @@ "main": "build/index.js",

"test:unit": "jest --coverage",
"test-debug:unit": "node inspect node_modules/jest/bin/jest.js --coverage",
"test:web": "npm run build:code && webpack && rm -rf dist",

@@ -38,2 +39,3 @@ "watch:test": "jest --watch",

"@open-rpc/meta-schema": "^1.14.9",
"@open-rpc/specification-extension-spec": "^1.0.2",
"ajv": "^6.10.0",

@@ -56,7 +58,9 @@ "detect-node": "^2.0.4",

"@types/webpack-env": "^1.13.9",
"@typescript-eslint/eslint-plugin": "^4.11.1",
"@typescript-eslint/parser": "^4.11.1",
"eslint": "^7.17.0",
"@typescript-eslint/eslint-plugin": "^5.0.0",
"eslint": "^8.0.0",
"eslint-config-prettier": "^8.0.0",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^29.7.0",
"json-schema": "^0.4.0",
"prettier": "^2.0.0",
"rimraf": "^3.0.0",

@@ -63,0 +67,0 @@ "ts-jest": "^29.1.2",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc