diff --git a/lib/rules/entry-points.js b/lib/rules/entry-points.js index 280a0dc..76461f6 100644 --- a/lib/rules/entry-points.js +++ b/lib/rules/entry-points.js @@ -61,6 +61,18 @@ module.exports = { } } + if (returnArgument && returnArgument.type === 'Identifier') { + const returnAssignments = callbackBody.filter(n => + n.type === 'ExpressionStatement' && + n.expression.left.type === 'MemberExpression' && + n.expression.left.object.name === returnArgument.name && + scriptTypeMap[scriptType].entryPoints.includes(n.expression.left.property.name) + ); + if (returnAssignments.length > 0) { + hasValidEntryPoint = true; + } + } + if (!hasValidEntryPoint) { context.report({ node: returnStatement || callback, diff --git a/tests/rules/entry-points.js b/tests/rules/entry-points.js index 9fdc845..3101ace 100644 --- a/tests/rules/entry-points.js +++ b/tests/rules/entry-points.js @@ -81,6 +81,18 @@ ruleTester.run('entry-points', rule, { ' return { somethingElse: x };', '});' ].join('\n') + }, + { + code: [ + '/**', + ' * @NScriptType ClientScript', + ' */', + 'define([], function() {', + ' var exports = {};', + ' exports.pageInit = x;', + ' return exports;', + '});' + ].join('\n') } ], @@ -137,6 +149,33 @@ ruleTester.run('entry-points', rule, { '});' ].join('\n'), errors: [{ messageId: 'returnEntryPoint', data: { type: 'Restlet' }}] + }, + { + code: [ + '/**', + ' * @NScriptType ClientScript', + ' */', + 'define([], function() {', + ' var exports = {};', + ' exports.notAnEntryPoint = x;', + ' return exports;', + '});' + ].join('\n'), + errors: [{ messageId: 'returnEntryPoint', data: { type: 'ClientScript' }}] + }, + { + code: [ + '/**', + ' * @NScriptType ClientScript', + ' */', + 'define([], function() {', + ' var exports = {};', + ' var notTheReturnObject = {};', + ' notTheReturnObject.pageInit = x;', + ' return exports;', + '});' + ].join('\n'), + errors: [{ messageId: 'returnEntryPoint', data: { type: 'ClientScript' }}] } ] }); \ No newline at end of file