82f2b76e25
We now use webpack instead of SystemJS, effectively bundling modules into one file (plus commons chunks) for every entry point. This results in a much smaller extension size (almost half). Furthermore we use yarn/npm even for extension run-time dependencies. This relieves us from manually vendoring and building dependencies. It's also easier to understand for new developers familiar with node.
266 lines
6.5 KiB
JavaScript
266 lines
6.5 KiB
JavaScript
"use strict";
|
|
|
|
exports.__esModule = true;
|
|
|
|
var _create = require("babel-runtime/core-js/object/create");
|
|
|
|
var _create2 = _interopRequireDefault(_create);
|
|
|
|
var _getIterator2 = require("babel-runtime/core-js/get-iterator");
|
|
|
|
var _getIterator3 = _interopRequireDefault(_getIterator2);
|
|
|
|
exports.getStatementParent = getStatementParent;
|
|
exports.getOpposite = getOpposite;
|
|
exports.getCompletionRecords = getCompletionRecords;
|
|
exports.getSibling = getSibling;
|
|
exports.getPrevSibling = getPrevSibling;
|
|
exports.getNextSibling = getNextSibling;
|
|
exports.getAllNextSiblings = getAllNextSiblings;
|
|
exports.getAllPrevSiblings = getAllPrevSiblings;
|
|
exports.get = get;
|
|
exports._getKey = _getKey;
|
|
exports._getPattern = _getPattern;
|
|
exports.getBindingIdentifiers = getBindingIdentifiers;
|
|
exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers;
|
|
exports.getBindingIdentifierPaths = getBindingIdentifierPaths;
|
|
exports.getOuterBindingIdentifierPaths = getOuterBindingIdentifierPaths;
|
|
|
|
var _index = require("./index");
|
|
|
|
var _index2 = _interopRequireDefault(_index);
|
|
|
|
var _babelTypes = require("babel-types");
|
|
|
|
var t = _interopRequireWildcard(_babelTypes);
|
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function getStatementParent() {
|
|
var path = this;
|
|
|
|
do {
|
|
if (!path.parentPath || Array.isArray(path.container) && path.isStatement()) {
|
|
break;
|
|
} else {
|
|
path = path.parentPath;
|
|
}
|
|
} while (path);
|
|
|
|
if (path && (path.isProgram() || path.isFile())) {
|
|
throw new Error("File/Program node, we can't possibly find a statement parent to this");
|
|
}
|
|
|
|
return path;
|
|
}
|
|
|
|
function getOpposite() {
|
|
if (this.key === "left") {
|
|
return this.getSibling("right");
|
|
} else if (this.key === "right") {
|
|
return this.getSibling("left");
|
|
}
|
|
}
|
|
|
|
function getCompletionRecords() {
|
|
var paths = [];
|
|
|
|
var add = function add(path) {
|
|
if (path) paths = paths.concat(path.getCompletionRecords());
|
|
};
|
|
|
|
if (this.isIfStatement()) {
|
|
add(this.get("consequent"));
|
|
add(this.get("alternate"));
|
|
} else if (this.isDoExpression() || this.isFor() || this.isWhile()) {
|
|
add(this.get("body"));
|
|
} else if (this.isProgram() || this.isBlockStatement()) {
|
|
add(this.get("body").pop());
|
|
} else if (this.isFunction()) {
|
|
return this.get("body").getCompletionRecords();
|
|
} else if (this.isTryStatement()) {
|
|
add(this.get("block"));
|
|
add(this.get("handler"));
|
|
add(this.get("finalizer"));
|
|
} else {
|
|
paths.push(this);
|
|
}
|
|
|
|
return paths;
|
|
}
|
|
|
|
function getSibling(key) {
|
|
return _index2.default.get({
|
|
parentPath: this.parentPath,
|
|
parent: this.parent,
|
|
container: this.container,
|
|
listKey: this.listKey,
|
|
key: key
|
|
});
|
|
}
|
|
|
|
function getPrevSibling() {
|
|
return this.getSibling(this.key - 1);
|
|
}
|
|
|
|
function getNextSibling() {
|
|
return this.getSibling(this.key + 1);
|
|
}
|
|
|
|
function getAllNextSiblings() {
|
|
var _key = this.key;
|
|
var sibling = this.getSibling(++_key);
|
|
var siblings = [];
|
|
while (sibling.node) {
|
|
siblings.push(sibling);
|
|
sibling = this.getSibling(++_key);
|
|
}
|
|
return siblings;
|
|
}
|
|
|
|
function getAllPrevSiblings() {
|
|
var _key = this.key;
|
|
var sibling = this.getSibling(--_key);
|
|
var siblings = [];
|
|
while (sibling.node) {
|
|
siblings.push(sibling);
|
|
sibling = this.getSibling(--_key);
|
|
}
|
|
return siblings;
|
|
}
|
|
|
|
function get(key, context) {
|
|
if (context === true) context = this.context;
|
|
var parts = key.split(".");
|
|
if (parts.length === 1) {
|
|
return this._getKey(key, context);
|
|
} else {
|
|
return this._getPattern(parts, context);
|
|
}
|
|
}
|
|
|
|
function _getKey(key, context) {
|
|
var _this = this;
|
|
|
|
var node = this.node;
|
|
var container = node[key];
|
|
|
|
if (Array.isArray(container)) {
|
|
return container.map(function (_, i) {
|
|
return _index2.default.get({
|
|
listKey: key,
|
|
parentPath: _this,
|
|
parent: node,
|
|
container: container,
|
|
key: i
|
|
}).setContext(context);
|
|
});
|
|
} else {
|
|
return _index2.default.get({
|
|
parentPath: this,
|
|
parent: node,
|
|
container: node,
|
|
key: key
|
|
}).setContext(context);
|
|
}
|
|
}
|
|
|
|
function _getPattern(parts, context) {
|
|
var path = this;
|
|
for (var _iterator = parts, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
|
|
var _ref;
|
|
|
|
if (_isArray) {
|
|
if (_i >= _iterator.length) break;
|
|
_ref = _iterator[_i++];
|
|
} else {
|
|
_i = _iterator.next();
|
|
if (_i.done) break;
|
|
_ref = _i.value;
|
|
}
|
|
|
|
var part = _ref;
|
|
|
|
if (part === ".") {
|
|
path = path.parentPath;
|
|
} else {
|
|
if (Array.isArray(path)) {
|
|
path = path[part];
|
|
} else {
|
|
path = path.get(part, context);
|
|
}
|
|
}
|
|
}
|
|
return path;
|
|
}
|
|
|
|
function getBindingIdentifiers(duplicates) {
|
|
return t.getBindingIdentifiers(this.node, duplicates);
|
|
}
|
|
|
|
function getOuterBindingIdentifiers(duplicates) {
|
|
return t.getOuterBindingIdentifiers(this.node, duplicates);
|
|
}
|
|
|
|
function getBindingIdentifierPaths() {
|
|
var duplicates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
var outerOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
|
|
var path = this;
|
|
var search = [].concat(path);
|
|
var ids = (0, _create2.default)(null);
|
|
|
|
while (search.length) {
|
|
var id = search.shift();
|
|
if (!id) continue;
|
|
if (!id.node) continue;
|
|
|
|
var keys = t.getBindingIdentifiers.keys[id.node.type];
|
|
|
|
if (id.isIdentifier()) {
|
|
if (duplicates) {
|
|
var _ids = ids[id.node.name] = ids[id.node.name] || [];
|
|
_ids.push(id);
|
|
} else {
|
|
ids[id.node.name] = id;
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if (id.isExportDeclaration()) {
|
|
var declaration = id.get("declaration");
|
|
if (declaration.isDeclaration()) {
|
|
search.push(declaration);
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if (outerOnly) {
|
|
if (id.isFunctionDeclaration()) {
|
|
search.push(id.get("id"));
|
|
continue;
|
|
}
|
|
if (id.isFunctionExpression()) {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if (keys) {
|
|
for (var i = 0; i < keys.length; i++) {
|
|
var key = keys[i];
|
|
var child = id.get(key);
|
|
if (Array.isArray(child) || child.node) {
|
|
search = search.concat(child);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ids;
|
|
}
|
|
|
|
function getOuterBindingIdentifierPaths(duplicates) {
|
|
return this.getBindingIdentifierPaths(duplicates, true);
|
|
} |