Skip to content

Commit

Permalink
babel 7 (#231)
Browse files Browse the repository at this point in the history
  • Loading branch information
hzoo authored and fkling committed May 29, 2017
1 parent 95c53e5 commit e8071b4
Show file tree
Hide file tree
Showing 11 changed files with 290 additions and 2 deletions.
2 changes: 2 additions & 0 deletions website/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@
"babel-runtime": "^6.23.0",
"babel5": "file:packages/babel5",
"babel6": "file:packages/babel6",
"babel7": "file:packages/babel7",
"babylon5": "file:packages/babylon5",
"babylon6": "file:packages/babylon6",
"babylon7": "file:packages/babylon7",
"classnames": "^2.1.3",
"codemirror": "^5.22.0",
"codemirror-graphql": "^0.6.2",
Expand Down
1 change: 1 addition & 0 deletions website/packages/babel7/babel7-package.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = require('babel-core/package.json');
1 change: 1 addition & 0 deletions website/packages/babel7/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = require('babel-core');
9 changes: 9 additions & 0 deletions website/packages/babel7/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "babel7",
"version": "1.0.0",
"description": "Wrapper for Babel v7",
"main": "index.js",
"dependencies": {
"babel-core": "^7.0.0-alpha.10"
}
}
1 change: 1 addition & 0 deletions website/packages/babylon7/babylon-package.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = require('babylon/package.json');
1 change: 1 addition & 0 deletions website/packages/babylon7/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = require('babylon');
9 changes: 9 additions & 0 deletions website/packages/babylon7/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "babylon7",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"babylon": "^7.0.0-beta.10"
}
}
101 changes: 101 additions & 0 deletions website/src/parsers/js/babylon7.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import React from 'react';
import defaultParserInterface from './utils/defaultESTreeParserInterface';
import pkg from 'babylon7/babylon-package';
import SettingsRenderer from '../utils/SettingsRenderer';

const availablePlugins = [
'asyncGenerators',
'classProperties',
'classPrivateProperties',
'decorators',
'doExpressions',
'estree',
'exportExtensions',
'flow',
'functionSent',
'functionBind',
'jsx',
'objectRestSpread',
'dynamicImport',
];

const ID = 'babylon7';
export const defaultOptions = {
sourceType: 'module',
allowImportExportEverywhere: false,
allowReturnOutsideFunction: false,
plugins: [
'asyncGenerators',
'classProperties',
'decorators',
'doExpressions',
'exportExtensions',
'flow',
'functionSent',
'functionBind',
'jsx',
'objectRestSpread',
'dynamicImport',
],
};

export const parserSettingsConfiguration = {
fields: [
['sourceType', ['module', 'script']],
'allowReturnOutsideFunction',
'allowImportExportEverywhere',
{
key: 'plugins',
title: 'Plugins',
fields: availablePlugins,
settings: settings => settings.plugins || defaultOptions.plugins,
values: plugins => availablePlugins.reduce(
(obj, name) => ((obj[name] = plugins.indexOf(name) > -1), obj),
{}
),
},
],
};

export default {
...defaultParserInterface,

id: ID,
displayName: ID,
version: pkg.version,
homepage: pkg.homepage,
locationProps: new Set(['loc', 'start', 'end']),

loadParser(callback) {
require(['babylon7'], callback);
},

parse(babylon, code, options) {
return babylon.parse(code, {...defaultOptions, ...options});
},

getNodeName(node) {
switch (typeof node.type) {
case 'string':
return node.type;
case 'object':
return `Token (${node.type.label})`;
}
},

nodeToRange(node) {
if (typeof node.start !== 'undefined') {
return [node.start, node.end];
}
},

renderSettings(parserSettings, onChange) {
return (
<SettingsRenderer
settingsConfiguration={parserSettingsConfiguration}
parserSettings={{...defaultOptions, ...parserSettings}}
onChange={onChange}
/>
);
},
};
12 changes: 12 additions & 0 deletions website/src/parsers/js/transformers/babel7/codeExample.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export default function (babel) {
const { types: t } = babel;

return {
name: "ast-transform", // not required
visitor: {
Identifier(path) {
path.node.name = path.node.name.split('').reverse().join('');
}
}
};
}
51 changes: 51 additions & 0 deletions website/src/parsers/js/transformers/babel7/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import compileModule from '../../../utils/compileModule';
import pkg from 'babel7/babel7-package';

const ID = 'babelv7';

export default {
id: ID,
displayName: ID,
version: pkg.version,
homepage: pkg.homepage,

defaultParserID: 'babylon7',

loadTransformer(callback) {
require([
'babel7',
'recast',
], (babel, recast) => callback({ babel, recast }));
},

transform({ babel, recast }, transformCode, code) {
let transform = compileModule( // eslint-disable-line no-shadow
transformCode
);

return babel.transform(code, {
parserOpts: {
parser: recast.parse,
plugins: [
'asyncGenerators',
'classPrivateProperties',
'classProperties',
'decorators',
'doExpressions',
'exportExtensions',
'flow',
'functionSent',
'functionBind',
'jsx',
'objectRestSpread',
'dynamicImport',
],
},
generatorOpts: {
generator: recast.print,
},
plugins: [(transform.default || transform)(babel)],
sourceMaps: true,
});
},
};
Loading

0 comments on commit e8071b4

Please sign in to comment.