estree-toolkit
Version:
Traverser, scope tracker, and more tools for working with ESTree AST
39 lines (38 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.builders = exports.getNodeValidationEnabled = exports.setNodeValidationEnabled = void 0;
const definitions_1 = require("./definitions");
const assert_1 = require("./assert");
const helpers_1 = require("./helpers");
let shouldValidateNodes = true;
const setNodeValidationEnabled = (state) => {
shouldValidateNodes = state;
};
exports.setNodeValidationEnabled = setNodeValidationEnabled;
const getNodeValidationEnabled = () => shouldValidateNodes;
exports.getNodeValidationEnabled = getNodeValidationEnabled;
exports.builders = {};
for (const key in definitions_1.definitions) {
const nodeType = key;
const definition = definitions_1.definitions[nodeType];
const { fields } = definition;
const fieldNames = (0, definitions_1.getFieldsOf)(definition, 'builder');
exports.builders[(0, helpers_1.toCamelCase)(nodeType)] = (...args) => {
const node = { type: nodeType };
fieldNames.forEach((fieldName, index) => {
const field = fields[fieldName];
node[fieldName] = args[index] !== undefined ? args[index] : ('default' in field
? (typeof field.default == 'function'
? field.default(node)
: field.default)
: /* istanbul ignore next */ args[index]);
if (shouldValidateNodes && field.validate != null) {
(0, assert_1.runValidation)(field.validate, node[fieldName]);
}
});
if (shouldValidateNodes && definition.finalValidate != null) {
(0, assert_1.runValidation)(definition.finalValidate, node);
}
return node;
};
}