Skip to content

Commit ef9981c

Browse files
committed
feat: add "buble" prop to LiveProvider component
1 parent c4eee2c commit ef9981c

File tree

5 files changed

+32
-26
lines changed

5 files changed

+32
-26
lines changed

src/components/Live/LiveProvider.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,47 +20,51 @@ export default class LiveProvider extends Component {
2020
noInline: PropTypes.bool,
2121
scope: PropTypes.object,
2222
theme: PropTypes.object,
23+
buble: PropTypes.object,
2324
transformCode: PropTypes.node
2425
};
2526

2627
// eslint-disable-next-line camelcase
2728
UNSAFE_componentWillMount() {
28-
const { code, scope, transformCode, noInline } = this.props;
29+
const { code, scope, buble, transformCode, noInline } = this.props;
2930

30-
this.transpile({ code, scope, transformCode, noInline });
31+
this.transpile({ code, scope, buble, transformCode, noInline });
3132
}
3233

3334
componentDidUpdate({
3435
code: prevCode,
3536
scope: prevScope,
37+
buble: prevBuble,
3638
noInline: prevNoInline,
3739
transformCode: prevTransformCode
3840
}) {
39-
const { code, scope, noInline, transformCode } = this.props;
41+
const { code, scope, buble, noInline, transformCode } = this.props;
4042
if (
4143
code !== prevCode ||
4244
scope !== prevScope ||
45+
buble !== prevBuble ||
4346
noInline !== prevNoInline ||
4447
transformCode !== prevTransformCode
4548
) {
46-
this.transpile({ code, scope, transformCode, noInline });
49+
this.transpile({ code, scope, buble, transformCode, noInline });
4750
}
4851
}
4952

5053
onChange = code => {
51-
const { scope, transformCode, noInline } = this.props;
52-
this.transpile({ code, scope, transformCode, noInline });
54+
const { scope, buble, transformCode, noInline } = this.props;
55+
this.transpile({ code, scope, buble, transformCode, noInline });
5356
};
5457

5558
onError = error => {
5659
this.setState({ error: error.toString() });
5760
};
5861

59-
transpile = ({ code, scope, transformCode, noInline = false }) => {
62+
transpile = ({ code, scope, buble, transformCode, noInline = false }) => {
6063
// Transpilation arguments
6164
const input = {
6265
code: transformCode ? transformCode(code) : code,
63-
scope
66+
scope,
67+
buble
6468
};
6569

6670
const errorCallback = err =>

src/utils/transpile/evalCode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import { _poly } from './transform';
2+
import { _poly } from './polyfills';
33

44
const evalCode = (code, scope) => {
55
const scopeKeys = Object.keys(scope);

src/utils/transpile/index.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1-
import transform from './transform';
1+
import { transform } from 'buble';
22
import errorBoundary from './errorBoundary';
33
import evalCode from './evalCode';
44

5-
export const generateElement = ({ code = '', scope = {} }, errorCallback) => {
5+
export const generateElement = (
6+
{ code = '', scope = {}, buble = {} },
7+
errorCallback
8+
) => {
69
// NOTE: Remove trailing semicolon to get an actual expression.
710
const codeTrimmed = code.trim().replace(/;$/, '');
811

12+
const bubleOptions = {
13+
objectAssign: '_poly.assign',
14+
...buble,
15+
transforms: {
16+
dangerousForOf: true,
17+
dangerousTaggedTemplateString: true,
18+
...buble.transforms
19+
}
20+
};
21+
922
// NOTE: Workaround for classes and arrow functions.
10-
const transformed = transform(`return (${codeTrimmed})`).trim();
23+
const transformed = transform(`return (${codeTrimmed})`, bubleOptions).trim();
1124
return errorBoundary(evalCode(transformed, scope), errorCallback);
1225
};
1326

src/utils/transpile/polyfills.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import assign from 'core-js/fn/object/assign';
2+
3+
export const _poly = { assign };

src/utils/transpile/transform.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)