44 addPlugin ,
55 addComponentsDir ,
66 extendViteConfig ,
7+ addPluginTemplate ,
78} from '@nuxt/kit'
9+ import path from 'pathe'
810
911export interface ModuleOptions {
1012 /**
@@ -17,6 +19,11 @@ export interface ModuleOptions {
1719 * @default 'p'
1820 */
1921 prefix ?: string ,
22+ /**
23+ * Use local pdf worker
24+ * @default false
25+ */
26+ useLocalPdfWorker ?: boolean ,
2027}
2128
2229export default defineNuxtModule < ModuleOptions > ( {
@@ -25,7 +32,11 @@ export default defineNuxtModule<ModuleOptions>({
2532 configKey : 'persona' ,
2633 compatibility : { nuxt : '>=3.0.0' } ,
2734 } ,
28- defaults : { font : true , prefix : 'p' } ,
35+ defaults : {
36+ font : true ,
37+ prefix : 'p' ,
38+ useLocalPdfWorker : false ,
39+ } ,
2940 async setup ( options , nuxt ) {
3041 const { resolve } = createResolver ( import . meta. url )
3142
@@ -68,5 +79,48 @@ export default defineNuxtModule<ModuleOptions>({
6879 'vuedraggable' ,
6980 )
7081 } )
82+
83+ // Use local pdf worker
84+ if ( options . useLocalPdfWorker ) {
85+ nuxt . hook ( 'nitro:config' , async ( nitroConfig ) => {
86+ // eslint-disable-next-line align-assignments/align-assignments
87+ nitroConfig . publicAssets ||= [ ]
88+
89+ // eslint-disable-next-line unicorn/prefer-module
90+ const pdfjsDir = path . dirname ( require . resolve ( 'pdfjs-dist' ) )
91+ const { default : { version } } = await import ( 'pdfjs-dist/package.json' )
92+ const pdfjsBaseUrl = `_persona/pdjs-dist@${ version } `
93+
94+ const assetsMaxAge = 60 * 60 * 24 * 30
95+
96+ nitroConfig . publicAssets . push (
97+ {
98+ baseURL : `${ pdfjsBaseUrl } /build` ,
99+ dir : pdfjsDir ,
100+ maxAge : assetsMaxAge ,
101+ } ,
102+ {
103+ baseURL : `${ pdfjsBaseUrl } /cmaps` ,
104+ dir : path . join ( pdfjsDir , '../cmaps' ) ,
105+ maxAge : assetsMaxAge ,
106+ } ,
107+ )
108+ } )
109+
110+ addPluginTemplate ( {
111+ filename : 'persona-local-pdf-worker.mjs' ,
112+ getContents : ( ) => `
113+ import { setCDN } from '@privyid/persona/core'
114+
115+ export default defineNuxtPlugin({
116+ name: 'persona-local-pdf-worker',
117+ dependsOn: ['persona-setup'],
118+ setup () {
119+ setCDN('/_persona/')
120+ },
121+ })
122+ ` ,
123+ } )
124+ }
71125 } ,
72126} )
0 commit comments