UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

58 lines (56 loc) 3.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getContractProperties = void 0; const tslib_1 = require("tslib"); const ts_utils_1 = require("@neo-one/ts-utils"); const typescript_1 = tslib_1.__importDefault(require("typescript")); const constants_1 = require("../constants"); const DiagnosticCode_1 = require("../DiagnosticCode"); const DiagnosticMessage_1 = require("../DiagnosticMessage"); exports.getContractProperties = (context, smartContract) => { const type = context.analysis.getType(smartContract); const name = ts_utils_1.tsUtils.node.getName(smartContract); const defaultContractProperties = Object.assign(Object.assign({}, constants_1.DEFAULT_CONTRACT_PROPERTIES), { name: name === undefined ? constants_1.DEFAULT_CONTRACT_PROPERTIES.name : name }); if (type === undefined) { return defaultContractProperties; } const properties = ts_utils_1.tsUtils.type_ .getProperties(type) .find((symbol) => ts_utils_1.tsUtils.symbol.getName(symbol) === constants_1.ContractPropertyName.properties); if (properties === undefined) { return defaultContractProperties; } const decls = ts_utils_1.tsUtils.symbol .getDeclarations(properties) .filter(typescript_1.default.isPropertyDeclaration) .filter((prop) => ts_utils_1.tsUtils.initializer.getInitializer(prop) !== undefined); if (decls.length === 0) { return defaultContractProperties; } if (decls.length !== 1) { context.reportError(smartContract, DiagnosticCode_1.DiagnosticCode.InvalidContractProperties, DiagnosticMessage_1.DiagnosticMessage.InvalidContractPropertiesInitializer); return defaultContractProperties; } const decl = decls[0]; const initializer = ts_utils_1.tsUtils.initializer.getInitializerOrThrow(decl); if (!typescript_1.default.isObjectLiteralExpression(initializer)) { context.reportError(smartContract, DiagnosticCode_1.DiagnosticCode.InvalidContractProperties, DiagnosticMessage_1.DiagnosticMessage.InvalidContractPropertiesInitializer); return defaultContractProperties; } const contract = {}; for (const property of ts_utils_1.tsUtils.object_.getProperties(initializer)) { if (!typescript_1.default.isPropertyAssignment(property)) { context.reportError(property, DiagnosticCode_1.DiagnosticCode.InvalidContractProperties, DiagnosticMessage_1.DiagnosticMessage.InvalidContractPropertiesInitializer); return defaultContractProperties; } const key = ts_utils_1.tsUtils.node.getName(property); const value = ts_utils_1.tsUtils.initializer.getInitializer(property); if (!typescript_1.default.isLiteralExpression(value)) { context.reportError(value, DiagnosticCode_1.DiagnosticCode.InvalidContractProperties, DiagnosticMessage_1.DiagnosticMessage.InvalidContractPropertiesInitializer); return defaultContractProperties; } contract[key] = ts_utils_1.tsUtils.literal.getLiteralValue(value); } return Object.assign(Object.assign({}, defaultContractProperties), contract); }; //# sourceMappingURL=getContractProperties.js.map