Skip to content

Commit

Permalink
fix: generate crawlers regex at build time
Browse files Browse the repository at this point in the history
  • Loading branch information
DamianGlowala committed Sep 16, 2024
1 parent 1c638e4 commit ef4d0ac
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
14 changes: 13 additions & 1 deletion src/module.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { defu } from 'defu'
import { defineNuxtModule, addPlugin, addImportsDir, createResolver, useLogger } from '@nuxt/kit'
import { defineNuxtModule, addPlugin, addImportsDir, createResolver, useLogger, addTemplate } from '@nuxt/kit'
import { createJiti } from 'jiti'
import { name, version } from '../package.json'
import type { ModuleOptions } from './types'

Expand Down Expand Up @@ -41,5 +42,16 @@ export default defineNuxtModule<ModuleOptions>({
addPlugin(resolve('./runtime/plugin'))

addImportsDir(resolve('./runtime/composables'))

addTemplate({
filename: 'nuxtjs-device.mjs',
getContents: async () => {
const jiti = createJiti(import.meta.url)

const crawlers = await jiti.import('crawler-user-agents') as { pattern: string }[]

return `export const REGEX_CRAWLER = new RegExp(/${crawlers.map(crawler => crawler.pattern).join('|')}/)`
},
})
},
})
4 changes: 1 addition & 3 deletions src/runtime/generateFlags.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import crawlers from 'crawler-user-agents'
import type { Device } from './types'
import { REGEX_CRAWLER } from '#build/nuxtjs-device.mjs'

// eslint-disable-next-line
const REGEX_MOBILE1 = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|FBAN|FBAV|fennec|hiptop|iemobile|ip(hone|od)|Instagram|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i
Expand All @@ -13,8 +13,6 @@ const REGEX_MOBILE_OR_TABLET1 = /(android|bb\d+|meego).+mobile|avantgo|bada\/|bl
// eslint-disable-next-line
const REGEX_MOBILE_OR_TABLET2 = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i

const REGEX_CRAWLER = new RegExp(crawlers.map(crawler => crawler.pattern).join('|'))

function isMobile(userAgent: string): boolean {
return REGEX_MOBILE1.test(userAgent) || REGEX_MOBILE2.test(userAgent.slice(0, 4))
}
Expand Down
6 changes: 3 additions & 3 deletions test/fixtures/basic/nuxt.config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Module from '../../../src/module'

export default defineNuxtConfig({
modules: [
'@nuxtjs/device',

This comment has been minimized.

Copy link
@danielroe

danielroe Sep 16, 2024

Contributor

why did you make this change?

This comment has been minimized.

This comment has been minimized.

Copy link
@danielroe

danielroe Sep 16, 2024

Contributor

ah, that's only because we can't be opinionated about package manager. it's better to use string and resolutions to force it resolved to root directory, IMO

],
modules: [Module],
})

0 comments on commit ef4d0ac

Please sign in to comment.