-
Notifications
You must be signed in to change notification settings - Fork 1
/
module.ts
85 lines (71 loc) · 2.05 KB
/
module.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import {
addImports,
addTemplate,
createResolver,
defineNuxtModule,
useLogger,
useNitro
} from '@nuxt/kit'
import { saveMedias } from './runtime/extractor'
import type { ExtractorResult, ModuleOptions } from './types'
export default defineNuxtModule<ModuleOptions>({
meta: {
name: 'media-extractor',
configKey: 'mediaExtractor',
compatibility: {
nuxt: '^3.11.2'
}
},
defaults: (nuxt) => ({
dir: nuxt.options.dir.public,
imgDir: 'notion-img',
videoDir: 'video'
}),
async setup(options, nuxt) {
global.mediaExtractorQueue = [] as ExtractorResult[]
const resolver = createResolver(import.meta.url)
const logger = useLogger('media-extractor')
const runtimeDir = resolver.resolve('./runtime')
nuxt.options.alias['#media-extractor'] = runtimeDir
nuxt.options.build.transpile.push(runtimeDir)
const dir = options.dir ?? nuxt.options.dir.public
const outputDir = resolver.resolve('..', '..', '..', '.output', dir)
const tempImgOutputDir = resolver.resolve('..', '..', dir)
nuxt.hook('ready', async () => {
const nitro = useNitro()
nitro.hooks.hook('prerender:generate', async () => {
await saveMedias({
logger,
imgOutputDir: tempImgOutputDir,
videoOutputDir: outputDir,
options
})
})
// if (!process.env.CI) {
// nitro.hooks.hook('prerender:done', () => {
// rmSync(join(tempImgOutputDir, options.imgDir), { recursive: true })
// })
// }
})
addImports({
name: 'useMediaExtractor',
from: resolver.resolve('runtime/composables')
})
addImports({
name: 'fileNameFromUrl',
from: resolver.resolve('runtime/utils')
})
addImports({
name: 'defineExtractorEventHandler',
from: resolver.resolve('runtime/handler'),
})
addTemplate({
filename: 'media-extractor-options.mjs',
getContents() {
return `
export const mediaExtractorOptions = ${JSON.stringify(options, null, 2)}
`
},
})
}
})