Example #1
0
/**
 * Create the module export expression.
 *
 * @param   {AstNode} exportedExpression - expression to export.
 * @returns {AstNode} module exports node.
 */
function createExportStatement(exportedExpression) {
	const exportsExpression = builders.memberExpression(
		builders.identifier('module'), builders.identifier('exports'), false
	);
	const assignmentExpression = builders.assignmentExpression('=', exportsExpression, exportedExpression);

	return builders.expressionStatement(assignmentExpression);
}
Example #2
0
export function createRequireDeclaration(moduleIdentifier, importedModule) {
	const requireCall = builders.callExpression(
		builders.identifier('require'),	[builders.literal(importedModule)]
	);

	if (moduleIdentifier) {
		return builders.variableDeclaration(
			'var', [builders.variableDeclarator(moduleIdentifier, requireCall)]
		);
	}

	return requireCall;
}
Example #3
0
	fullyQualifiedNameData.forEach(({moduleVariableId, nodePathsToTransform}, namespace) => {
		const moduleIdentifier = builders.identifier(moduleVariableId);
		const importDeclaration = createRequireDeclaration(moduleIdentifier, namespace);

		programStatements.unshift(importDeclaration);
		nodePathsToTransform.forEach((nodePathToTransform) => nodePathToTransform.replace(moduleIdentifier));
	});
Example #4
0
 handleErrorBlur(target, editor) {
     const val = editor.getValue();
     try {
         const body =
             parse(val).program.body[0] || types.builders.emptyStatement();
         this.props.onChange(body);
     } catch (e) {
         // do nothing
     }
 }
Example #5
0
 /**
  * Component
  * @param {{code:Object[], onChange:(AST:Object[])=>void}} props  Component's props
  */
 function SingleStatement(props) {
     const { code, onChange } = props;
     const stmt = code[0] || types.builders.emptyStatement();
     return (
         <Comp
             {...props}
             node={stmt}
             onChange={v => onChange([types.builders.expressionStatement(v)])}
         />
     );
 }
Example #6
0
/**
 * Retrieve the expression to export, if the module ends in a return statement export that node.
 *
 * @param   {NodePath} lastStatement - Last statement in the module.
 * @param   {string} className - The class name to export.
 * @returns {AstNode} node to export.
 */
function retrieveExportExpression(lastStatement, className) {
	if (namedTypes.ReturnStatement.check(lastStatement.node)) {
		const returnArgument = lastStatement.node.argument;

		lastStatement.replace();

		return returnArgument;
	}

	return builders.identifier(className);
}
Example #7
0
function filterNonPathConfig(loaderConfig) {
    var props = [];

    astt.visit(loaderConfig, {
        visitProperty: function (property) {
            if (isNonPathProperty(property)) {
                props.push(property.value);
            }

            return false; // only visit top-level properties
        }
    });

    if (props.length > 1) {
        props.sort(alphaPropertyKeys);
    }

    return astt.builders.objectExpression(props);
}
 * SpiderMonkey AST node.
 * https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API
 *
 * @typedef {Object} AstNode
 * @property {string} type - A string representing the AST variant type.
 */

/**
 * AstTypes NodePath.
 *
 * @typedef {Object} NodePath
 * @property {AstNode} node - SpiderMonkey AST node.
 */

/**
 */
export const wrapModuleInIIFEVisitor = {
	/**
	 * @param {NodePath} programNodePath - Program NodePath.
	 */
	visitProgram(programNodePath) {
		const moduleBlockStatement = builders.blockStatement(programNodePath.node.body);
		const iife = builders.functionExpression(null, [], moduleBlockStatement);
		const iifeExpressionStatement = builders.expressionStatement(builders.callExpression(iife, []));

		programNodePath.get('body').replace([iifeExpressionStatement]);

		return false;
	}
};
Example #9
0
 onChange={v => onChange([types.builders.expressionStatement(v)])}