| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | 
							- 'use strict';
 
- const {methodCallSelector} = require('./selectors/index.js');
 
- const {appendArgument} = require('./fix/index.js');
 
- const ERROR = 'error';
 
- const SUGGESTION = 'suggestion';
 
- const messages = {
 
- 	[ERROR]: 'Missing the `targetOrigin` argument.',
 
- 	[SUGGESTION]: 'Use `{{code}}`.',
 
- };
 
- /** @param {import('eslint').Rule.RuleContext} context */
 
- function create(context) {
 
- 	const sourceCode = context.getSourceCode();
 
- 	return {
 
- 		[methodCallSelector({method: 'postMessage', argumentsLength: 1})](node) {
 
- 			const [penultimateToken, lastToken] = sourceCode.getLastTokens(node, 2);
 
- 			const replacements = [];
 
- 			const target = node.callee.object;
 
- 			if (target.type === 'Identifier') {
 
- 				const {name} = target;
 
- 				replacements.push(`${name}.location.origin`);
 
- 				if (name !== 'self' && name !== 'window' && name !== 'globalThis') {
 
- 					replacements.push('self.location.origin');
 
- 				}
 
- 			} else {
 
- 				replacements.push('self.location.origin');
 
- 			}
 
- 			replacements.push('\'*\'');
 
- 			return {
 
- 				loc: {
 
- 					start: penultimateToken.loc.end,
 
- 					end: lastToken.loc.end,
 
- 				},
 
- 				messageId: ERROR,
 
- 				suggest: replacements.map(code => ({
 
- 					messageId: SUGGESTION,
 
- 					data: {code},
 
- 					/** @param {import('eslint').Rule.RuleFixer} fixer */
 
- 					fix: fixer => appendArgument(fixer, node, code, sourceCode),
 
- 				})),
 
- 			};
 
- 		},
 
- 	};
 
- }
 
- /** @type {import('eslint').Rule.RuleModule} */
 
- module.exports = {
 
- 	create,
 
- 	meta: {
 
- 		type: 'problem',
 
- 		docs: {
 
- 			description: 'Enforce using the `targetOrigin` argument with `window.postMessage()`.',
 
- 		},
 
- 		hasSuggestions: true,
 
- 		messages,
 
- 	},
 
- };
 
 
  |