Skip to content

Commit

Permalink
fix: logic to validate the browser version
Browse files Browse the repository at this point in the history
  • Loading branch information
CavalcanteLeo committed Sep 10, 2023
1 parent 79f2cff commit f6f3fb1
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 32 deletions.
19 changes: 3 additions & 16 deletions src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,15 @@ type PredefinedBrowsers =
| "Opera"
| "Internet Explorer";

export type BrowsersVersion = {
export type MinimumBrowsersVersion = {
[key in PredefinedBrowsers]?: AcceptedValues;
} & Record<string, AcceptedValues>;

export interface ModuleOptions {
redirect: string;
versions: BrowsersVersion;
versions: MinimumBrowsersVersion;
}

// declare module "nuxt/schema" {
// interface RuntimeConfig {
// supportedBrowsers?: ModuleOptions;
// }
// interface PublicRuntimeConfig {
// supportedBrowsers: ModuleOptions;
// }
// }

export default defineNuxtModule<ModuleOptions>({
meta: {
name: "nuxt-supported-browsers",
Expand All @@ -40,7 +31,7 @@ export default defineNuxtModule<ModuleOptions>({
Firefox: 70,
Safari: 13,
Edge: 84,
Opera: null,
Opera: 60,
"Internet Explorer": undefined,
},
},
Expand All @@ -49,10 +40,6 @@ export default defineNuxtModule<ModuleOptions>({
setup(options, nuxt) {
const resolver = createResolver(import.meta.url);

if (!options) {
throw new Error("Supported browser module options are required");
}

nuxt.options.runtimeConfig.public.supportedBrowsers = defu(
nuxt.options.runtimeConfig.public.supportedBrowsers,
options
Expand Down
17 changes: 10 additions & 7 deletions src/runtime/composable/checkBrowserCompatibility.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
import { BrowsersVersion } from "../../types";
import { MinimumBrowsersVersion } from "../../module";
import { BrowserInfo } from "./detectBrowser";

type CheckBrowserCompatibility = {
supportedBrowsers: BrowsersVersion;
supportedBrowsers: MinimumBrowsersVersion;
currentBrowser: BrowserInfo;
};

export function useCheckBrowserCompatibility({
supportedBrowsers,
currentBrowser,
}: CheckBrowserCompatibility): boolean {
console.log(supportedBrowsers, currentBrowser);
if (currentBrowser.name in supportedBrowsers === false) {
return false;
}

const mustSuportVersion = supportedBrowsers[currentBrowser.name];

// FIX: fix error (Object is possibly 'null' or 'undefined')
return (
currentBrowser.name in supportedBrowsers &&
currentBrowser.version >= supportedBrowsers[currentBrowser.name] &&
Number.isFinite(supportedBrowsers[currentBrowser.name])
typeof mustSuportVersion === "number" &&
Number.isFinite(mustSuportVersion) &&
currentBrowser.version >= mustSuportVersion
);
}
18 changes: 9 additions & 9 deletions src/runtime/middleware/supported-browsers.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
import { defineNuxtRouteMiddleware, navigateTo, useRuntimeConfig } from "#app";
import { useDetectBrowser } from "../composable/detectBrowser";
import { useCheckBrowserCompatibility } from "../composable/checkBrowserCompatibility";

export default defineNuxtRouteMiddleware((to) => {
if (process.server) return;

const { supportedBrowser } = useRuntimeConfig().public;
const {
supportedBrowsers: { versions, redirect },
} = useRuntimeConfig().public;

if (!supportedBrowser) {
if (!versions || !redirect) {
console.warn(
"[Nuxt Supported browsers]: module options are required, module is disabled"
);
return;
}

const browsersVersion = supportedBrowser.versions;
const redirect = supportedBrowser.redirect;

const isUnsuportedPage: boolean = to.path === redirect;

const { name, version } = useDetectBrowser(navigator.userAgent);

const isSupportedBrowser: boolean =
name in browsersVersion &&
version >= browsersVersion[name] &&
Number.isFinite(browsersVersion[name]);
const isSupportedBrowser = useCheckBrowserCompatibility({
supportedBrowsers: versions,
currentBrowser: { name, version },
});

if (!isSupportedBrowser && !isUnsuportedPage) {
return navigateTo(redirect, {
Expand Down

0 comments on commit f6f3fb1

Please sign in to comment.