Skip to content

Commit cddbc60

Browse files
authored
Merge pull request #295 from FormidableLabs/jp-sucrase
swap Buble for Sucrase
2 parents 48749bc + 320aae5 commit cddbc60

File tree

11 files changed

+135
-60
lines changed

11 files changed

+135
-60
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ bundle-stats.html
88
.next
99
.out
1010
.history/
11+
stats.html

.storybook/main.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,13 @@ module.exports = {
55
"addons": [
66
"@storybook/addon-controls",
77
// "@storybook/addon-actions"
8-
]
8+
],
9+
"webpackFinal": async (config) => {
10+
config.module.rules.push({
11+
test: /\.mjs$/,
12+
include: /node_modules/,
13+
type: "javascript/auto",
14+
})
15+
return config
16+
}
917
}

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"dom-iterator": "^1.0.0",
2626
"prism-react-renderer": "^1.2.1",
2727
"prop-types": "^15.7.2",
28+
"sucrase": "^3.20.3",
2829
"unescape": "^1.0.1",
2930
"use-editable": "^2.3.3"
3031
},
@@ -61,6 +62,7 @@
6162
"rollup": "^2.55.1",
6263
"rollup-plugin-filesize": "^9.1.1",
6364
"rollup-plugin-terser": "^7.0.2",
65+
"rollup-plugin-visualizer": "^5.5.4",
6466
"styled-components": "^4.0.0-beta.8",
6567
"typescript": "^2.9.2",
6668
"typings-tester": "^0.3.1"

rollup.config.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import commonjs from "@rollup/plugin-commonjs";
44
import { babel } from "@rollup/plugin-babel";
55
import { terser } from "rollup-plugin-terser";
66
import filesize from "rollup-plugin-filesize";
7+
import { visualizer } from "rollup-plugin-visualizer";
78

89
const plugins = [
910
nodeResolve({
@@ -45,19 +46,20 @@ const prodPlugins = plugins.concat([
4546
}),
4647
terser(),
4748
filesize(),
49+
visualizer(),
4850
]);
4951

5052
const base = {
5153
input: "src/index.js",
52-
external: ["react", "react-dom", "prism-react-renderer", "buble"],
54+
external: ["react", "react-dom", "prism-react-renderer", "sucrase"],
5355
};
5456

5557
const output = {
5658
exports: "named",
5759
globals: {
5860
"prism-react-renderer": "Prism",
5961
react: "React",
60-
buble: "Buble",
62+
sucrase: "Sucrase",
6163
"react-dom": "ReactDOM",
6264
},
6365
};

src/components/Live/LiveProvider.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ function LiveProvider({
1212
disabled,
1313
scope,
1414
transformCode,
15-
transpileOptions,
1615
noInline = false,
1716
}) {
1817
const [state, setState] = useState({
@@ -25,7 +24,6 @@ function LiveProvider({
2524
const input = {
2625
code: transformCode ? transformCode(newCode) : newCode,
2726
scope,
28-
transpileOptions,
2927
};
3028

3129
const errorCallback = (error) =>
@@ -47,7 +45,7 @@ function LiveProvider({
4745

4846
useEffect(() => {
4947
transpile(code);
50-
}, [code, scope, noInline, transformCode, transpileOptions]);
48+
}, [code, scope, noInline, transformCode]);
5149

5250
const onChange = (newCode) => transpile(newCode);
5351

@@ -79,7 +77,6 @@ LiveProvider.propTypes = {
7977
scope: PropTypes.object,
8078
theme: PropTypes.object,
8179
transformCode: PropTypes.node,
82-
transpileOptions: PropTypes.object,
8380
};
8481

8582
LiveProvider.defaultProps = {

src/utils/test/transpile.test.js

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,23 +59,6 @@ describe("transpile", () => {
5959

6060
expect(wrapper.text()).toBe("Hello World!");
6161
});
62-
63-
it("adopts code generation based on transpileOptions", () => {
64-
const code = `(() => {
65-
class Foo { async bar() { await Promise.resolve(1); } }
66-
})();`;
67-
68-
expect(() => generateElement({ code })).toThrow();
69-
70-
expect(() =>
71-
generateElement({
72-
code,
73-
transpileOptions: {
74-
transforms: { classes: false, asyncAwait: false },
75-
},
76-
})
77-
).not.toThrow();
78-
});
7962
});
8063

8164
describe("renderElementAsync", () => {

src/utils/transpile/evalCode.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import React from "react";
2-
import { _poly } from "./transform";
2+
import assign from "core-js/features/object/assign";
3+
4+
export const _poly = { assign };
35

46
const evalCode = (code, scope) => {
57
const scopeKeys = Object.keys(scope);

src/utils/transpile/index.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,17 @@ import transform from "./transform";
22
import errorBoundary from "./errorBoundary";
33
import evalCode from "./evalCode";
44

5-
export const generateElement = (
6-
{ code = "", scope = {}, transpileOptions },
7-
errorCallback
8-
) => {
5+
export const generateElement = ({ code = "", scope = {} }, errorCallback) => {
96
// NOTE: Remove trailing semicolon to get an actual expression.
107
const codeTrimmed = code.trim().replace(/;$/, "");
118

129
// NOTE: Workaround for classes and arrow functions.
13-
const transformed = transform(
14-
`return (${codeTrimmed})`,
15-
transpileOptions
16-
).trim();
17-
10+
const transformed = transform(`return (${codeTrimmed})`).trim();
1811
return errorBoundary(evalCode(transformed, scope), errorCallback);
1912
};
2013

2114
export const renderElementAsync = (
22-
{ code = "", scope = {}, transpileOptions },
15+
{ code = "", scope = {} },
2316
resultCallback,
2417
errorCallback
2518
// eslint-disable-next-line consistent-return
@@ -38,5 +31,5 @@ export const renderElementAsync = (
3831
);
3932
}
4033

41-
evalCode(transform(code, transpileOptions), { ...scope, render });
34+
evalCode(transform(code), { ...scope, render });
4235
};

src/utils/transpile/transform.js

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,5 @@
1-
import { transform as _transform } from "buble";
2-
import assign from "core-js/features/object/assign";
1+
import { transform as _transform } from "sucrase";
32

4-
export const _poly = { assign };
3+
const opts = { transforms: ["jsx", "imports"] };
54

6-
export default (code, transpileOptions = {}) => {
7-
const opts = {
8-
...transpileOptions,
9-
objectAssign: "_poly.assign",
10-
transforms: {
11-
dangerousForOf: true,
12-
dangerousTaggedTemplateString: true,
13-
...transpileOptions.transforms,
14-
},
15-
};
16-
17-
return _transform(code, opts).code;
18-
};
5+
export default (code) => _transform(code, opts).code;

typings/react-live.d.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
import { ComponentClass, HTMLProps, ComponentType, Context } from 'react'
22
import { PrismTheme, Language } from 'prism-react-renderer';
3-
import { TransformOptions } from 'buble';
4-
5-
type TranspileOptions = TransformOptions & { transforms: {asyncAwait?: boolean}}
63

74
// Helper types
85
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
@@ -17,7 +14,6 @@ export type LiveProviderProps = Omit<DivProps, 'scope'> & {
1714
code?: string;
1815
noInline?: boolean;
1916
transformCode?: (code: string) => string;
20-
transpileOptions?: TranspileOptions;
2117
language?: Language;
2218
disabled?: boolean;
2319
theme?: PrismTheme;

0 commit comments

Comments
 (0)