summaryrefslogtreecommitdiff
path: root/node_modules/@babel/helper-define-polyfill-provider/lib/visitors
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/helper-define-polyfill-provider/lib/visitors')
-rw-r--r--node_modules/@babel/helper-define-polyfill-provider/lib/visitors/entry.js26
-rw-r--r--node_modules/@babel/helper-define-polyfill-provider/lib/visitors/index.js9
-rw-r--r--node_modules/@babel/helper-define-polyfill-provider/lib/visitors/usage.js91
3 files changed, 126 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/entry.js b/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/entry.js
new file mode 100644
index 00000000..e8b09030
--- /dev/null
+++ b/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/entry.js
@@ -0,0 +1,26 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _utils = require("../utils");
+var _default = callProvider => ({
+ ImportDeclaration(path) {
+ const source = (0, _utils.getImportSource)(path);
+ if (!source) return;
+ callProvider({
+ kind: "import",
+ source
+ }, path);
+ },
+ Program(path) {
+ path.get("body").forEach(bodyPath => {
+ const source = (0, _utils.getRequireSource)(bodyPath);
+ if (!source) return;
+ callProvider({
+ kind: "import",
+ source
+ }, bodyPath);
+ });
+ }
+});
+exports.default = _default; \ No newline at end of file
diff --git a/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/index.js b/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/index.js
new file mode 100644
index 00000000..056559b9
--- /dev/null
+++ b/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/index.js
@@ -0,0 +1,9 @@
+"use strict";
+
+exports.__esModule = true;
+exports.usage = exports.entry = void 0;
+var _usage = _interopRequireDefault(require("./usage"));
+exports.usage = _usage.default;
+var _entry = _interopRequireDefault(require("./entry"));
+exports.entry = _entry.default;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file
diff --git a/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/usage.js b/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/usage.js
new file mode 100644
index 00000000..4a4c5472
--- /dev/null
+++ b/node_modules/@babel/helper-define-polyfill-provider/lib/visitors/usage.js
@@ -0,0 +1,91 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _utils = require("../utils");
+var _default = callProvider => {
+ function property(object, key, placement, path) {
+ return callProvider({
+ kind: "property",
+ object,
+ key,
+ placement
+ }, path);
+ }
+ return {
+ // Symbol(), new Promise
+ ReferencedIdentifier(path) {
+ const {
+ node: {
+ name
+ },
+ scope
+ } = path;
+ if (scope.getBindingIdentifier(name)) return;
+ callProvider({
+ kind: "global",
+ name
+ }, path);
+ },
+ MemberExpression(path) {
+ const key = (0, _utils.resolveKey)(path.get("property"), path.node.computed);
+ if (!key || key === "prototype") return;
+ const object = path.get("object");
+ if (object.isIdentifier()) {
+ const binding = object.scope.getBinding(object.node.name);
+ if (binding && binding.path.isImportNamespaceSpecifier()) return;
+ }
+ const source = (0, _utils.resolveSource)(object);
+ return property(source.id, key, source.placement, path);
+ },
+ ObjectPattern(path) {
+ const {
+ parentPath,
+ parent
+ } = path;
+ let obj;
+
+ // const { keys, values } = Object
+ if (parentPath.isVariableDeclarator()) {
+ obj = parentPath.get("init");
+ // ({ keys, values } = Object)
+ } else if (parentPath.isAssignmentExpression()) {
+ obj = parentPath.get("right");
+ // !function ({ keys, values }) {...} (Object)
+ // resolution does not work after properties transform :-(
+ } else if (parentPath.isFunction()) {
+ const grand = parentPath.parentPath;
+ if (grand.isCallExpression() || grand.isNewExpression()) {
+ if (grand.node.callee === parent) {
+ obj = grand.get("arguments")[path.key];
+ }
+ }
+ }
+ let id = null;
+ let placement = null;
+ if (obj) ({
+ id,
+ placement
+ } = (0, _utils.resolveSource)(obj));
+ for (const prop of path.get("properties")) {
+ if (prop.isObjectProperty()) {
+ const key = (0, _utils.resolveKey)(prop.get("key"));
+ if (key) property(id, key, placement, prop);
+ }
+ }
+ },
+ BinaryExpression(path) {
+ if (path.node.operator !== "in") return;
+ const source = (0, _utils.resolveSource)(path.get("right"));
+ const key = (0, _utils.resolveKey)(path.get("left"), true);
+ if (!key) return;
+ callProvider({
+ kind: "in",
+ object: source.id,
+ key,
+ placement: source.placement
+ }, path);
+ }
+ };
+};
+exports.default = _default; \ No newline at end of file