forked from
npmx.dev/npmx.dev
[READ-ONLY]
a fast, modern browser for the npm registry
1import type { BuildInfo, EnvType } from '../shared/types'
2import { createResolver, defineNuxtModule } from 'nuxt/kit'
3import { isCI } from 'std-env'
4import { getEnv, getFileLastUpdated, version } from '../config/env'
5
6const { resolve } = createResolver(import.meta.url)
7
8export default defineNuxtModule({
9 meta: {
10 name: 'npmx:build-env',
11 },
12 async setup(_options, nuxt) {
13 let env: EnvType = 'dev'
14 nuxt.options.appConfig = nuxt.options.appConfig || {}
15 nuxt.options.appConfig.env = env
16 if (process.env.TEST) {
17 const time = new Date()
18 nuxt.options.appConfig.buildInfo = {
19 env,
20 version: '0.0.0',
21 commit: '704987bba88909f3782d792c224bde989569acb9',
22 shortCommit: '704987b',
23 branch: 'xxx',
24 time: time.getTime(),
25 privacyPolicyDate: time.toISOString(),
26 } satisfies BuildInfo
27 } else {
28 const [{ env: useEnv, commit, shortCommit, branch }, privacyPolicyDate] = await Promise.all([
29 getEnv(nuxt.options.dev),
30 getFileLastUpdated('app/pages/privacy.vue'),
31 ])
32 env = useEnv
33 nuxt.options.appConfig.env = useEnv
34 nuxt.options.appConfig.buildInfo = {
35 version,
36 time: +Date.now(),
37 commit,
38 shortCommit,
39 branch,
40 env,
41 privacyPolicyDate,
42 } satisfies BuildInfo
43 }
44
45 nuxt.options.nitro.publicAssets = nuxt.options.nitro.publicAssets || []
46 if (env === 'dev') nuxt.options.nitro.publicAssets.unshift({ dir: resolve('../public-dev') })
47 else if (env === 'canary' || env === 'preview' || !isCI)
48 nuxt.options.nitro.publicAssets.unshift({ dir: resolve('../public-staging') })
49 },
50})
51
52declare module '@nuxt/schema' {
53 interface AppConfig {
54 env: BuildInfo['env']
55 buildInfo: BuildInfo
56 }
57}