@babel/traverse 7.22.7 → 8.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/lib/cache.js +7 -32
  2. package/lib/cache.js.map +1 -1
  3. package/lib/context.js +7 -14
  4. package/lib/context.js.map +1 -1
  5. package/lib/hub.js +1 -8
  6. package/lib/hub.js.map +1 -1
  7. package/lib/index.js +4847 -36
  8. package/lib/index.js.map +1 -1
  9. package/lib/path/ancestry.js +11 -26
  10. package/lib/path/ancestry.js.map +1 -1
  11. package/lib/path/comments.js +4 -12
  12. package/lib/path/comments.js.map +1 -1
  13. package/lib/path/context.js +35 -63
  14. package/lib/path/context.js.map +1 -1
  15. package/lib/path/conversion.js +18 -38
  16. package/lib/path/conversion.js.map +1 -1
  17. package/lib/path/evaluation.js +4 -11
  18. package/lib/path/evaluation.js.map +1 -1
  19. package/lib/path/family.js +19 -33
  20. package/lib/path/family.js.map +1 -1
  21. package/lib/path/index.js +45 -53
  22. package/lib/path/index.js.map +1 -1
  23. package/lib/path/inference/index.js +9 -21
  24. package/lib/path/inference/index.js.map +1 -1
  25. package/lib/path/inference/inferer-reference.js +5 -11
  26. package/lib/path/inference/inferer-reference.js.map +1 -1
  27. package/lib/path/inference/inferers.js +30 -65
  28. package/lib/path/inference/inferers.js.map +1 -1
  29. package/lib/path/inference/util.js +6 -16
  30. package/lib/path/inference/util.js.map +1 -1
  31. package/lib/path/introspection.js +20 -45
  32. package/lib/path/introspection.js.map +1 -1
  33. package/lib/path/lib/hoister.js +10 -17
  34. package/lib/path/lib/hoister.js.map +1 -1
  35. package/lib/path/lib/removal-hooks.js +1 -8
  36. package/lib/path/lib/removal-hooks.js.map +1 -1
  37. package/lib/path/lib/virtual-types-validator.js +19 -42
  38. package/lib/path/lib/virtual-types-validator.js.map +1 -1
  39. package/lib/path/lib/virtual-types.js +18 -42
  40. package/lib/path/lib/virtual-types.js.map +1 -1
  41. package/lib/path/modification.js +20 -35
  42. package/lib/path/modification.js.map +1 -1
  43. package/lib/path/removal.js +13 -27
  44. package/lib/path/removal.js.map +1 -1
  45. package/lib/path/replacement.js +25 -38
  46. package/lib/path/replacement.js.map +1 -1
  47. package/lib/scope/binding.js +10 -17
  48. package/lib/scope/binding.js.map +1 -1
  49. package/lib/scope/index.js +49 -66
  50. package/lib/scope/index.js.map +1 -1
  51. package/lib/scope/lib/renamer.js +12 -20
  52. package/lib/scope/lib/renamer.js.map +1 -1
  53. package/lib/traverse-node.js +5 -15
  54. package/lib/traverse-node.js.map +1 -1
  55. package/lib/visitors.js +16 -24
  56. package/lib/visitors.js.map +1 -1
  57. package/package.json +17 -14
@@ -1,40 +1,25 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.find = find;
7
- exports.findParent = findParent;
8
- exports.getAncestry = getAncestry;
9
- exports.getDeepestCommonAncestorFrom = getDeepestCommonAncestorFrom;
10
- exports.getEarliestCommonAncestorFrom = getEarliestCommonAncestorFrom;
11
- exports.getFunctionParent = getFunctionParent;
12
- exports.getStatementParent = getStatementParent;
13
- exports.inType = inType;
14
- exports.isAncestor = isAncestor;
15
- exports.isDescendant = isDescendant;
16
- var _t = require("@babel/types");
1
+ import * as _t from "@babel/types";
17
2
  const {
18
3
  VISITOR_KEYS
19
4
  } = _t;
