diff --git a/.changeset/skip-version-check.md b/.changeset/skip-version-check.md new file mode 100644 index 000000000..f6fe3628e --- /dev/null +++ b/.changeset/skip-version-check.md @@ -0,0 +1,5 @@ +--- +"react-grab": minor +--- + +Add `skipVersionCheck` option to opt out of the npm version check and silence the "outdated" console warning. diff --git a/packages/react-grab/src/core/index.tsx b/packages/react-grab/src/core/index.tsx index 941bd1ea1..17d315ce3 100644 --- a/packages/react-grab/src/core/index.tsx +++ b/packages/react-grab/src/core/index.tsx @@ -203,7 +203,7 @@ export const init = (rawOptions?: Options): ReactGrabAPI => { } hasInited = true; - logIntro(); + logIntro({ skipVersionCheck: initialOptions.skipVersionCheck }); // eslint-disable-next-line @typescript-eslint/no-unused-vars -- need to omit enabled from settableOptions to avoid circular dependency const { enabled: _enabled, ...settableOptions } = initialOptions; diff --git a/packages/react-grab/src/core/log-intro.ts b/packages/react-grab/src/core/log-intro.ts index 969c42150..1009f7e0c 100644 --- a/packages/react-grab/src/core/log-intro.ts +++ b/packages/react-grab/src/core/log-intro.ts @@ -1,7 +1,7 @@ import { LOGO_SVG } from "./logo-svg.js"; import { isExtensionContext } from "../utils/is-extension-context.js"; -export const logIntro = () => { +export const logIntro = (options?: { skipVersionCheck?: boolean }) => { try { const version = process.env.VERSION; const logoDataUri = `data:image/svg+xml;base64,${btoa(LOGO_SVG)}`; @@ -10,6 +10,7 @@ export const logIntro = () => { `background: #330039; color: #ffffff; border: 1px solid #d75fcb; padding: 4px 4px 4px 24px; border-radius: 4px; background-image: url("${logoDataUri}"); background-size: 16px 16px; background-repeat: no-repeat; background-position: 4px center; display: inline-block; margin-bottom: 4px;`, "", ); + if (options?.skipVersionCheck) return; if (navigator.onLine && version && !isExtensionContext()) { fetch(`https://www.react-grab.com/api/version?source=browser&v=${version}&t=${Date.now()}`, { referrerPolicy: "origin", diff --git a/packages/react-grab/src/types.ts b/packages/react-grab/src/types.ts index 1405dffef..4a93fdbbe 100644 --- a/packages/react-grab/src/types.ts +++ b/packages/react-grab/src/types.ts @@ -252,6 +252,12 @@ export interface Options { * @default true */ freezeReactUpdates?: boolean; + /** + * Whether to skip the version check that logs a warning when a newer + * version of React Grab is available on npm. + * @default false + */ + skipVersionCheck?: boolean; } export interface SettableOptions extends Options { diff --git a/packages/react-grab/src/utils/get-script-options.ts b/packages/react-grab/src/utils/get-script-options.ts index 98d1c37da..32ab47378 100644 --- a/packages/react-grab/src/utils/get-script-options.ts +++ b/packages/react-grab/src/utils/get-script-options.ts @@ -30,6 +30,9 @@ const parseOptionsFromJson = (rawValue: unknown): Partial | null => { if (typeof rawValue.freezeReactUpdates === "boolean") { parsedOptions.freezeReactUpdates = rawValue.freezeReactUpdates; } + if (typeof rawValue.skipVersionCheck === "boolean") { + parsedOptions.skipVersionCheck = rawValue.skipVersionCheck; + } if (Object.keys(parsedOptions).length === 0) return null; return parsedOptions;