/
index.js
30 lines (25 loc) 路 879 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import { declare } from "@babel/helper-plugin-utils";
import syntaxJsonStrings from "@babel/plugin-syntax-json-strings";
export default declare(api => {
api.assertVersion(7);
const regex = /(\\*)([\u2028\u2029])/g;
function replace(match, escapes, separator) {
// If there's an odd number, that means the separator itself was escaped.
// "\X" escapes X.
// "\\X" escapes the backslash, so X is unescaped.
const isEscaped = escapes.length % 2 === 1;
if (isEscaped) return match;
return `${escapes}\\u${separator.charCodeAt(0).toString(16)}`;
}
return {
name: "proposal-json-strings",
inherits: syntaxJsonStrings,
visitor: {
"DirectiveLiteral|StringLiteral"({ node }) {
const { extra } = node;
if (!extra || !extra.raw) return;
extra.raw = extra.raw.replace(regex, replace);
},
},
};
});