@babel/plugin-transform-nullish-coalescing-operator
Advanced tools
+1
-1
@@ -7,3 +7,3 @@ import { declare } from '@babel/helper-plugin-utils'; | ||
| }) => { | ||
| api.assertVersion("^7.0.0-0 || ^8.0.0 || 8.0.0-rc.2"); | ||
| api.assertVersion("^7.0.0-0 || ^8.0.0 || 8.0.0-rc.3"); | ||
| const noDocumentAll = api.assumption("noDocumentAll") ?? loose; | ||
@@ -10,0 +10,0 @@ const pureGetters = api.assumption("pureGetters") ?? false; |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport { types as t, template } from \"@babel/core\";\n\nexport interface Options {\n loose?: boolean;\n}\n\nexport default declare((api, { loose = false }: Options) => {\n api.assertVersion(REQUIRED_VERSION(\"^7.0.0-0 || ^8.0.0\"));\n const noDocumentAll = api.assumption(\"noDocumentAll\") ?? loose;\n const pureGetters = api.assumption(\"pureGetters\") ?? false;\n\n return {\n name: \"transform-nullish-coalescing-operator\",\n manipulateOptions: undefined,\n visitor: {\n LogicalExpression(path) {\n const { node, scope } = path;\n if (node.operator !== \"??\") {\n return;\n }\n\n let ref;\n let assignment;\n // skip creating extra reference when `left` is pure\n if (\n (pureGetters &&\n scope.path.isPattern() &&\n t.isMemberExpression(node.left) &&\n !node.left.computed &&\n t.isIdentifier(node.left.object) &&\n t.isIdentifier(node.left.property)) ||\n (t.isIdentifier(node.left) &&\n (pureGetters ||\n // globalThis\n scope.hasBinding(node.left.name)))\n ) {\n ref = node.left;\n assignment = t.cloneNode(node.left);\n } else if (scope.path.isPattern()) {\n // Replace `function (a, x = a.b ?? c) {}` to `function (a, x = (() => a.b ?? c)() ){}`\n // so the temporary variable can be injected in correct scope\n path.replaceWith(template.statement.ast`(() => ${path.node})()`);\n // The injected nullish expression will be queued and eventually transformed when visited\n return;\n } else {\n ref = scope.generateUidIdentifierBasedOnNode(node.left);\n scope.push({ id: t.cloneNode(ref) });\n assignment = t.assignmentExpression(\"=\", ref, node.left);\n }\n\n path.replaceWith(\n t.conditionalExpression(\n // We cannot use `!= null` in spec mode because\n // `document.all == null` and `document.all` is not \"nullish\".\n noDocumentAll\n ? t.binaryExpression(\"!=\", assignment, t.nullLiteral())\n : t.logicalExpression(\n \"&&\",\n t.binaryExpression(\"!==\", assignment, t.nullLiteral()),\n t.binaryExpression(\n \"!==\",\n t.cloneNode(ref),\n scope.buildUndefinedNode(),\n ),\n ),\n t.cloneNode(ref),\n node.right,\n ),\n );\n },\n },\n };\n});\n"],"names":["declare","api","loose","assertVersion","noDocumentAll","assumption","pureGetters","name","manipulateOptions","undefined","visitor","LogicalExpression","path","node","scope","operator","ref","assignment","isPattern","t","isMemberExpression","left","computed","isIdentifier","object","property","hasBinding","cloneNode","replaceWith","template","statement","ast","generateUidIdentifierBasedOnNode","push","id","assignmentExpression","conditionalExpression","binaryExpression","nullLiteral","logicalExpression","buildUndefinedNode","right"],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport { types as t, template } from \"@babel/core\";\n\nexport interface Options {\n loose?: boolean;\n}\n\nexport default declare((api, { loose = false }: Options) => {\n api.assertVersion(REQUIRED_VERSION(\"^7.0.0-0 || ^8.0.0\"));\n const noDocumentAll = api.assumption(\"noDocumentAll\") ?? loose;\n const pureGetters = api.assumption(\"pureGetters\") ?? false;\n\n return {\n name: \"transform-nullish-coalescing-operator\",\n manipulateOptions: undefined,\n visitor: {\n LogicalExpression(path) {\n const { node, scope } = path;\n if (node.operator !== \"??\") {\n return;\n }\n\n let ref;\n let assignment;\n // skip creating extra reference when `left` is pure\n if (\n (pureGetters &&\n scope.path.isPattern() &&\n t.isMemberExpression(node.left) &&\n !node.left.computed &&\n t.isIdentifier(node.left.object) &&\n t.isIdentifier(node.left.property)) ||\n (t.isIdentifier(node.left) &&\n (pureGetters ||\n // globalThis\n scope.hasBinding(node.left.name)))\n ) {\n ref = node.left;\n assignment = t.cloneNode(node.left);\n } else if (scope.path.isPattern()) {\n // Replace `function (a, x = a.b ?? c) {}` to `function (a, x = (() => a.b ?? c)() ){}`\n // so the temporary variable can be injected in correct scope\n path.replaceWith(template.statement.ast`(() => ${path.node})()`);\n // The injected nullish expression will be queued and eventually transformed when visited\n return;\n } else {\n ref = scope.generateUidIdentifierBasedOnNode(node.left);\n scope.push({ id: t.cloneNode(ref) });\n assignment = t.assignmentExpression(\"=\", ref, node.left);\n }\n\n path.replaceWith(\n t.conditionalExpression(\n // We cannot use `!= null` in spec mode because\n // `document.all == null` and `document.all` is not \"nullish\".\n noDocumentAll\n ? t.binaryExpression(\"!=\", assignment, t.nullLiteral())\n : t.logicalExpression(\n \"&&\",\n t.binaryExpression(\"!==\", assignment, t.nullLiteral()),\n t.binaryExpression(\n \"!==\",\n t.cloneNode(ref),\n scope.buildUndefinedNode(),\n ),\n ),\n t.cloneNode(ref),\n node.right,\n ),\n );\n },\n },\n };\n});\n"],"names":["declare","api","loose","assertVersion","noDocumentAll","assumption","pureGetters","name","manipulateOptions","undefined","visitor","LogicalExpression","path","node","scope","operator","ref","assignment","isPattern","t","isMemberExpression","left","computed","isIdentifier","object","property","hasBinding","cloneNode","replaceWith","template","statement","ast","generateUidIdentifierBasedOnNode","push","id","assignmentExpression","conditionalExpression","binaryExpression","nullLiteral","logicalExpression","buildUndefinedNode","right"],"mappings":";;;AAOA,YAAeA,OAAO,CAAC,CAACC,GAAG,EAAE;AAAEC,EAAAA,KAAK,GAAG;AAAe,CAAC,KAAK;EAC1DD,GAAG,CAACE,aAAa,CAAA,kCAAuC,CAAC;EACzD,MAAMC,aAAa,GAAGH,GAAG,CAACI,UAAU,CAAC,eAAe,CAAC,IAAIH,KAAK;EAC9D,MAAMI,WAAW,GAAGL,GAAG,CAACI,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK;EAE1D,OAAO;AACLE,IAAAA,IAAI,EAAE,uCAAuC;AAC7CC,IAAAA,iBAAiB,EAAEC,SAAS;AAC5BC,IAAAA,OAAO,EAAE;MACPC,iBAAiBA,CAACC,IAAI,EAAE;QACtB,MAAM;UAAEC,IAAI;AAAEC,UAAAA;AAAM,SAAC,GAAGF,IAAI;AAC5B,QAAA,IAAIC,IAAI,CAACE,QAAQ,KAAK,IAAI,EAAE;AAC1B,UAAA;AACF,QAAA;AAEA,QAAA,IAAIC,GAAG;AACP,QAAA,IAAIC,UAAU;AAEd,QAAA,IACGX,WAAW,IACVQ,KAAK,CAACF,IAAI,CAACM,SAAS,EAAE,IACtBC,KAAC,CAACC,kBAAkB,CAACP,IAAI,CAACQ,IAAI,CAAC,IAC/B,CAACR,IAAI,CAACQ,IAAI,CAACC,QAAQ,IACnBH,KAAC,CAACI,YAAY,CAACV,IAAI,CAACQ,IAAI,CAACG,MAAM,CAAC,IAChCL,KAAC,CAACI,YAAY,CAACV,IAAI,CAACQ,IAAI,CAACI,QAAQ,CAAC,IACnCN,KAAC,CAACI,YAAY,CAACV,IAAI,CAACQ,IAAI,CAAC,KACvBf,WAAW,IAEVQ,KAAK,CAACY,UAAU,CAACb,IAAI,CAACQ,IAAI,CAACd,IAAI,CAAC,CAAE,EACtC;UACAS,GAAG,GAAGH,IAAI,CAACQ,IAAI;UACfJ,UAAU,GAAGE,KAAC,CAACQ,SAAS,CAACd,IAAI,CAACQ,IAAI,CAAC;QACrC,CAAC,MAAM,IAAIP,KAAK,CAACF,IAAI,CAACM,SAAS,EAAE,EAAE;AAGjCN,UAAAA,IAAI,CAACgB,WAAW,CAACC,QAAQ,CAACC,SAAS,CAACC,GAAG,CAAA,OAAA,EAAUnB,IAAI,CAACC,IAAI,KAAK,CAAC;AAEhE,UAAA;AACF,QAAA,CAAC,MAAM;UACLG,GAAG,GAAGF,KAAK,CAACkB,gCAAgC,CAACnB,IAAI,CAACQ,IAAI,CAAC;UACvDP,KAAK,CAACmB,IAAI,CAAC;AAAEC,YAAAA,EAAE,EAAEf,KAAC,CAACQ,SAAS,CAACX,GAAG;AAAE,WAAC,CAAC;AACpCC,UAAAA,UAAU,GAAGE,KAAC,CAACgB,oBAAoB,CAAC,GAAG,EAAEnB,GAAG,EAAEH,IAAI,CAACQ,IAAI,CAAC;AAC1D,QAAA;AAEAT,QAAAA,IAAI,CAACgB,WAAW,CACdT,KAAC,CAACiB,qBAAqB,CAGrBhC,aAAa,GACTe,KAAC,CAACkB,gBAAgB,CAAC,IAAI,EAAEpB,UAAU,EAAEE,KAAC,CAACmB,WAAW,EAAE,CAAC,GACrDnB,KAAC,CAACoB,iBAAiB,CACjB,IAAI,EACJpB,KAAC,CAACkB,gBAAgB,CAAC,KAAK,EAAEpB,UAAU,EAAEE,KAAC,CAACmB,WAAW,EAAE,CAAC,EACtDnB,KAAC,CAACkB,gBAAgB,CAChB,KAAK,EACLlB,KAAC,CAACQ,SAAS,CAACX,GAAG,CAAC,EAChBF,KAAK,CAAC0B,kBAAkB,EAC1B,CACF,CAAC,EACLrB,KAAC,CAACQ,SAAS,CAACX,GAAG,CAAC,EAChBH,IAAI,CAAC4B,KACP,CACF,CAAC;AACH,MAAA;AACF;GACD;AACH,CAAC,CAAC;;;;"} |
+5
-5
| { | ||
| "name": "@babel/plugin-transform-nullish-coalescing-operator", | ||
| "version": "8.0.0-rc.2", | ||
| "version": "8.0.0-rc.3", | ||
| "description": "Remove nullish coalescing operator", | ||
@@ -20,10 +20,10 @@ "repository": { | ||
| "dependencies": { | ||
| "@babel/helper-plugin-utils": "^8.0.0-rc.2" | ||
| "@babel/helper-plugin-utils": "^8.0.0-rc.3" | ||
| }, | ||
| "peerDependencies": { | ||
| "@babel/core": "^8.0.0-rc.2" | ||
| "@babel/core": "^8.0.0-rc.3" | ||
| }, | ||
| "devDependencies": { | ||
| "@babel/core": "^8.0.0-rc.2", | ||
| "@babel/helper-plugin-test-runner": "^8.0.0-rc.2" | ||
| "@babel/core": "^8.0.0-rc.3", | ||
| "@babel/helper-plugin-test-runner": "^8.0.0-rc.3" | ||
| }, | ||
@@ -30,0 +30,0 @@ "engines": { |
10094
-0.91%