Files
novarix.uk/node_modules/@next/eslint-plugin-next/dist/rules/no-unwanted-polyfillio.js
T
Kismet Hasanaj 39a8a128be including-modules
2026-05-03 00:14:08 +02:00

135 lines
4.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, //------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
"default", {
enumerable: true,
get: function() {
return _default;
}
});
var _definerule = require("../utils/define-rule");
// Keep in sync with next.js polyfills file : https://github.com/vercel/next.js/blob/master/packages/next-polyfill-nomodule/src/index.js
var NEXT_POLYFILLED_FEATURES = [
'Array.prototype.@@iterator',
'Array.prototype.at',
'Array.prototype.copyWithin',
'Array.prototype.fill',
'Array.prototype.find',
'Array.prototype.findIndex',
'Array.prototype.flatMap',
'Array.prototype.flat',
'Array.from',
'Array.prototype.includes',
'Array.of',
'Function.prototype.name',
'fetch',
'Map',
'Number.EPSILON',
'Number.Epsilon',
'Number.isFinite',
'Number.isNaN',
'Number.isInteger',
'Number.isSafeInteger',
'Number.MAX_SAFE_INTEGER',
'Number.MIN_SAFE_INTEGER',
'Number.parseFloat',
'Number.parseInt',
'Object.assign',
'Object.entries',
'Object.fromEntries',
'Object.getOwnPropertyDescriptor',
'Object.getOwnPropertyDescriptors',
'Object.hasOwn',
'Object.is',
'Object.keys',
'Object.values',
'Reflect',
'Set',
'Symbol',
'Symbol.asyncIterator',
'String.prototype.codePointAt',
'String.prototype.endsWith',
'String.fromCodePoint',
'String.prototype.includes',
'String.prototype.@@iterator',
'String.prototype.padEnd',
'String.prototype.padStart',
'String.prototype.repeat',
'String.raw',
'String.prototype.startsWith',
'String.prototype.trimEnd',
'String.prototype.trimStart',
'URL',
'URL.prototype.toJSON',
'URLSearchParams',
'WeakMap',
'WeakSet',
'Promise',
'Promise.prototype.finally',
'es2015',
'es2016',
'es2017',
'es2018',
'es2019',
'es5',
'es6',
'es7'
];
var url = 'https://nextjs.org/docs/messages/no-unwanted-polyfillio';
var _default = (0, _definerule.defineRule)({
meta: {
docs: {
description: 'Prevent duplicate polyfills from Polyfill.io.',
category: 'HTML',
recommended: true,
url: url
},
type: 'problem',
schema: []
},
create: function create(context) {
var scriptImport = null;
return {
ImportDeclaration: function ImportDeclaration(node) {
if (node.source && node.source.value === 'next/script') {
scriptImport = node.specifiers[0].local.name;
}
},
JSXOpeningElement: function JSXOpeningElement(node) {
if (node.name && node.name.name !== 'script' && node.name.name !== scriptImport) {
return;
}
if (node.attributes.length === 0) {
return;
}
var srcNode = node.attributes.find(function(attr) {
return attr.type === 'JSXAttribute' && attr.name.name === 'src';
});
if (!srcNode || srcNode.value.type !== 'Literal') {
return;
}
var src = srcNode.value.value;
if (src.startsWith('https://cdn.polyfill.io/v2/') || src.startsWith('https://polyfill.io/v3/') || // https://community.fastly.com/t/new-options-for-polyfill-io-users/2540
src.startsWith('https://polyfill-fastly.net/') || src.startsWith('https://polyfill-fastly.io/') || // https://blog.cloudflare.com/polyfill-io-now-available-on-cdnjs-reduce-your-supply-chain-risk
src.startsWith('https://cdnjs.cloudflare.com/polyfill/')) {
var featureQueryString = new URL(src).searchParams.get('features');
var featuresRequested = (featureQueryString || '').split(',');
var unwantedFeatures = featuresRequested.filter(function(feature) {
return NEXT_POLYFILLED_FEATURES.includes(feature);
});
if (unwantedFeatures.length > 0) {
context.report({
node: node,
message: "No duplicate polyfills from Polyfill.io are allowed. ".concat(unwantedFeatures.join(', '), " ").concat(unwantedFeatures.length > 1 ? 'are' : 'is', " already shipped with Next.js. See: ").concat(url)
});
}
}
}
};
}
});