85 lines
4.0 KiB
JavaScript
85 lines
4.0 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "default", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _default;
|
|
}
|
|
});
|
|
var _definerule = require("../utils/define-rule");
|
|
var _nodeattributes = /*#__PURE__*/ _interop_require_default(require("../utils/node-attributes"));
|
|
function _interop_require_default(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
var GOOGLE_ANALYTICS_URL = 'www.google-analytics.com/analytics.js';
|
|
var GOOGLE_TAG_MANAGER_URL = 'www.googletagmanager.com/gtag/js';
|
|
var GOOGLE_ANALYTICS_SRC = GOOGLE_ANALYTICS_URL;
|
|
var GOOGLE_TAG_MANAGER_SRC = 'www.googletagmanager.com/gtm.js';
|
|
var description = 'Prefer `@next/third-parties/google` when using the inline script for Google Analytics and Tag Manager.';
|
|
var url = 'https://nextjs.org/docs/messages/next-script-for-ga';
|
|
var ERROR_MSG_GOOGLE_ANALYTICS = "Prefer `GoogleAnalytics` component from `@next/third-parties/google` when using the inline script for Google Analytics. See: ".concat(url);
|
|
var ERROR_MSG_GOOGLE_TAG_MANAGER = "Prefer `GoogleTagManager` component from `@next/third-parties/google` when using the inline script for Google Tag Manager. See: ".concat(url);
|
|
var _default = (0, _definerule.defineRule)({
|
|
meta: {
|
|
docs: {
|
|
description: description,
|
|
recommended: true,
|
|
url: url
|
|
},
|
|
type: 'problem',
|
|
schema: []
|
|
},
|
|
create: function create(context) {
|
|
return {
|
|
JSXOpeningElement: function JSXOpeningElement(node) {
|
|
if (node.name.name !== 'script') {
|
|
return;
|
|
}
|
|
if (node.attributes.length === 0) {
|
|
return;
|
|
}
|
|
var attributes = new _nodeattributes.default(node);
|
|
var src = attributes.value('src');
|
|
// Check if the Alternative async tag is being used to add GA.
|
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs#alternative_async_tag
|
|
// https://developers.google.com/analytics/devguides/collection/gtagjs
|
|
if (typeof src === 'string' && src.includes(GOOGLE_ANALYTICS_URL)) {
|
|
return context.report({
|
|
node: node,
|
|
message: ERROR_MSG_GOOGLE_ANALYTICS
|
|
});
|
|
} else if (typeof src === 'string' && src.includes(GOOGLE_TAG_MANAGER_URL)) {
|
|
return context.report({
|
|
node: node,
|
|
message: ERROR_MSG_GOOGLE_TAG_MANAGER
|
|
});
|
|
}
|
|
var dangerouslySetInnerHTML = attributes.value('dangerouslySetInnerHTML');
|
|
// Check if inline script is being used to add GA.
|
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs#the_google_analytics_tag
|
|
// https://developers.google.com/tag-manager/quickstart
|
|
if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.length > 0) {
|
|
var _quasis__value, _quasis_;
|
|
var quasis = dangerouslySetInnerHTML[0].value.quasis;
|
|
var htmlContent = quasis === null || quasis === void 0 ? void 0 : (_quasis_ = quasis[0]) === null || _quasis_ === void 0 ? void 0 : (_quasis__value = _quasis_.value) === null || _quasis__value === void 0 ? void 0 : _quasis__value.raw;
|
|
if (htmlContent && htmlContent.includes(GOOGLE_ANALYTICS_SRC)) {
|
|
context.report({
|
|
node: node,
|
|
message: ERROR_MSG_GOOGLE_ANALYTICS
|
|
});
|
|
} else if (htmlContent && htmlContent.includes(GOOGLE_TAG_MANAGER_SRC)) {
|
|
context.report({
|
|
node: node,
|
|
message: ERROR_MSG_GOOGLE_TAG_MANAGER
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
});
|