-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstart.mjs
84 lines (69 loc) · 2.23 KB
/
start.mjs
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
import { spawn } from 'child_process'
import { createHash } from 'crypto'
import dotenv from 'dotenv'
import consola from 'consola'
import { readFileSync, writeFileSync } from 'fs'
dotenv.config()
function hashEnv() {
const sum = createHash('sha256')
const env = Object.fromEntries(Object.entries(process.env).filter(
([key]) => !['HOSTNAME', 'PATH'].includes(key)
))
console.log('env', env)
sum.update(JSON.stringify(env))
return sum.digest('hex')
}
function readHash() {
try {
return readFileSync('.env.hash', 'utf8')
} catch (err) {
return ''
}
}
function buildNuxt() {
return new Promise((resolve, reject) => {
consola.info('Building Nuxt...')
const building = spawn('yarn', ['build'], { env: process.env, shell: true })
building.stdout.on('data', (data) => {
process.stdout.write(data.toString())
})
building.stderr.on('data', (data) => {
process.stderr.write(data.toString())
})
building.on('close', (code) => {
consola.info(`child process exited with code ${code}`)
code > 0 ? reject() : resolve()
if (code > 0) return reject()
consola.info('Hashing .env...')
writeFileSync('.env.hash', hashEnv())
return resolve()
})
})
}
;(async () => {
if (/yes|1|on|true/i.test(`${process.env.SESAME_HTTPS_ENABLED}`)) {
try {
process.env.NITRO_SSL_KEY = readFileSync(`${process.env.SESAME_HTTPS_PATH_KEY}`, 'utf8')
process.env.NITRO_SSL_CERT = readFileSync(`${process.env.SESAME_HTTPS_PATH_CERT}`, 'utf8')
consola.info('[Nuxt] SSL certificates loaded successfully')
} catch (error) {
consola.warn('[Nuxt] Error while reading SSL certificates', error)
}
}
if (hashEnv() !== readHash()) {
consola.warn('Hash changed, rebuilding...')
consola.info(`Hash: ${hashEnv()}, Previous: ${readHash()}`)
await buildNuxt()
}
consola.info('Starting Nuxt...')
const starting = spawn('yarn', ['start'], { env: process.env, shell: true })
starting.stdout.on('data', (data) => {
process.stdout.write(data.toString())
})
starting.stderr.on('data', (data) => {
process.stderr.write(data.toString())
})
starting.on('close', (code) => {
consola.warn(`child process exited with code ${code}`)
})
})()