···
import { terser } from 'rollup-plugin-terser';
import compiler from '@ampproject/rollup-plugin-closure-compiler';
const cwd = process.cwd();
const pkgInfo = require('./package.json');
const name = basename(pkgInfo.main, '.js');
···
-
const unwrapStatePlugin = ({ types: t }) => ({
-
this.props = new Map();
-
/state$/i.test(node.id.name) ||
-
(node.init.properties.length === 1 && node.init.properties[0].key.name === 'contents');
-
VariableDeclarator(path) {
-
t.isIdentifier(path.node.id) &&
-
t.isObjectExpression(path.node.init) &&
-
path.node.init.properties.every(
-
(prop) => t.isObjectProperty(prop) && t.isIdentifier(prop.key)
-
const id = path.node.id.name;
-
const properties = path.node.init.properties;
-
const propNames = new Set(properties.map((x) => x.key.name));
-
const decl = properties.map((prop) => {
-
const key = `${id}$${prop.key.name}`;
-
return t.variableDeclarator(t.identifier(key), prop.value);
-
this.props.set(id, propNames);
-
path.parentPath.replaceWithMultiple(t.variableDeclaration('let', decl));
-
MemberExpression(path) {
-
t.isIdentifier(path.node.object) &&
-
this.props.has(path.node.object.name) &&
-
t.isIdentifier(path.node.property) &&
-
this.props.get(path.node.object.name).has(path.node.property.name)
-
const id = path.node.object.name;
-
const propName = path.node.property.name;
-
path.replaceWith(t.identifier(`${id}$${propName}`));
-
const curryGuaranteePlugin = ({ types: t }) => {
-
const curryFnName = /^_(\d)$/;
-
const lengthId = t.identifier('length');
-
const bindId = t.identifier('bind');
-
!t.isMemberExpression(path.node.callee) ||
-
!t.isIdentifier(path.node.callee.object) ||
-
!t.isIdentifier(path.node.callee.property) ||
-
!path.node.callee.object.name === 'Curry' ||
-
!curryFnName.test(path.node.callee.property.name)
-
const callFn = path.node.arguments[0];
-
const callArgs = path.node.arguments.slice(1);
-
if (t.isExpressionStatement(path.parent)) {
-
path.replaceWith(t.callExpression(callFn, callArgs));
-
const arityLiteral = t.numericLiteral(callArgs.length);
-
const argIds = callArgs.map((init) => {
-
if (t.isIdentifier(init)) return init;
-
const id = path.scope.generateUidIdentifierBasedOnNode(path.node.id);
-
path.scope.push({ id, init });
-
t.conditionalExpression(
-
t.binaryExpression('===', t.memberExpression(callFn, lengthId), arityLiteral),
-
t.callExpression(callFn, argIds),
-
t.callExpression(t.memberExpression(callFn, bindId), [t.nullLiteral()].concat(argIds))
const makePlugins = (isProduction) =>
···
extensions: ['ts', 'tsx', 'js'],
exclude: 'node_modules/**',
-
plugins: ['babel-plugin-closure-elimination', unwrapStatePlugin, curryGuaranteePlugin],
formatting: 'PRETTY_PRINT',
compilation_level: 'SIMPLE_OPTIMIZATIONS',