@digitalasset/daml-ledger
Version:
DAML Ledger API Node.js bindings
65 lines • 2.16 kB
JavaScript
;
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
Object.defineProperty(exports, "__esModule", { value: true });
exports.object = void 0;
const Validation_1 = require("./Validation");
function checkRequired(object, required, node) {
for (const key in required) {
if (object.hasOwnProperty(key)) {
required[key].validate(object[key], key, node);
}
else {
node.errors.push({
errorType: 'missing-key',
expectedKey: key,
expectedType: required[key].type
});
}
}
}
function checkOptional(object, optional, node) {
for (const key in optional) {
if (object.hasOwnProperty(key) && object[key] !== undefined) {
optional[key].validate(object[key], key, node);
}
}
}
function checkUnexpected(object, keys, node) {
for (const key in object) {
if (!keys || !keys.hasOwnProperty(key)) {
node.errors.push({
errorType: 'unexpected-key',
key: key
});
}
}
}
function object(type, required, optional) {
return {
type: type,
required: required,
optional: optional,
validate(value, key, validation) {
const node = Validation_1.init(key, validation);
const actualType = Validation_1.typeOf(value);
if (actualType !== 'object') {
node.errors.push({
errorType: 'type-error',
expectedType: type,
actualType: actualType
});
}
else {
const required = this.required();
const optional = this.optional();
checkRequired(value, required, node);
checkOptional(value, optional, node);
checkUnexpected(value, Object.assign({}, required, optional), node);
}
return validation || node;
}
};
}
exports.object = object;
//# sourceMappingURL=Object.js.map