2022-09-30 03:37:59 +02:00
import rule from '@next/eslint-plugin-next/dist/rules/no-before-interactive-script-outside-document'
2022-04-21 23:15:53 +02:00
import { RuleTester } from 'eslint'
; ( RuleTester as any ) . setDefaultConfig ( {
parserOptions : {
ecmaVersion : 2018 ,
sourceType : 'module' ,
ecmaFeatures : {
modules : true ,
jsx : true ,
} ,
} ,
} )
const ruleTester = new RuleTester ( )
ruleTester . run ( 'no-before-interactive-script-outside-document' , rule , {
valid : [
{
code : `
import Document , { Html , Main , NextScript } from 'next/document'
import Script from 'next/script'
class MyDocument extends Document {
render() {
return (
< Html >
< Head >
< meta charSet = "utf-8" / >
< / Head >
< body >
< Main / >
< NextScript / >
< Script
id = "scriptBeforeInteractive"
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = "beforeInteractive"
> < / Script >
< / body >
< / Html >
)
}
}
export default MyDocument
` ,
filename : 'pages/_document.js' ,
} ,
{
code : `
import Document , { Html , Main , NextScript } from 'next/document'
import ScriptComponent from 'next/script'
class MyDocument extends Document {
render() {
return (
< Html >
< Head >
< meta charSet = "utf-8" / >
< / Head >
< body >
< Main / >
< NextScript / >
< ScriptComponent
id = "scriptBeforeInteractive"
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = "beforeInteractive"
> < / ScriptComponent >
< / body >
< / Html >
)
}
}
2022-05-17 19:09:31 +02:00
export default MyDocument
` ,
filename : 'pages/_document.tsx' ,
} ,
{
code : `
import Document , { Html , Main , NextScript } from 'next/document'
import ScriptComponent from 'next/script'
class MyDocument extends Document {
render() {
return (
< Html >
< Head >
< meta charSet = "utf-8" / >
< / Head >
< body >
< Main / >
< NextScript / >
< ScriptComponent
id = "scriptBeforeInteractive"
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
> < / ScriptComponent >
< / body >
< / Html >
)
}
}
2022-04-21 23:15:53 +02:00
export default MyDocument
` ,
filename : 'pages/_document.tsx' ,
} ,
2023-03-08 11:28:52 +01:00
{
code : `
import Script from "next/script" ;
export default function Index() {
return (
2023-11-12 10:30:10 +01:00
< html lang = "en" >
< body className = { inter . className } > { children } < / body >
< Script
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = 'beforeInteractive'
/ >
< / html >
) ;
} ` ,
filename : '/Users/user_name/projects/project-name/app/layout.tsx' ,
} ,
{
code : `
import Script from "next/script" ;
export default function test() {
return (
< html lang = "en" >
< body className = { inter . className } > { children } < / body >
< Script
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = 'beforeInteractive'
/ >
< / html >
2023-03-08 11:28:52 +01:00
) ;
} ` ,
2023-11-12 10:30:10 +01:00
filename : 'C:\\Users\\username\\projects\\project-name\\app\\layout.tsx' ,
2023-03-08 11:28:52 +01:00
} ,
{
code : `
import Script from "next/script" ;
export default function Index() {
return (
2023-11-12 10:30:10 +01:00
< html lang = "en" >
< body className = { inter . className } > { children } < / body >
< Script
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = 'beforeInteractive'
/ >
< / html >
) ;
} ` ,
filename : '/Users/user_name/projects/project-name/src/app/layout.tsx' ,
} ,
{
code : `
import Script from "next/script" ;
export default function test() {
return (
< html lang = "en" >
< body className = { inter . className } > { children } < / body >
< Script
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = 'beforeInteractive'
/ >
< / html >
2023-03-08 11:28:52 +01:00
) ;
} ` ,
2023-11-12 10:30:10 +01:00
filename :
'C:\\Users\\username\\projects\\project-name\\src\\app\\layout.tsx' ,
2023-03-08 11:28:52 +01:00
} ,
2023-11-12 10:30:10 +01:00
] . map ( ( obj , idx ) = > ( {
. . . obj ,
code : ` // valid- ${ idx }
$ { obj . code }
` ,
} ) ) ,
invalid : [
2023-03-08 11:28:52 +01:00
{
code : `
2023-11-12 10:30:10 +01:00
import Head from "next/head" ;
2023-03-08 11:28:52 +01:00
import Script from "next/script" ;
export default function Index() {
return (
< Script
id = "scriptBeforeInteractive"
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = "beforeInteractive"
> < / Script >
) ;
} ` ,
2023-11-12 10:30:10 +01:00
filename : 'pages/index.js' ,
errors : [
{
message :
"`next/script`'s `beforeInteractive` strategy should not be used outside of `pages/_document.js`. See: https://nextjs.org/docs/messages/no-before-interactive-script-outside-document" ,
} ,
] ,
2023-03-08 11:28:52 +01:00
} ,
{
code : `
2023-11-12 10:30:10 +01:00
import Head from "next/head" ;
2023-03-08 11:28:52 +01:00
import Script from "next/script" ;
export default function Index() {
return (
< Script
id = "scriptBeforeInteractive"
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = "beforeInteractive"
> < / Script >
) ;
} ` ,
2023-11-12 10:30:10 +01:00
filename : 'components/outside-known-dirs.js' ,
errors : [
{
message :
"`next/script`'s `beforeInteractive` strategy should not be used outside of `pages/_document.js`. See: https://nextjs.org/docs/messages/no-before-interactive-script-outside-document" ,
} ,
] ,
2023-03-08 11:28:52 +01:00
} ,
2023-05-26 18:27:42 +02:00
{
code : `
import Script from "next/script" ;
export default function Index() {
return (
< html lang = "en" >
< body className = { inter . className } > { children } < / body >
< Script
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = 'beforeInteractive'
/ >
< / html >
) ;
} ` ,
2023-11-12 10:30:10 +01:00
filename : '/Users/user_name/projects/project-name/pages/layout.tsx' ,
errors : [
{
message :
"`next/script`'s `beforeInteractive` strategy should not be used outside of `pages/_document.js`. See: https://nextjs.org/docs/messages/no-before-interactive-script-outside-document" ,
} ,
] ,
2023-05-26 18:27:42 +02:00
} ,
{
code : `
import Script from "next/script" ;
export default function Index() {
return (
< html lang = "en" >
< body className = { inter . className } > { children } < / body >
< Script
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = 'beforeInteractive'
/ >
< / html >
) ;
} ` ,
2023-11-12 10:30:10 +01:00
filename :
'C:\\Users\\username\\projects\\project-name\\pages\\layout.tsx' ,
errors : [
{
message :
"`next/script`'s `beforeInteractive` strategy should not be used outside of `pages/_document.js`. See: https://nextjs.org/docs/messages/no-before-interactive-script-outside-document" ,
} ,
] ,
2023-05-26 18:27:42 +02:00
} ,
2022-04-21 23:15:53 +02:00
{
code : `
import Script from "next/script" ;
export default function Index() {
return (
2023-11-12 10:30:10 +01:00
< html lang = "en" >
< body className = { inter . className } > { children } < / body >
< Script
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = 'beforeInteractive'
/ >
< / html >
2022-04-21 23:15:53 +02:00
) ;
} ` ,
2023-11-12 10:30:10 +01:00
filename : '/Users/user_name/projects/project-name/src/pages/layout.tsx' ,
2022-04-21 23:15:53 +02:00
errors : [
{
message :
2022-06-14 04:17:42 +02:00
"`next/script`'s `beforeInteractive` strategy should not be used outside of `pages/_document.js`. See: https://nextjs.org/docs/messages/no-before-interactive-script-outside-document" ,
2022-04-21 23:15:53 +02:00
} ,
] ,
} ,
2023-03-08 11:28:52 +01:00
{
code : `
import Script from "next/script" ;
2023-11-12 10:30:10 +01:00
export default function test() {
2023-03-08 11:28:52 +01:00
return (
2023-11-12 10:30:10 +01:00
< html lang = "en" >
< body className = { inter . className } > { children } < / body >
< Script
src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js?a=scriptBeforeInteractive"
strategy = 'beforeInteractive'
/ >
< / html >
2023-03-08 11:28:52 +01:00
) ;
} ` ,
2023-11-12 10:30:10 +01:00
filename :
'C:\\Users\\username\\projects\\project-name\\src\\pages\\layout.tsx' ,
2023-03-08 11:28:52 +01:00
errors : [
{
message :
"`next/script`'s `beforeInteractive` strategy should not be used outside of `pages/_document.js`. See: https://nextjs.org/docs/messages/no-before-interactive-script-outside-document" ,
} ,
] ,
} ,
] . map ( ( obj , idx ) = > ( {
. . . obj ,
code : ` // invalid- ${ idx }
$ { obj . code }
` ,
} ) ) ,
2022-04-21 23:15:53 +02:00
} )