4
4
addPlugin ,
5
5
addComponentsDir ,
6
6
extendViteConfig ,
7
+ addPluginTemplate ,
7
8
} from '@nuxt/kit'
9
+ import path from 'pathe'
8
10
9
11
export interface ModuleOptions {
10
12
/**
@@ -17,6 +19,11 @@ export interface ModuleOptions {
17
19
* @default 'p'
18
20
*/
19
21
prefix ?: string ,
22
+ /**
23
+ * Use local pdf worker
24
+ * @default false
25
+ */
26
+ useLocalPdfWorker ?: boolean ,
20
27
}
21
28
22
29
export default defineNuxtModule < ModuleOptions > ( {
@@ -25,7 +32,11 @@ export default defineNuxtModule<ModuleOptions>({
25
32
configKey : 'persona' ,
26
33
compatibility : { nuxt : '>=3.0.0' } ,
27
34
} ,
28
- defaults : { font : true , prefix : 'p' } ,
35
+ defaults : {
36
+ font : true ,
37
+ prefix : 'p' ,
38
+ useLocalPdfWorker : false ,
39
+ } ,
29
40
async setup ( options , nuxt ) {
30
41
const { resolve } = createResolver ( import . meta. url )
31
42
@@ -68,5 +79,48 @@ export default defineNuxtModule<ModuleOptions>({
68
79
'vuedraggable' ,
69
80
)
70
81
} )
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
+ }
71
125
} ,
72
126
} )
0 commit comments