/*! * Copyright 2019 acrazing . All rights reserved. * @since 2019-11-02 00:10:00 */ import * as ts from 'typescript'; import { State } from '../State'; export function createResolve( state: State, target: ts.CallExpression, loader: ts.FunctionExpression | ts.ArrowFunction, ): ts.ObjectLiteralElementLike { const requestNode = target.arguments[0]; return ts.factory.createMethodDeclaration( undefined, undefined, 'resolve', undefined, undefined, loader.parameters, undefined, ts.factory.createBlock([ ts.factory.createIfStatement( ts.factory.createPropertyAccessExpression( ts.factory.createIdentifier('require'), 'resolveWeak', ), ts.factory.createReturnStatement( ts.factory.createCallExpression( ts.factory.createPropertyAccessExpression( ts.factory.createIdentifier('require'), 'resolveWeak', ), undefined, [requestNode], ), ), ts.factory.createReturnStatement( ts.factory.createCallExpression( ts.factory.createCallExpression( ts.factory.createIdentifier('eval'), undefined, [ts.factory.createStringLiteral('require.resolve')], ), undefined, [requestNode], ), ), ), ]), ); }