cst
Version:
JavaScript CST Implementation
109 lines (83 loc) • 3.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _Node2 = require('../Node');
var _Node3 = _interopRequireDefault(_Node2);
var _Identifier = require('./Identifier');
var _Identifier2 = _interopRequireDefault(_Identifier);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ObjectProperty = function (_Node) {
(0, _inherits3.default)(ObjectProperty, _Node);
function ObjectProperty(childNodes) {
(0, _classCallCheck3.default)(this, ObjectProperty);
return (0, _possibleConstructorReturn3.default)(this, (ObjectProperty.__proto__ || (0, _getPrototypeOf2.default)(ObjectProperty)).call(this, 'ObjectProperty', childNodes));
}
(0, _createClass3.default)(ObjectProperty, [{
key: '_acceptChildren',
value: function _acceptChildren(children) {
var key = void 0;
var value = void 0;
var shorthand = false;
var computed = false;
computed = children.isToken('Punctuator', '[');
if (children.isNode('AssignmentPattern')) {
value = children.passNode();
key = value.left;
} else {
key = readKey(children);
if (children.isEnd && key.type === 'Identifier') {
shorthand = true;
value = key;
} else {
children.skipNonCode();
if (children.isNode('FunctionExpression')) {
value = children.passNode('FunctionExpression');
} else {
children.passToken('Punctuator', ':');
children.skipNonCode();
if (children.currentElement.isPattern) {
value = children.passPattern();
} else {
value = children.passExpression();
}
}
}
}
children.assertEnd();
this.key = key;
this.value = value;
this.shorthand = shorthand;
this.computed = computed;
}
}]);
return ObjectProperty;
}(_Node3.default);
exports.default = ObjectProperty;
function readKey(children) {
if (children.isNode('StringLiteral') || children.isNode('NumericLiteral') || children.isNode('Identifier')) {
return children.passNode();
} else if (children.isToken('Identifier')) {
// This element is skipped in elementTree::buildElementTreeItem due to:
// https://github.com/babel/babylon/issues/49
return new _Identifier2.default([children.passToken()]);
} else {
children.passToken('Punctuator', '[');
children.skipNonCode();
var result = children.passExpression();
children.skipNonCode();
children.passToken('Punctuator', ']');
return result;
}
}
//# sourceMappingURL=ObjectProperty.js.map