20
- function findParent(callback) {
5
+ export function findParent(callback) {
21
6
  let path = this;
22
7
  while (path = path.parentPath) {
23
8
  if (callback(path)) return path;
24
9
  }
25
10
  return null;
26
11
  }
27
- function find(callback) {
12
+ export function find(callback) {
28
13
  let path = this;
29
14
  do {
30
15
  if (callback(path)) return path;
31
16
  } while (path = path.parentPath);
32
17
  return null;
33
18
  }
34
- function getFunctionParent() {
19
+ export function getFunctionParent() {
35
20
  return this.findParent(p => p.isFunction());
36
21
  }
37
- function getStatementParent() {
22
+ export function getStatementParent() {
38
23
  let path = this;
39
24
  do {
40
25
  if (!path.parentPath || Array.isArray(path.container) && path.isStatement()) {
@@ -48,7 +33,7 @@ function getStatementParent() {
48
33
  }
49
34
  return path;
50
35
  }
51
- function getEarliestCommonAncestorFrom(paths) {
36
+ export function getEarliestCommonAncestorFrom(paths) {
52
37
  return this.getDeepestCommonAncestorFrom(paths, function (deepest, i, ancestries) {
53
38
  let earliest;
54
39
  const keys = VISITOR_KEYS[deepest.type];
@@ -73,7 +58,7 @@ function getEarliestCommonAncestorFrom(paths) {
73
58
  return earliest;
74
59
  });
75
60
  }
76
- function getDeepestCommonAncestorFrom(paths, filter) {
61
+ export function getDeepestCommonAncestorFrom(paths, filter) {
77
62
  if (!paths.length) {
78
63
  return this;
79
64
  }
@@ -113,7 +98,7 @@ function getDeepestCommonAncestorFrom(paths, filter) {
113
98
  throw new Error("Couldn't find intersection");
114
99
  }
115
100
  }
116
- function getAncestry() {
101
+ export function getAncestry() {
117
102
  let path = this;
118
103
  const paths = [];
119
104
  do {
@@ -121,13 +106,13 @@ function getAncestry() {
121
106
  } while (path = path.parentPath);
122
107
  return paths;
123
108
  }
124
- function isAncestor(maybeDescendant) {
109
+ export function isAncestor(maybeDescendant) {
125
110
  return maybeDescendant.isDescendant(this);
126
111
  }
127
- function isDescendant(maybeAncestor) {
112
+ export function isDescendant(maybeAncestor) {
128
113
  return !!this.findParent(parent => parent === maybeAncestor);
129
114
  }
130
- function inType(...candidateTypes) {
115
+ export function inType(...candidateTypes) {
131
116
  let path = this;
132
117
  while (path) {
133
118
  for (const type of candidateTypes) {
@@ -1 +1 @@
1
- {"version":3,"names":["_t","require","VISITOR_KEYS","findParent","callback","path","parentPath","find","getFunctionParent","p","isFunction","getStatementParent","Array","isArray","container","isStatement","isProgram","isFile","Error","getEarliestCommonAncestorFrom","paths","getDeepestCommonAncestorFrom","deepest","i","ancestries","earliest","keys","type","ancestry","listKey","key","earliestKeyIndex","indexOf","parentKey","currentKeyIndex","filter","length","minDepth","Infinity","lastCommonIndex","lastCommon","map","unshift","first","depthLoop","shouldMatch","getAncestry","push","isAncestor","maybeDescendant","isDescendant","maybeAncestor","parent","inType","candidateTypes","node"],"sources":["../../src/path/ancestry.ts"],"sourcesContent":["// This file contains that retrieve or validate anything related to the current paths ancestry.\n\nimport { VISITOR_KEYS } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type NodePath from \"./index\";\n\n/**\n * Starting at the parent path of the current `NodePath` and going up the\n * tree, return the first `NodePath` that causes the provided `callback`\n * to return a truthy value, or `null` if the `callback` never returns a\n * truthy value.\n */\n\nexport function findParent(\n this: NodePath,\n callback: (path: NodePath) => boolean,\n): NodePath | null {\n let path = this;\n while ((path = path.parentPath)) {\n if (callback(path)) return path;\n }\n return null;\n}\n\n/**\n * Starting at current `NodePath` and going up the tree, return the first\n * `NodePath` that causes the provided `callback` to return a truthy value,\n * or `null` if the `callback` never returns a truthy value.\n */\n\nexport function find(\n this: NodePath,\n callback: (path: NodePath) => boolean,\n): NodePath | null {\n let path = this;\n do {\n if (callback(path)) return path;\n } while ((path = path.parentPath));\n return null;\n}\n\n/**\n * Get the parent function of the current path.\n */\n\nexport function getFunctionParent(this: NodePath): NodePath<t.Function> | null {\n return this.findParent(p => p.isFunction()) as NodePath<t.Function> | null;\n}\n\n/**\n * Walk up the tree until we hit a parent node path in a list.\n */\n\nexport function getStatementParent(this: NodePath): NodePath<t.Statement> {\n let path = this;\n\n do {\n if (\n !path.parentPath ||\n (Array.isArray(path.container) && path.isStatement())\n ) {\n break;\n } else {\n path = path.parentPath;\n }\n } while (path);\n\n if (path && (path.isProgram() || path.isFile())) {\n throw new Error(\n \"File/Program node, we can't possibly find a statement parent to this\",\n );\n }\n\n return path as NodePath<t.Statement>;\n}\n\n/**\n * Get the deepest common ancestor and then from it, get the earliest relationship path\n * to that ancestor.\n *\n * Earliest is defined as being \"before\" all the other nodes in terms of list container\n * position and visiting key.\n */\n\nexport function getEarliestCommonAncestorFrom(\n this: NodePath,\n paths: Array<NodePath>,\n): NodePath {\n return this.getDeepestCommonAncestorFrom(\n paths,\n function (deepest, i, ancestries) {\n let earliest;\n const keys = VISITOR_KEYS[deepest.type];\n\n for (const ancestry of ancestries) {\n const path = ancestry[i + 1];\n\n // first path\n if (!earliest) {\n earliest = path;\n continue;\n }\n\n // handle containers\n if (path.listKey && earliest.listKey === path.listKey) {\n // we're in the same container so check if we're earlier\n if (path.key < earliest.key) {\n earliest = path;\n continue;\n }\n }\n\n // handle keys\n const earliestKeyIndex = keys.indexOf(earliest.parentKey);\n const currentKeyIndex = keys.indexOf(path.parentKey);\n if (earliestKeyIndex > currentKeyIndex) {\n // key appears before so it's earlier\n earliest = path;\n }\n }\n\n return earliest;\n },\n );\n}\n\n/**\n * Get the earliest path in the tree where the provided `paths` intersect.\n *\n * TODO: Possible optimisation target.\n */\n\nexport function getDeepestCommonAncestorFrom(\n this: NodePath,\n paths: Array<NodePath>,\n filter?: (deepest: NodePath, i: number, ancestries: NodePath[][]) => NodePath,\n): NodePath {\n if (!paths.length) {\n return this;\n }\n\n if (paths.length === 1) {\n return paths[0];\n }\n\n // minimum depth of the tree so we know the highest node\n let minDepth = Infinity;\n\n // last common ancestor\n let lastCommonIndex, lastCommon;\n\n // get the ancestors of the path, breaking when the parent exceeds ourselves\n const ancestries = paths.map(path => {\n const ancestry: NodePath[] = [];\n\n do {\n ancestry.unshift(path);\n } while ((path = path.parentPath) && path !== this);\n\n // save min depth to avoid going too far in\n if (ancestry.length < minDepth) {\n minDepth = ancestry.length;\n }\n\n return ancestry;\n });\n\n // get the first ancestry so we have a seed to assess all other ancestries with\n const first = ancestries[0];\n\n // check ancestor equality\n depthLoop: for (let i = 0; i < minDepth; i++) {\n const shouldMatch = first[i];\n\n for (const ancestry of ancestries) {\n if (ancestry[i] !== shouldMatch) {\n // we've hit a snag\n break depthLoop;\n }\n }\n\n // next iteration may break so store these so they can be returned\n lastCommonIndex = i;\n lastCommon = shouldMatch;\n }\n\n if (lastCommon) {\n if (filter) {\n return filter(lastCommon, lastCommonIndex, ancestries);\n } else {\n return lastCommon;\n }\n } else {\n throw new Error(\"Couldn't find intersection\");\n }\n}\n\n/**\n * Build an array of node paths containing the entire ancestry of the current node path.\n *\n * NOTE: The current node path is included in this.\n */\n\nexport function getAncestry(this: NodePath): Array<NodePath> {\n let path = this;\n const paths = [];\n do {\n paths.push(path);\n } while ((path = path.parentPath));\n return paths;\n}\n\n/**\n * A helper to find if `this` path is an ancestor of @param maybeDescendant\n */\nexport function isAncestor(this: NodePath, maybeDescendant: NodePath): boolean {\n return maybeDescendant.isDescendant(this);\n}\n\n/**\n * A helper to find if `this` path is a descendant of @param maybeAncestor\n */\nexport function isDescendant(this: NodePath, maybeAncestor: NodePath): boolean {\n return !!this.findParent(parent => parent === maybeAncestor);\n}\n\nexport function inType(this: NodePath, ...candidateTypes: string[]): boolean {\n let path = this;\n while (path) {\n for (const type of candidateTypes) {\n if (path.node.type === type) return true;\n }\n path = path.parentPath;\n }\n\n return false;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_t","VISITOR_KEYS","findParent","callback","path","parentPath","find","getFunctionParent","p","isFunction","getStatementParent","Array","isArray","container","isStatement","isProgram","isFile","Error","getEarliestCommonAncestorFrom","paths","getDeepestCommonAncestorFrom","deepest","i","ancestries","earliest","keys","type","ancestry","listKey","key","earliestKeyIndex","indexOf","parentKey","currentKeyIndex","filter","length","minDepth","Infinity","lastCommonIndex","lastCommon","map","unshift","first","depthLoop","shouldMatch","getAncestry","push","isAncestor","maybeDescendant","isDescendant","maybeAncestor","parent","inType","candidateTypes","node"],"sources":["../../src/path/ancestry.ts"],"sourcesContent":["// This file contains that retrieve or validate anything related to the current paths ancestry.\n\nimport { VISITOR_KEYS } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type NodePath from \"./index\";\n\n/**\n * Starting at the parent path of the current `NodePath` and going up the\n * tree, return the first `NodePath` that causes the provided `callback`\n * to return a truthy value, or `null` if the `callback` never returns a\n * truthy value.\n */\n\nexport function findParent(\n this: NodePath,\n callback: (path: NodePath) => boolean,\n): NodePath | null {\n let path = this;\n while ((path = path.parentPath)) {\n if (callback(path)) return path;\n }\n return null;\n}\n\n/**\n * Starting at current `NodePath` and going up the tree, return the first\n * `NodePath` that causes the provided `callback` to return a truthy value,\n * or `null` if the `callback` never returns a truthy value.\n */\n\nexport function find(\n this: NodePath,\n callback: (path: NodePath) => boolean,\n): NodePath | null {\n let path = this;\n do {\n if (callback(path)) return path;\n } while ((path = path.parentPath));\n return null;\n}\n\n/**\n * Get the parent function of the current path.\n */\n\nexport function getFunctionParent(this: NodePath): NodePath<t.Function> | null {\n return this.findParent(p => p.isFunction()) as NodePath<t.Function> | null;\n}\n\n/**\n * Walk up the tree until we hit a parent node path in a list.\n */\n\nexport function getStatementParent(this: NodePath): NodePath<t.Statement> {\n let path = this;\n\n do {\n if (\n !path.parentPath ||\n (Array.isArray(path.container) && path.isStatement())\n ) {\n break;\n } else {\n path = path.parentPath;\n }\n } while (path);\n\n if (path && (path.isProgram() || path.isFile())) {\n throw new Error(\n \"File/Program node, we can't possibly find a statement parent to this\",\n );\n }\n\n return path as NodePath<t.Statement>;\n}\n\n/**\n * Get the deepest common ancestor and then from it, get the earliest relationship path\n * to that ancestor.\n *\n * Earliest is defined as being \"before\" all the other nodes in terms of list container\n * position and visiting key.\n */\n\nexport function getEarliestCommonAncestorFrom(\n this: NodePath,\n paths: Array<NodePath>,\n): NodePath {\n return this.getDeepestCommonAncestorFrom(\n paths,\n function (deepest, i, ancestries) {\n let earliest;\n const keys = VISITOR_KEYS[deepest.type];\n\n for (const ancestry of ancestries) {\n const path = ancestry[i + 1];\n\n // first path\n if (!earliest) {\n earliest = path;\n continue;\n }\n\n // handle containers\n if (path.listKey && earliest.listKey === path.listKey) {\n // we're in the same container so check if we're earlier\n if (path.key < earliest.key) {\n earliest = path;\n continue;\n }\n }\n\n // handle keys\n const earliestKeyIndex = keys.indexOf(earliest.parentKey);\n const currentKeyIndex = keys.indexOf(path.parentKey);\n if (earliestKeyIndex > currentKeyIndex) {\n // key appears before so it's earlier\n earliest = path;\n }\n }\n\n return earliest;\n },\n );\n}\n\n/**\n * Get the earliest path in the tree where the provided `paths` intersect.\n *\n * TODO: Possible optimisation target.\n */\n\nexport function getDeepestCommonAncestorFrom(\n this: NodePath,\n paths: Array<NodePath>,\n filter?: (deepest: NodePath, i: number, ancestries: NodePath[][]) => NodePath,\n): NodePath {\n if (!paths.length) {\n return this;\n }\n\n if (paths.length === 1) {\n return paths[0];\n }\n\n // minimum depth of the tree so we know the highest node\n let minDepth = Infinity;\n\n // last common ancestor\n let lastCommonIndex, lastCommon;\n\n // get the ancestors of the path, breaking when the parent exceeds ourselves\n const ancestries = paths.map(path => {\n const ancestry: NodePath[] = [];\n\n do {\n ancestry.unshift(path);\n } while ((path = path.parentPath) && path !== this);\n\n // save min depth to avoid going too far in\n if (ancestry.length < minDepth) {\n minDepth = ancestry.length;\n }\n\n return ancestry;\n });\n\n // get the first ancestry so we have a seed to assess all other ancestries with\n const first = ancestries[0];\n\n // check ancestor equality\n depthLoop: for (let i = 0; i < minDepth; i++) {\n const shouldMatch = first[i];\n\n for (const ancestry of ancestries) {\n if (ancestry[i] !== shouldMatch) {\n // we've hit a snag\n break depthLoop;\n }\n }\n\n // next iteration may break so store these so they can be returned\n lastCommonIndex = i;\n lastCommon = shouldMatch;\n }\n\n if (lastCommon) {\n if (filter) {\n return filter(lastCommon, lastCommonIndex, ancestries);\n } else {\n return lastCommon;\n }\n } else {\n throw new Error(\"Couldn't find intersection\");\n }\n}\n\n/**\n * Build an array of node paths containing the entire ancestry of the current node path.\n *\n * NOTE: The current node path is included in this.\n */\n\nexport function getAncestry(this: NodePath): Array<NodePath> {\n let path = this;\n const paths = [];\n do {\n paths.push(path);\n } while ((path = path.parentPath));\n return paths;\n}\n\n/**\n * A helper to find if `this` path is an ancestor of @param maybeDescendant\n */\nexport function isAncestor(this: NodePath, maybeDescendant: NodePath): boolean {\n return maybeDescendant.isDescendant(this);\n}\n\n/**\n * A helper to find if `this` path is a descendant of @param maybeAncestor\n */\nexport function isDescendant(this: NodePath, maybeAncestor: NodePath): boolean {\n return !!this.findParent(parent => parent === maybeAncestor);\n}\n\nexport function inType(this: NodePath, ...candidateTypes: string[]): boolean {\n let path = this;\n while (path) {\n for (const type of candidateTypes) {\n if (path.node.type === type) return true;\n }\n path = path.parentPath;\n }\n\n return false;\n}\n"],"mappings":"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"}
@@ -1,17 +1,9 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.addComment = addComment;
7
- exports.addComments = addComments;
8
- exports.shareCommentsWithSiblings = shareCommentsWithSiblings;
9
- var _t = require("@babel/types");
1
+ import * as _t from "@babel/types";
10
2
  const {
11
3
  addComment: _addComment,
12
4
  addComments: _addComments
13
5
  } = _t;
14
- function shareCommentsWithSiblings() {
6
+ export function shareCommentsWithSiblings() {
15
7
  if (typeof this.key === "string") return;
16
8
  const node = this.node;
17
9
  if (!node) return;
@@ -44,10 +36,10 @@ function removeIfExisting(list, toRemove) {
44
36
  lastFoundIndex = i;
45
37
  });
46
38
  }
47
- function addComment(type, content, line) {
39
+ export function addComment(type, content, line) {
48
40
  _addComment(this.node, type, content, line);
49
41
  }
50
- function addComments(type, comments) {
42
+ export function addComments(type, comments) {
51
43
  _addComments(this.node, type, comments);
52
44
  }
53
45
 
@@ -1 +1 @@
1
- {"version":3,"names":["_t","require","addComment","_addComment","addComments","_addComments","shareCommentsWithSiblings","key","node","trailing","trailingComments","leading","leadingComments","prev","getSibling","next","hasPrev","Boolean","hasNext","removeIfExisting","list","toRemove","lastFoundIndex","filter","el","i","indexOf","type","content","line","comments"],"sources":["../../src/path/comments.ts"],"sourcesContent":["// This file contains methods responsible for dealing with comments.\nimport type * as t from \"@babel/types\";\nimport type NodePath from \"./index\";\nimport {\n addComment as _addComment,\n addComments as _addComments,\n} from \"@babel/types\";\n\n/**\n * Share comments amongst siblings.\n */\n\nexport function shareCommentsWithSiblings(this: NodePath) {\n // NOTE: this assumes numbered keys\n if (typeof this.key === \"string\") return;\n\n const node = this.node;\n if (!node) return;\n\n const trailing = node.trailingComments;\n const leading = node.leadingComments;\n if (!trailing && !leading) return;\n\n const prev = this.getSibling(this.key - 1);\n const next = this.getSibling(this.key + 1);\n const hasPrev = Boolean(prev.node);\n const hasNext = Boolean(next.node);\n\n if (hasPrev) {\n if (leading) {\n prev.addComments(\n \"trailing\",\n removeIfExisting(leading, prev.node.trailingComments),\n );\n }\n if (trailing && !hasNext) prev.addComments(\"trailing\", trailing);\n }\n if (hasNext) {\n if (trailing) {\n next.addComments(\n \"leading\",\n removeIfExisting(trailing, next.node.leadingComments),\n );\n }\n if (leading && !hasPrev) next.addComments(\"leading\", leading);\n }\n}\n\nfunction removeIfExisting<T>(list: T[], toRemove?: T[]): T[] {\n if (!toRemove) return list;\n let lastFoundIndex = -1;\n return list.filter(el => {\n const i = toRemove.indexOf(el, lastFoundIndex);\n if (i === -1) return true;\n lastFoundIndex = i;\n });\n}\n\nexport function addComment(\n this: NodePath,\n type: t.CommentTypeShorthand,\n content: string,\n line?: boolean,\n) {\n _addComment(this.node, type, content, line);\n}\n\n/**\n * Give node `comments` of the specified `type`.\n */\n\nexport function addComments(\n this: NodePath,\n type: t.CommentTypeShorthand,\n comments: t.Comment[],\n) {\n _addComments(this.node, type, comments);\n}\n"],"mappings":";;;;;;;;AAGA,IAAAA,EAAA,GAAAC,OAAA;AAGsB;EAFpBC,UAAU,EAAIC,WAAW;EACzBC,WAAW,EAAIC;AAAY,IAAAL,EAAA;AAOtB,SAASM,yBAAyBA,CAAA,EAAiB;EAExD,IAAI,OAAO,IAAI,CAACC,GAAG,KAAK,QAAQ,EAAE;EAElC,MAAMC,IAAI,GAAG,IAAI,CAACA,IAAI;EACtB,IAAI,CAACA,IAAI,EAAE;EAEX,MAAMC,QAAQ,GAAGD,IAAI,CAACE,gBAAgB;EACtC,MAAMC,OAAO,GAAGH,IAAI,CAACI,eAAe;EACpC,IAAI,CAACH,QAAQ,IAAI,CAACE,OAAO,EAAE;EAE3B,MAAME,IAAI,GAAG,IAAI,CAACC,UAAU,CAAC,IAAI,CAACP,GAAG,GAAG,CAAC,CAAC;EAC1C,MAAMQ,IAAI,GAAG,IAAI,CAACD,UAAU,CAAC,IAAI,CAACP,GAAG,GAAG,CAAC,CAAC;EAC1C,MAAMS,OAAO,GAAGC,OAAO,CAACJ,IAAI,CAACL,IAAI,CAAC;EAClC,MAAMU,OAAO,GAAGD,OAAO,CAACF,IAAI,CAACP,IAAI,CAAC;EAElC,IAAIQ,OAAO,EAAE;IACX,IAAIL,OAAO,EAAE;MACXE,IAAI,CAACT,WAAW,CACd,UAAU,EACVe,gBAAgB,CAACR,OAAO,EAAEE,IAAI,CAACL,IAAI,CAACE,gBAAgB,CACtD,CAAC;IACH;IACA,IAAID,QAAQ,IAAI,CAACS,OAAO,EAAEL,IAAI,CAACT,WAAW,CAAC,UAAU,EAAEK,QAAQ,CAAC;EAClE;EACA,IAAIS,OAAO,EAAE;IACX,IAAIT,QAAQ,EAAE;MACZM,IAAI,CAACX,WAAW,CACd,SAAS,EACTe,gBAAgB,CAACV,QAAQ,EAAEM,IAAI,CAACP,IAAI,CAACI,eAAe,CACtD,CAAC;IACH;IACA,IAAID,OAAO,IAAI,CAACK,OAAO,EAAED,IAAI,CAACX,WAAW,CAAC,SAAS,EAAEO,OAAO,CAAC;EAC/D;AACF;AAEA,SAASQ,gBAAgBA,CAAIC,IAAS,EAAEC,QAAc,EAAO;EAC3D,IAAI,CAACA,QAAQ,EAAE,OAAOD,IAAI;EAC1B,IAAIE,cAAc,GAAG,CAAC,CAAC;EACvB,OAAOF,IAAI,CAACG,MAAM,CAACC,EAAE,IAAI;IACvB,MAAMC,CAAC,GAAGJ,QAAQ,CAACK,OAAO,CAACF,EAAE,EAAEF,cAAc,CAAC;IAC9C,IAAIG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI;IACzBH,cAAc,GAAGG,CAAC;EACpB,CAAC,CAAC;AACJ;AAEO,SAASvB,UAAUA,CAExByB,IAA4B,EAC5BC,OAAe,EACfC,IAAc,EACd;EACA1B,WAAW,CAAC,IAAI,CAACK,IAAI,EAAEmB,IAAI,EAAEC,OAAO,EAAEC,IAAI,CAAC;AAC7C;AAMO,SAASzB,WAAWA,CAEzBuB,IAA4B,EAC5BG,QAAqB,EACrB;EACAzB,YAAY,CAAC,IAAI,CAACG,IAAI,EAAEmB,IAAI,EAAEG,QAAQ,CAAC;AACzC"}
1
+ {"version":3,"names":["_t","addComment","_addComment","addComments","_addComments","shareCommentsWithSiblings","key","node","trailing","trailingComments","leading","leadingComments","prev","getSibling","next","hasPrev","Boolean","hasNext","removeIfExisting","list","toRemove","lastFoundIndex","filter","el","i","indexOf","type","content","line","comments"],"sources":["../../src/path/comments.ts"],"sourcesContent":["// This file contains methods responsible for dealing with comments.\nimport type * as t from \"@babel/types\";\nimport type NodePath from \"./index\";\nimport {\n addComment as _addComment,\n addComments as _addComments,\n} from \"@babel/types\";\n\n/**\n * Share comments amongst siblings.\n */\n\nexport function shareCommentsWithSiblings(this: NodePath) {\n // NOTE: this assumes numbered keys\n if (typeof this.key === \"string\") return;\n\n const node = this.node;\n if (!node) return;\n\n const trailing = node.trailingComments;\n const leading = node.leadingComments;\n if (!trailing && !leading) return;\n\n const prev = this.getSibling(this.key - 1);\n const next = this.getSibling(this.key + 1);\n const hasPrev = Boolean(prev.node);\n const hasNext = Boolean(next.node);\n\n if (hasPrev) {\n if (leading) {\n prev.addComments(\n \"trailing\",\n removeIfExisting(leading, prev.node.trailingComments),\n );\n }\n if (trailing && !hasNext) prev.addComments(\"trailing\", trailing);\n }\n if (hasNext) {\n if (trailing) {\n next.addComments(\n \"leading\",\n removeIfExisting(trailing, next.node.leadingComments),\n );\n }\n if (leading && !hasPrev) next.addComments(\"leading\", leading);\n }\n}\n\nfunction removeIfExisting<T>(list: T[], toRemove?: T[]): T[] {\n if (!toRemove) return list;\n let lastFoundIndex = -1;\n return list.filter(el => {\n const i = toRemove.indexOf(el, lastFoundIndex);\n if (i === -1) return true;\n lastFoundIndex = i;\n });\n}\n\nexport function addComment(\n this: NodePath,\n type: t.CommentTypeShorthand,\n content: string,\n line?: boolean,\n) {\n _addComment(this.node, type, content, line);\n}\n\n/**\n * Give node `comments` of the specified `type`.\n */\n\nexport function addComments(\n this: NodePath,\n type: t.CommentTypeShorthand,\n comments: t.Comment[],\n) {\n _addComments(this.node, type, comments);\n}\n"],"mappings":"AAGA,YAAAA,EAAA,MAGO,cAAc;AAAC;EAFpBC,UAAU,EAAIC,WAAW;EACzBC,WAAW,EAAIC;AAAY,IAAAJ,EAAA;AAO7B,OAAO,SAASK,yBAAyBA,CAAA,EAAiB;EAExD,IAAI,OAAO,IAAI,CAACC,GAAG,KAAK,QAAQ,EAAE;EAElC,MAAMC,IAAI,GAAG,IAAI,CAACA,IAAI;EACtB,IAAI,CAACA,IAAI,EAAE;EAEX,MAAMC,QAAQ,GAAGD,IAAI,CAACE,gBAAgB;EACtC,MAAMC,OAAO,GAAGH,IAAI,CAACI,eAAe;EACpC,IAAI,CAACH,QAAQ,IAAI,CAACE,OAAO,EAAE;EAE3B,MAAME,IAAI,GAAG,IAAI,CAACC,UAAU,CAAC,IAAI,CAACP,GAAG,GAAG,CAAC,CAAC;EAC1C,MAAMQ,IAAI,GAAG,IAAI,CAACD,UAAU,CAAC,IAAI,CAACP,GAAG,GAAG,CAAC,CAAC;EAC1C,MAAMS,OAAO,GAAGC,OAAO,CAACJ,IAAI,CAACL,IAAI,CAAC;EAClC,MAAMU,OAAO,GAAGD,OAAO,CAACF,IAAI,CAACP,IAAI,CAAC;EAElC,IAAIQ,OAAO,EAAE;IACX,IAAIL,OAAO,EAAE;MACXE,IAAI,CAACT,WAAW,CACd,UAAU,EACVe,gBAAgB,CAACR,OAAO,EAAEE,IAAI,CAACL,IAAI,CAACE,gBAAgB,CACtD,CAAC;IACH;IACA,IAAID,QAAQ,IAAI,CAACS,OAAO,EAAEL,IAAI,CAACT,WAAW,CAAC,UAAU,EAAEK,QAAQ,CAAC;EAClE;EACA,IAAIS,OAAO,EAAE;IACX,IAAIT,QAAQ,EAAE;MACZM,IAAI,CAACX,WAAW,CACd,SAAS,EACTe,gBAAgB,CAACV,QAAQ,EAAEM,IAAI,CAACP,IAAI,CAACI,eAAe,CACtD,CAAC;IACH;IACA,IAAID,OAAO,IAAI,CAACK,OAAO,EAAED,IAAI,CAACX,WAAW,CAAC,SAAS,EAAEO,OAAO,CAAC;EAC/D;AACF;AAEA,SAASQ,gBAAgBA,CAAIC,IAAS,EAAEC,QAAc,EAAO;EAC3D,IAAI,CAACA,QAAQ,EAAE,OAAOD,IAAI;EAC1B,IAAIE,cAAc,GAAG,CAAC,CAAC;EACvB,OAAOF,IAAI,CAACG,MAAM,CAACC,EAAE,IAAI;IACvB,MAAMC,CAAC,GAAGJ,QAAQ,CAACK,OAAO,CAACF,EAAE,EAAEF,cAAc,CAAC;IAC9C,IAAIG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI;IACzBH,cAAc,GAAGG,CAAC;EACpB,CAAC,CAAC;AACJ;AAEA,OAAO,SAASvB,UAAUA,CAExByB,IAA4B,EAC5BC,OAAe,EACfC,IAAc,EACd;EACA1B,WAAW,CAAC,IAAI,CAACK,IAAI,EAAEmB,IAAI,EAAEC,OAAO,EAAEC,IAAI,CAAC;AAC7C;AAMA,OAAO,SAASzB,WAAWA,CAEzBuB,IAA4B,EAC5BG,QAAqB,EACrB;EACAzB,YAAY,CAAC,IAAI,CAACG,IAAI,EAAEmB,IAAI,EAAEG,QAAQ,CAAC;AACzC"}
@@ -1,43 +1,17 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports._call = _call;
7
- exports._getQueueContexts = _getQueueContexts;
8
- exports._resyncKey = _resyncKey;
9
- exports._resyncList = _resyncList;
10
- exports._resyncParent = _resyncParent;
11
- exports._resyncRemoved = _resyncRemoved;
12
- exports.call = call;
13
- exports.isBlacklisted = exports.isDenylisted = isDenylisted;
14
- exports.popContext = popContext;
15
- exports.pushContext = pushContext;
16
- exports.requeue = requeue;
17
- exports.resync = resync;
18
- exports.setContext = setContext;
19
- exports.setKey = setKey;
20
- exports.setScope = setScope;
21
- exports.setup = setup;
22
- exports.skip = skip;
23
- exports.skipKey = skipKey;
24
- exports.stop = stop;
25
- exports.visit = visit;
26
- var _traverseNode = require("../traverse-node");
27
- var _index = require("./index");
28
- function call(key) {
1
+ import { traverseNode } from "../traverse-node.js";
2
+ import { SHOULD_SKIP, SHOULD_STOP } from "./index.js";
3
+ export function call(key) {
29
4
  const opts = this.opts;
30
5
  this.debug(key);
31
6
  if (this.node) {
32
7
  if (this._call(opts[key])) return true;
33
8
  }
34
9
  if (this.node) {
35
- var _opts$this$node$type;
36
- return this._call((_opts$this$node$type = opts[this.node.type]) == null ? void 0 : _opts$this$node$type[key]);
10
+ return this._call(opts[this.node.type]?.[key]);
37
11
  }
38
12
  return false;
39
13
  }
40
- function _call(fns) {
14
+ export function _call(fns) {
41
15
  if (!fns) return false;
42
16
  for (const fn of fns) {
43
17
  if (!fn) continue;
@@ -55,11 +29,11 @@ function _call(fns) {
55
29
  }
56
30
  return false;
57
31
  }
58
- function isDenylisted() {
59
- var _this$opts$denylist;
60
- const denylist = (_this$opts$denylist = this.opts.denylist) != null ? _this$opts$denylist : this.opts.blacklist;
32
+ export function isDenylisted() {
33
+ const denylist = this.opts.denylist ?? this.opts.blacklist;
61
34
  return denylist && denylist.indexOf(this.node.type) > -1;
62
35
  }
36
+ export { isDenylisted as isBlacklisted };
63
37
  function restoreContext(path, context) {
64
38
  if (path.context !== context) {
65
39
  path.context = context;
@@ -67,15 +41,14 @@ function restoreContext(path, context) {
67
41
  path.opts = context.opts;
68
42
  }
69
43
  }
70
- function visit() {
71
- var _this$opts$shouldSkip, _this$opts;
44
+ export function visit() {
72
45
  if (!this.node) {
73
46
  return false;
74
47
  }
75
48
  if (this.isDenylisted()) {
76
49
  return false;
77
50
  }
78
- if ((_this$opts$shouldSkip = (_this$opts = this.opts).shouldSkip) != null && _this$opts$shouldSkip.call(_this$opts, this)) {
51
+ if (this.opts.shouldSkip?.(this)) {
79
52
  return false;
80
53
  }
81
54
  const currentContext = this.context;
@@ -85,41 +58,39 @@ function visit() {
85
58
  }
86
59
  restoreContext(this, currentContext);
87
60
  this.debug("Recursing into...");
88
- this.shouldStop = (0, _traverseNode.traverseNode)(this.node, this.opts, this.scope, this.state, this, this.skipKeys);
61
+ this.shouldStop = traverseNode(this.node, this.opts, this.scope, this.state, this, this.skipKeys);
89
62
  restoreContext(this, currentContext);
90
63
  this.call("exit");
91
64
  return this.shouldStop;
92
65
  }
93
- function skip() {
66
+ export function skip() {
94
67
  this.shouldSkip = true;
95
68
  }
96
- function skipKey(key) {
69
+ export function skipKey(key) {
97
70
  if (this.skipKeys == null) {
98
71
  this.skipKeys = {};
99
72
  }
100
73
  this.skipKeys[key] = true;
101
74
  }
102
- function stop() {
103
- this._traverseFlags |= _index.SHOULD_SKIP | _index.SHOULD_STOP;
75
+ export function stop() {
76
+ this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;
104
77
  }
105
- function setScope() {
106
- var _this$opts2, _this$scope;
107
- if ((_this$opts2 = this.opts) != null && _this$opts2.noScope) return;
78
+ export function setScope() {
79
+ if (this.opts?.noScope) return;
108
80
  let path = this.parentPath;
109
81
  if ((this.key === "key" || this.listKey === "decorators") && path.isMethod() || this.key === "discriminant" && path.isSwitchStatement()) {
110
82
  path = path.parentPath;
111
83
  }
112
84
  let target;
113
85
  while (path && !target) {
114
- var _path$opts;
115
- if ((_path$opts = path.opts) != null && _path$opts.noScope) return;
86
+ if (path.opts?.noScope) return;
116
87
  target = path.scope;
117
88
  path = path.parentPath;
118
89
  }
119
90
  this.scope = this.getScope(target);
120
- (_this$scope = this.scope) == null ? void 0 : _this$scope.init();
91
+ this.scope?.init();
121
92
  }
122
- function setContext(context) {
93
+ export function setContext(context) {
123
94
  if (this.skipKeys != null) {
124
95
  this.skipKeys = {};
125
96
  }
@@ -132,18 +103,18 @@ function setContext(context) {
132
103
  this.setScope();
133
104
  return this;
134
105
  }
135
- function resync() {
106
+ export function resync() {
136
107
  if (this.removed) return;
137
108
  this._resyncParent();
138
109
  this._resyncList();
139
110
  this._resyncKey();
140
111
  }
141
- function _resyncParent() {
112
+ export function _resyncParent() {
142
113
  if (this.parentPath) {
143
114
  this.parent = this.parentPath.node;
144
115
  }
145
116
  }
146
- function _resyncKey() {
117
+ export function _resyncKey() {
147
118
  if (!this.container) return;
148
119
  if (this.node === this.container[this.key]) {
149
120
  return;
@@ -165,18 +136,18 @@ function _resyncKey() {
165
136
  }
166
137
  this.key = null;
167
138
  }
168
- function _resyncList() {
139
+ export function _resyncList() {
169
140
  if (!this.parent || !this.inList) return;
170
141
  const newContainer = this.parent[this.listKey];
171
142
  if (this.container === newContainer) return;
172
143
  this.container = newContainer || null;
173
144
  }
174
- function _resyncRemoved() {
145
+ export function _resyncRemoved() {
175
146
  if (this.key == null || !this.container || this.container[this.key] !== this.node) {
176
147
  this._markRemoved();
177
148
  }
178
149
  }
179
- function popContext() {
150
+ export function popContext() {
180
151
  this.contexts.pop();
181
152
  if (this.contexts.length > 0) {
182
153
  this.setContext(this.contexts[this.contexts.length - 1]);
@@ -184,31 +155,32 @@ function popContext() {
184
155
  this.setContext(undefined);
185
156
  }
186
157
  }
187
- function pushContext(context) {
158
+ export function pushContext(context) {
188
159
  this.contexts.push(context);
189
160
  this.setContext(context);
190
161
  }
191
- function setup(parentPath, container, listKey, key) {
162
+ export function setup(parentPath, container, listKey, key) {
192
163
  this.listKey = listKey;
193
164
  this.container = container;
194
165
  this.parentPath = parentPath || this.parentPath;
195
166
  this.setKey(key);
196
167
  }
197
- function setKey(key) {
198
- var _this$node;
168
+ export function setKey(key) {
199
169
  this.key = key;
200
170
  this.node = this.container[this.key];
201
- this.type = (_this$node = this.node) == null ? void 0 : _this$node.type;
171
+ this.type = this.node?.type;
202
172
  }
203
- function requeue(pathToQueue = this) {
173
+ export function requeue(pathToQueue = this) {
204
174
  if (pathToQueue.removed) return;
205
- ;
175
+ {
176
+ pathToQueue.shouldSkip = false;
177
+ }
206
178
  const contexts = this.contexts;
207
179
  for (const context of contexts) {
208
180
  context.maybeQueue(pathToQueue);
209
181
  }
210
182
  }
211
- function _getQueueContexts() {
183
+ export function _getQueueContexts() {
212
184
  let path = this;
213
185
  let contexts = this.contexts;
214
186
  while (!contexts.length) {
@@ -1 +1 @@
1
- {"version":3,"names":["_traverseNode","require","_index","call","key","opts","debug","node","_call","_opts$this$node$type","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","_this$opts$denylist","denylist","blacklist","indexOf","restoreContext","path","context","visit","_this$opts$shouldSkip","_this$opts","shouldSkip","currentContext","shouldStop","traverseNode","scope","skipKeys","skip","skipKey","stop","SHOULD_SKIP","SHOULD_STOP","setScope","_this$opts2","_this$scope","noScope","parentPath","listKey","isMethod","isSwitchStatement","target","_path$opts","getScope","init","setContext","resync","removed","_resyncParent","_resyncList","_resyncKey","parent","container","Array","isArray","i","length","setKey","Object","keys","inList","newContainer","_resyncRemoved","_markRemoved","popContext","contexts","pop","undefined","pushContext","push","setup","_this$node","requeue","pathToQueue","maybeQueue","_getQueueContexts"],"sources":["../../src/path/context.ts"],"sourcesContent":["// This file contains methods responsible for maintaining a TraversalContext.\n\nimport { traverseNode } from \"../traverse-node\";\nimport { SHOULD_SKIP, SHOULD_STOP } from \"./index\";\nimport type TraversalContext from \"../context\";\nimport type { VisitPhase } from \"../types\";\nimport type NodePath from \"./index\";\nimport type * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: VisitPhase): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (this._call(opts[key])) return true;\n }\n\n if (this.node) {\n return this._call(opts[this.node.type]?.[key]);\n }\n\n return false;\n}\n\nexport function _call(this: NodePath, fns?: Array<Function>): boolean {\n if (!fns) return false;\n\n for (const fn of fns) {\n if (!fn) continue;\n\n const node = this.node;\n if (!node) return true;\n\n const ret = fn.call(this.state, this, this.state);\n if (ret && typeof ret === \"object\" && typeof ret.then === \"function\") {\n throw new Error(\n `You appear to be using a plugin with an async traversal visitor, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n if (ret) {\n throw new Error(`Unexpected return value from visitor method ${fn}`);\n }\n\n // node has been replaced, it will have been requeued\n if (this.node !== node) return true;\n\n // this.shouldSkip || this.shouldStop || this.removed\n if (this._traverseFlags > 0) return true;\n }\n\n return false;\n}\n\nexport function isDenylisted(this: NodePath): boolean {\n // @ts-expect-error TODO(Babel 8): Remove blacklist\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist && denylist.indexOf(this.node.type) > -1;\n}\n\n// TODO: Remove in Babel 8\nexport { isDenylisted as isBlacklisted };\n\nfunction restoreContext(path: NodePath, context: TraversalContext) {\n if (path.context !== context) {\n path.context = context;\n path.state = context.state;\n path.opts = context.opts;\n }\n}\n\nexport function visit(this: NodePath): boolean {\n if (!this.node) {\n return false;\n }\n\n if (this.isDenylisted()) {\n return false;\n }\n\n if (this.opts.shouldSkip?.(this)) {\n return false;\n }\n\n const currentContext = this.context;\n // Note: We need to check \"this.shouldSkip\" first because\n // another visitor can set it to true. Usually .shouldSkip is false\n // before calling the enter visitor, but it can be true in case of\n // a requeued node (e.g. by .replaceWith()) that is then marked\n // with .skip().\n if (this.shouldSkip || this.call(\"enter\")) {\n this.debug(\"Skip...\");\n return this.shouldStop;\n }\n restoreContext(this, currentContext);\n\n this.debug(\"Recursing into...\");\n this.shouldStop = traverseNode(\n this.node,\n this.opts,\n this.scope,\n this.state,\n this,\n this.skipKeys,\n );\n\n restoreContext(this, currentContext);\n\n this.call(\"exit\");\n\n return this.shouldStop;\n}\n\nexport function skip(this: NodePath) {\n this.shouldSkip = true;\n}\n\nexport function skipKey(this: NodePath, key: string) {\n if (this.skipKeys == null) {\n this.skipKeys = {};\n }\n this.skipKeys[key] = true;\n}\n\nexport function stop(this: NodePath) {\n // this.shouldSkip = true; this.shouldStop = true;\n this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;\n}\n\nexport function setScope(this: NodePath) {\n if (this.opts?.noScope) return;\n\n let path = this.parentPath;\n\n if (\n // Skip method scope if is computed method key or decorator expression\n ((this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()) ||\n // Skip switch scope if for discriminant (`x` in `switch (x) {}`).\n (this.key === \"discriminant\" && path.isSwitchStatement())\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n if (path.opts?.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n this.scope = this.getScope(target);\n this.scope?.init();\n}\n\nexport function setContext<S = unknown>(\n this: NodePath,\n context?: TraversalContext<S>,\n) {\n if (this.skipKeys != null) {\n this.skipKeys = {};\n }\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n this._traverseFlags = 0;\n\n if (context) {\n this.context = context;\n this.state = context.state;\n // Discard the S type parameter from contect.opts\n this.opts = context.opts as typeof this.opts;\n }\n\n this.setScope();\n\n return this;\n}\n\n/**\n * Here we resync the node paths `key` and `container`. If they've changed according\n * to what we have stored internally then we attempt to resync by crawling and looking\n * for the new values.\n */\n\nexport function resync(this: NodePath) {\n if (this.removed) return;\n\n this._resyncParent();\n this._resyncList();\n this._resyncKey();\n //this._resyncRemoved();\n}\n\nexport function _resyncParent(this: NodePath) {\n if (this.parentPath) {\n this.parent = this.parentPath.node;\n }\n}\n\nexport function _resyncKey(this: NodePath) {\n if (!this.container) return;\n\n if (\n this.node ===\n // @ts-expect-error this.key should present in this.container\n this.container[this.key]\n ) {\n return;\n }\n\n // grrr, path key is out of sync. this is likely due to a modification to the AST\n // not done through our path APIs\n\n if (Array.isArray(this.container)) {\n for (let i = 0; i < this.container.length; i++) {\n if (this.container[i] === this.node) {\n this.setKey(i);\n return;\n }\n }\n } else {\n for (const key of Object.keys(this.container)) {\n // @ts-expect-error this.key should present in this.container\n if (this.container[key] === this.node) {\n this.setKey(key);\n return;\n }\n }\n }\n\n // ¯\\_(ツ)_/¯ who knows where it's gone lol\n this.key = null;\n}\n\nexport function _resyncList(this: NodePath) {\n if (!this.parent || !this.inList) return;\n\n const newContainer =\n // @ts-expect-error this.listKey should present in this.parent\n this.parent[this.listKey];\n if (this.container === newContainer) return;\n\n // container is out of sync. this is likely the result of it being reassigned\n this.container = newContainer || null;\n}\n\nexport function _resyncRemoved(this: NodePath) {\n if (\n this.key == null ||\n !this.container ||\n // @ts-expect-error this.key should present in this.container\n this.container[this.key] !== this.node\n ) {\n this._markRemoved();\n }\n}\n\nexport function popContext(this: NodePath) {\n this.contexts.pop();\n if (this.contexts.length > 0) {\n this.setContext(this.contexts[this.contexts.length - 1]);\n } else {\n this.setContext(undefined);\n }\n}\n\nexport function pushContext(this: NodePath, context: TraversalContext) {\n this.contexts.push(context);\n this.setContext(context);\n}\n\nexport function setup(\n this: NodePath,\n parentPath: NodePath | undefined,\n container: t.Node | t.Node[],\n listKey: string,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n this.setKey(key);\n}\n\nexport function setKey(this: NodePath, key: string | number) {\n this.key = key;\n this.node =\n // @ts-expect-error this.key must present in this.container\n this.container[this.key];\n this.type = this.node?.type;\n}\n\nexport function requeue(this: NodePath, pathToQueue = this) {\n if (pathToQueue.removed) return;\n\n // If a path is skipped, and then replaced with a\n // new one, the new one shouldn't probably be skipped.\n if (process.env.BABEL_8_BREAKING) {\n pathToQueue.shouldSkip = false;\n }\n\n // TODO(loganfsmyth): This should be switched back to queue in parent contexts\n // automatically once #2892 and #4135 have been resolved. See #4140.\n // let contexts = this._getQueueContexts();\n const contexts = this.contexts;\n\n for (const context of contexts) {\n context.maybeQueue(pathToQueue);\n }\n}\n\nexport function _getQueueContexts(this: NodePath) {\n let path = this;\n let contexts = this.contexts;\n while (!contexts.length) {\n path = path.parentPath;\n if (!path) break;\n contexts = path.contexts;\n }\n return contexts;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["traverseNode","SHOULD_SKIP","SHOULD_STOP","call","key","opts","debug","node","_call","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","denylist","blacklist","indexOf","isBlacklisted","restoreContext","path","context","visit","shouldSkip","currentContext","shouldStop","scope","skipKeys","skip","skipKey","stop","setScope","noScope","parentPath","listKey","isMethod","isSwitchStatement","target","getScope","init","setContext","resync","removed","_resyncParent","_resyncList","_resyncKey","parent","container","Array","isArray","i","length","setKey","Object","keys","inList","newContainer","_resyncRemoved","_markRemoved","popContext","contexts","pop","undefined","pushContext","push","setup","requeue","pathToQueue","maybeQueue","_getQueueContexts"],"sources":["../../src/path/context.ts"],"sourcesContent":["// This file contains methods responsible for maintaining a TraversalContext.\n\nimport { traverseNode } from \"../traverse-node\";\nimport { SHOULD_SKIP, SHOULD_STOP } from \"./index\";\nimport type TraversalContext from \"../context\";\nimport type { VisitPhase } from \"../types\";\nimport type NodePath from \"./index\";\nimport type * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: VisitPhase): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (this._call(opts[key])) return true;\n }\n\n if (this.node) {\n return this._call(opts[this.node.type]?.[key]);\n }\n\n return false;\n}\n\nexport function _call(this: NodePath, fns?: Array<Function>): boolean {\n if (!fns) return false;\n\n for (const fn of fns) {\n if (!fn) continue;\n\n const node = this.node;\n if (!node) return true;\n\n const ret = fn.call(this.state, this, this.state);\n if (ret && typeof ret === \"object\" && typeof ret.then === \"function\") {\n throw new Error(\n `You appear to be using a plugin with an async traversal visitor, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n if (ret) {\n throw new Error(`Unexpected return value from visitor method ${fn}`);\n }\n\n // node has been replaced, it will have been requeued\n if (this.node !== node) return true;\n\n // this.shouldSkip || this.shouldStop || this.removed\n if (this._traverseFlags > 0) return true;\n }\n\n return false;\n}\n\nexport function isDenylisted(this: NodePath): boolean {\n // @ts-expect-error TODO(Babel 8): Remove blacklist\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist && denylist.indexOf(this.node.type) > -1;\n}\n\n// TODO: Remove in Babel 8\nexport { isDenylisted as isBlacklisted };\n\nfunction restoreContext(path: NodePath, context: TraversalContext) {\n if (path.context !== context) {\n path.context = context;\n path.state = context.state;\n path.opts = context.opts;\n }\n}\n\nexport function visit(this: NodePath): boolean {\n if (!this.node) {\n return false;\n }\n\n if (this.isDenylisted()) {\n return false;\n }\n\n if (this.opts.shouldSkip?.(this)) {\n return false;\n }\n\n const currentContext = this.context;\n // Note: We need to check \"this.shouldSkip\" first because\n // another visitor can set it to true. Usually .shouldSkip is false\n // before calling the enter visitor, but it can be true in case of\n // a requeued node (e.g. by .replaceWith()) that is then marked\n // with .skip().\n if (this.shouldSkip || this.call(\"enter\")) {\n this.debug(\"Skip...\");\n return this.shouldStop;\n }\n restoreContext(this, currentContext);\n\n this.debug(\"Recursing into...\");\n this.shouldStop = traverseNode(\n this.node,\n this.opts,\n this.scope,\n this.state,\n this,\n this.skipKeys,\n );\n\n restoreContext(this, currentContext);\n\n this.call(\"exit\");\n\n return this.shouldStop;\n}\n\nexport function skip(this: NodePath) {\n this.shouldSkip = true;\n}\n\nexport function skipKey(this: NodePath, key: string) {\n if (this.skipKeys == null) {\n this.skipKeys = {};\n }\n this.skipKeys[key] = true;\n}\n\nexport function stop(this: NodePath) {\n // this.shouldSkip = true; this.shouldStop = true;\n this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;\n}\n\nexport function setScope(this: NodePath) {\n if (this.opts?.noScope) return;\n\n let path = this.parentPath;\n\n if (\n // Skip method scope if is computed method key or decorator expression\n ((this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()) ||\n // Skip switch scope if for discriminant (`x` in `switch (x) {}`).\n (this.key === \"discriminant\" && path.isSwitchStatement())\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n if (path.opts?.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n this.scope = this.getScope(target);\n this.scope?.init();\n}\n\nexport function setContext<S = unknown>(\n this: NodePath,\n context?: TraversalContext<S>,\n) {\n if (this.skipKeys != null) {\n this.skipKeys = {};\n }\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n this._traverseFlags = 0;\n\n if (context) {\n this.context = context;\n this.state = context.state;\n // Discard the S type parameter from context.opts\n this.opts = context.opts as typeof this.opts;\n }\n\n this.setScope();\n\n return this;\n}\n\n/**\n * Here we resync the node paths `key` and `container`. If they've changed according\n * to what we have stored internally then we attempt to resync by crawling and looking\n * for the new values.\n */\n\nexport function resync(this: NodePath) {\n if (this.removed) return;\n\n this._resyncParent();\n this._resyncList();\n this._resyncKey();\n //this._resyncRemoved();\n}\n\nexport function _resyncParent(this: NodePath) {\n if (this.parentPath) {\n this.parent = this.parentPath.node;\n }\n}\n\nexport function _resyncKey(this: NodePath) {\n if (!this.container) return;\n\n if (\n this.node ===\n // @ts-expect-error this.key should present in this.container\n this.container[this.key]\n ) {\n return;\n }\n\n // grrr, path key is out of sync. this is likely due to a modification to the AST\n // not done through our path APIs\n\n if (Array.isArray(this.container)) {\n for (let i = 0; i < this.container.length; i++) {\n if (this.container[i] === this.node) {\n this.setKey(i);\n return;\n }\n }\n } else {\n for (const key of Object.keys(this.container)) {\n // @ts-expect-error this.key should present in this.container\n if (this.container[key] === this.node) {\n this.setKey(key);\n return;\n }\n }\n }\n\n // ¯\\_(ツ)_/¯ who knows where it's gone lol\n this.key = null;\n}\n\nexport function _resyncList(this: NodePath) {\n if (!this.parent || !this.inList) return;\n\n const newContainer =\n // @ts-expect-error this.listKey should present in this.parent\n this.parent[this.listKey];\n if (this.container === newContainer) return;\n\n // container is out of sync. this is likely the result of it being reassigned\n this.container = newContainer || null;\n}\n\nexport function _resyncRemoved(this: NodePath) {\n if (\n this.key == null ||\n !this.container ||\n // @ts-expect-error this.key should present in this.container\n this.container[this.key] !== this.node\n ) {\n this._markRemoved();\n }\n}\n\nexport function popContext(this: NodePath) {\n this.contexts.pop();\n if (this.contexts.length > 0) {\n this.setContext(this.contexts[this.contexts.length - 1]);\n } else {\n this.setContext(undefined);\n }\n}\n\nexport function pushContext(this: NodePath, context: TraversalContext) {\n this.contexts.push(context);\n this.setContext(context);\n}\n\nexport function setup(\n this: NodePath,\n parentPath: NodePath | undefined,\n container: t.Node | t.Node[],\n listKey: string,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n this.setKey(key);\n}\n\nexport function setKey(this: NodePath, key: string | number) {\n this.key = key;\n this.node =\n // @ts-expect-error this.key must present in this.container\n this.container[this.key];\n this.type = this.node?.type;\n}\n\nexport function requeue(this: NodePath, pathToQueue = this) {\n if (pathToQueue.removed) return;\n\n // If a path is skipped, and then replaced with a\n // new one, the new one shouldn't probably be skipped.\n if (process.env.BABEL_8_BREAKING) {\n pathToQueue.shouldSkip = false;\n }\n\n // TODO(loganfsmyth): This should be switched back to queue in parent contexts\n // automatically once #2892 and #4135 have been resolved. See #4140.\n // let contexts = this._getQueueContexts();\n const contexts = this.contexts;\n\n for (const context of contexts) {\n context.maybeQueue(pathToQueue);\n }\n}\n\nexport function _getQueueContexts(this: NodePath) {\n let path = this;\n let contexts = this.contexts;\n while (!contexts.length) {\n path = path.parentPath;\n if (!path) break;\n contexts = path.contexts;\n }\n return contexts;\n}\n"],"mappings":"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"}
@@ -1,16 +1,4 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.arrowFunctionToExpression = arrowFunctionToExpression;
7
- exports.ensureBlock = ensureBlock;
8
- exports.toComputedKey = toComputedKey;
9
- exports.unwrapFunctionEnvironment = unwrapFunctionEnvironment;
10
- var _t = require("@babel/types");
11
- var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
12
- var _helperFunctionName = require("@babel/helper-function-name");
13
- var _visitors = require("../visitors");
1
+ import * as _t from "@babel/types";
14
2
  const {
15
3
  arrowFunctionExpression,
16
4
  assignmentExpression,
@@ -38,7 +26,10 @@ const {
38
26
  toExpression,
39
27
  unaryExpression
40
28
  } = _t;
41
- function toComputedKey() {
29
+ import environmentVisitor from "@babel/helper-environment-visitor";
30
+ import nameFunction from "@babel/helper-function-name";
31
+ import { merge as mergeVisitors } from "../visitors.js";
32
+ export function toComputedKey() {
42
33
  let key;
43
34
  if (this.isMemberExpression()) {
44
35
  key = this.node.property;
@@ -52,7 +43,7 @@ function toComputedKey() {
52
43
  }
53
44
  return key;
54
45
  }
55
- function ensureBlock() {
46
+ export function ensureBlock() {
56
47
  const body = this.get("body");
57
48
  const bodyNode = body.node;
58
49
  if (Array.isArray(body)) {
@@ -87,15 +78,8 @@ function ensureBlock() {
87
78
  body.setup(parentPath, listKey ? parentPath.node[listKey] : parentPath.node, listKey, key);
88
79
  return this.node;
89
80
  }
90
- {
91
- {
92
- exports.arrowFunctionToShadowed = function () {
93
- if (!this.isArrowFunctionExpression()) return;
94
- this.arrowFunctionToExpression();
95
- };
96
- }
97
- }
98
- function unwrapFunctionEnvironment() {
81
+ ;
82
+ export function unwrapFunctionEnvironment() {
99
83
  if (!this.isArrowFunctionExpression() && !this.isFunctionExpression() && !this.isFunctionDeclaration()) {
100
84
  throw this.buildCodeFrameError("Can only unwrap the environment of a function.");
101
85
  }
@@ -104,13 +88,10 @@ function unwrapFunctionEnvironment() {
104
88
  function setType(path, type) {
105
89
  path.node.type = type;
106
90
  }
107
- function arrowFunctionToExpression({
91
+ export function arrowFunctionToExpression({
108
92
  allowInsertArrow = true,
109
93
  allowInsertArrowWithRest = allowInsertArrow,
110
- noNewArrows = !(() => {
111
- var _arguments$;
112
- return (_arguments$ = arguments[0]) == null ? void 0 : _arguments$.specCompliant;
113
- })()
94
+ noNewArrows = true
114
95
  } = {}) {
115
96
  if (!this.isArrowFunctionExpression()) {
116
97
  throw this.buildCodeFrameError("Cannot convert non-arrow function to a function expression.");
@@ -130,25 +111,24 @@ function arrowFunctionToExpression({
130
111
  });
131
112
  }
132
113
  fn.get("body").unshiftContainer("body", expressionStatement(callExpression(this.hub.addHelper("newArrowCheck"), [thisExpression(), checkBinding ? identifier(checkBinding.name) : identifier(thisBinding)])));
133
- fn.replaceWith(callExpression(memberExpression((0, _helperFunctionName.default)(this, true) || fn.node, identifier("bind")), [checkBinding ? identifier(checkBinding.name) : thisExpression()]));
114
+ fn.replaceWith(callExpression(memberExpression(nameFunction(this, true) || fn.node, identifier("bind")), [checkBinding ? identifier(checkBinding.name) : thisExpression()]));
134
115
  return fn.get("callee.object");
135
116
  }
136
117
  return fn;
137
118
  }
138
- const getSuperCallsVisitor = (0, _visitors.merge)([{
119
+ const getSuperCallsVisitor = mergeVisitors([{
139
120
  CallExpression(child, {
140
121
  allSuperCalls
141
122
  }) {
142
123
  if (!child.get("callee").isSuper()) return;
143
124
  allSuperCalls.push(child);
144
125
  }
145
- }, _helperEnvironmentVisitor.default]);
126
+ }, environmentVisitor]);
146
127
  function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow = true, allowInsertArrowWithRest = true) {
147
128
  let arrowParent;
148
129
  let thisEnvFn = fnPath.findParent(p => {
149
130
  if (p.isArrowFunctionExpression()) {
150
- var _arrowParent;
151
- (_arrowParent = arrowParent) != null ? _arrowParent : arrowParent = p;
131
+ arrowParent ??= p;
152
132
  return false;
153
133
  }
154
134
  return p.isFunction() || p.isProgram() || p.isClassProperty({
@@ -329,7 +309,7 @@ function standardizeSuperProperty(superProp) {
329
309
  function hasSuperClass(thisEnvFn) {
330
310
  return thisEnvFn.isClassMethod() && !!thisEnvFn.parentPath.parentPath.node.superClass;
331
311
  }
332
- const assignSuperThisVisitor = (0, _visitors.merge)([{
312
+ const assignSuperThisVisitor = mergeVisitors([{
333
313
  CallExpression(child, {
334
314
  supers,
335
315
  thisBinding
@@ -339,7 +319,7 @@ const assignSuperThisVisitor = (0, _visitors.merge)([{
339
319
  supers.add(child.node);
340
320
  child.replaceWithMultiple([child.node, assignmentExpression("=", identifier(thisBinding), identifier("this"))]);
341
321
  }
342
- }, _helperEnvironmentVisitor.default]);
322
+ }, environmentVisitor]);
343
323
  function getThisBinding(thisEnvFn, inConstructor) {
344
324
  return getBinding(thisEnvFn, "this", thisBinding => {
345
325
  if (!inConstructor || !hasSuperClass(thisEnvFn)) return thisExpression();
@@ -389,7 +369,7 @@ function getBinding(thisEnvFn, key, init) {
389
369
  }
390
370
  return data;
391
371
  }
392
- const getScopeInformationVisitor = (0, _visitors.merge)([{
372
+ const getScopeInformationVisitor = mergeVisitors([{
393
373
  ThisExpression(child, {
394
374
  thisPaths
395
375
  }) {
@@ -447,7 +427,7 @@ const getScopeInformationVisitor = (0, _visitors.merge)([{
447
427
  })) return;
448
428
  newTargetPaths.push(child);
449
429
  }
450
- }, _helperEnvironmentVisitor.default]);
430
+ }, environmentVisitor]);
451
431
  function getScopeInformation(fnPath) {
452
432
  const thisPaths = [];
453
433
  const argumentsPaths = [];