UNPKG

@qualifyze/airtable-formulator

Version:
56 lines 2.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.compile = void 0; const schema_1 = require("./schema"); function compile(formula) { const validationErrors = (0, schema_1.validate)(formula); if (validationErrors.length > 0) { throw new Error(`Error in validating formula notation: ${JSON.stringify(validationErrors, null, 2)}`); } return _compile(formula); } exports.compile = compile; function _compileFieldReference({ field }) { // XXX Airtable API does not support curly braces in fieldnames, even though fieldname can contain curly braces if (field.includes("{") || field.includes("}")) { throw new Error(`Invalid field name: '${field}'`); } return `{${field}}`; } function _compileBoolean(bool) { return _compile([bool ? "TRUE" : "FALSE"], bool); } function _compileComposite(compositeOperation, parent) { const [name, ...args] = compositeOperation; const compiledArgs = args.map((arg) => _compile(arg, compositeOperation)); if ((0, schema_1.isFunctionName)(name)) { return _compileFunctionCall([name, ...compiledArgs]); } return _compileOperation([name, ...compiledArgs], parent); } function _compileFunctionCall([name, ...args]) { return `${name}(${args.join(",")})`; } function _compileOperation([op, ...args], parent) { const operationString = args.join(op); if (parent && (0, schema_1.isOperation)(parent)) { return `(${operationString})`; } return operationString; } function _compile(formula, parent) { switch (typeof formula) { case "boolean": return _compileBoolean(formula); case "number": return `${formula}`; case "string": return JSON.stringify(formula); default: if (Array.isArray(formula)) { return _compileComposite(formula, parent); } return _compileFieldReference(formula); } } //# sourceMappingURL=compiler.js.map