@patchworkdev/common
Version:
Patchwork Development Kit
57 lines (56 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseJson = parseJson;
const types_1 = require("../types");
/**
* Parse raw JSON object to a ContractConfig which can be fed to a ContractSchemaImpl
*/
function parseJson(jsonData) {
let contractConfig = {
scopeName: jsonData.scopeName,
name: jsonData.name,
symbol: jsonData.symbol,
baseURI: jsonData.baseURI,
schemaURI: jsonData.schemaURI,
imageURI: jsonData.imageURI,
fields: parseFieldEntries(jsonData),
features: parseFeatures(jsonData),
fragments: parseFragments(jsonData),
};
return contractConfig;
}
function parseFeatures(jsonData) {
let features = [];
if (jsonData.features && Array.isArray(jsonData.features)) {
features = jsonData.features.map((featureName) => {
// Convert the feature name to uppercase for case-insensitive comparison
const normalizedFeatureName = featureName.toUpperCase();
// Find the matching enum key, considering case-insensitivity
const matchingKey = Object.keys(types_1.Feature).find((key) => types_1.Feature[key].toUpperCase() === normalizedFeatureName);
if (!matchingKey) {
throw new Error(`Feature not found: ${featureName}`);
}
return types_1.Feature[matchingKey];
});
}
return features;
}
function parseFieldEntries(jsonData) {
return jsonData.fields.map((field, index) => {
const fieldArrayLength = field.arrayLength === undefined ? 1 : field.arrayLength;
const entry = {
id: field.id,
permissionId: field.permissionId,
type: field.type,
arrayLength: fieldArrayLength,
visibility: "public",
key: field.key,
description: field.description,
functionConfig: field.functionConfig ? field.functionConfig.toUpperCase() : undefined,
};
return entry;
});
}
function parseFragments(jsonData) {
return jsonData.fragments ? jsonData.fragments : [];
}