Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const root = './dist'
const port = process.env.PORT || argv['port'] || 8001
const host = process.env.HOST || argv['host'] || 'http://localhost'
const isProd = argv['build-type'] === 'prod' || argv['prod']
const isTest = argv['e2e']
const staticOptions = {
index: false,
maxAge: isProd ? ms('1yr') : ms('0'),
setHeaders: (res: express.Response, path: any) => {
res.setHeader('Expires', isProd
? new Date(Date.now() + ms('1yr')).toUTCString()
: new Date(Date.now() + ms('0')).toUTCString())
}
}
const logger = createLogger({
name: 'Angular Universal App',
type: 'http',
streams: [{
level: 'error',
stream: { write: (err: any) => console.log },
type: 'raw'
}] as any
})
if (!isTest) app.use(bunyanMiddleware({ logger, excludeHeaders: ['authorization', 'cookie'] }))
useWebSockets(server) // uncomment to activate manual web-sockets
app.engine('html', ngExpressEngine({ bootstrap: AppServerModule }))
app.set('view engine', 'html')
app.set('views', root)
app.use(cookieParser())
class ConsoleRawStream {
write(rec) {
if (rec.level < bunyan.INFO) {
console.log(rec);
} else if (rec.level < bunyan.WARN) {
console.info(rec);
} else if (rec.level < bunyan.ERROR) {
console.warn(rec);
} else {
console.error(rec);
}
}
}
// TODO(perry) teach flow about the logger type here
let logger: any = bunyan.createLogger({
name: 'expo',
serializers: bunyan.stdSerializers,
streams: [
{
level: 'debug',
type: 'rotating-file',
path: path.join(UserSettings.dotExpoHomeDirectory(), 'log'),
period: '1d', // daily rotation
count: 3, // keep 3 back copies
},
...(process.env.DEBUG && process.env.NODE_ENV !== 'production'
? [
{
type: 'raw',
stream: new ConsoleRawStream(),
closeOnExit: false,
if (rec.level < bunyan.INFO) {
console.log(rec);
} else if (rec.level < bunyan.WARN) {
console.info(rec);
} else if (rec.level < bunyan.ERROR) {
console.warn(rec);
} else {
console.error(rec);
}
}
}
// TODO(perry) teach flow about the logger type here
let logger: any = bunyan.createLogger({
name: 'expo',
serializers: bunyan.stdSerializers,
streams: [
{
level: 'debug',
type: 'rotating-file',
path: path.join(UserSettings.dotExpoHomeDirectory(), 'log'),
period: '1d', // daily rotation
count: 3, // keep 3 back copies
},
...(process.env.DEBUG && process.env.NODE_ENV !== 'production'
? [
{
type: 'raw',
stream: new ConsoleRawStream(),
closeOnExit: false,
level: 'debug',
},
_getLogPreStyles = (log, index) => {
let message = log.msg;
// Get log style
let logStyle = InlineStyles.logDefault;
if (LOG_LEVEL_TO_STYLE[log.level]) {
logStyle = LOG_LEVEL_TO_STYLE[log.level];
}
// Lower priority of packager logs
if (log.tag === 'metro' && log.level === bunyan.INFO) {
logStyle = InlineStyles.logDebug;
}
// Expo logs can be "quiet" which formats them the same as packager logs
if (log.name === 'expo' && log.level === bunyan.INFO && log.quiet) {
logStyle = InlineStyles.logDebug;
}
// A big chunk of json is logged right when an app starts. Lower the priority.
if (this._isStartupMessage(log)) {
logStyle = InlineStyles.logDebug;
}
let otherStyles = {};
if (message.includes('Project opened!')) {
otherStyles = InlineStyles.bigLog;
`Running app on ${chunk.deviceName} in ${devEnabled ? 'development' : 'production'} mode\n`
)
return
}
if (chunk.msg === 'Dependency graph loaded.') {
packagerReady = true
onReady()
return
}
if (packagerReady) {
const message = `${chunk.msg.trim()}\n`
logWithLevel(chunk)
if (chunk.level === bunyan.ERROR) {
// if you run into a syntax error then we should clear log output on reload
needsClear = message.indexOf('SyntaxError') >= 0
}
} else {
if (chunk.level >= bunyan.ERROR) {
log(chalk.yellow('***ERROR STARTING PACKAGER***'))
log(logBuffer)
log(chalk.red(chunk.msg))
logBuffer = ''
} else {
logBuffer += chunk.msg + '\n'
}
}
}
const isProd = config.server.prodMode
const port = config.server.port
const host = config.server.host
const staticOptions = {
index: false,
maxAge: isProd ? ms('1yr') : ms('0'),
setHeaders: (res: express.Response, path: any) => {
res.setHeader('Expires', isProd ? ms('1yr').toString() : ms('0').toString())
}
}
// setup logger
if (config.env === 'dev') {
app.use(morgan('dev'))
} else {
const logger = createLogger({ name: 'Angular Universal App', type: 'http-access' })
app.use(bunyanMiddleware({ logger, excludeHeaders: ['authorization', 'cookie'] }))
}
if (process.env.HEROKU) app.use(forceSsl)
app.engine('html', ngExpressEngine({ bootstrap: AppServerModule }))
app.set('view engine', 'html')
app.set('views', root)
app.use(cookieParser())
app.use(shrinkRay())
if (config.server.minifyIndex) {
app.use(minifyHTML({
override: true,
exception_url: false,
htmlMinifier: {
removeComments: true,
write(record: any) {
if (record.level < bunyan.INFO) {
console.log(record);
} else if (record.level < bunyan.WARN) {
console.info(record);
} else if (record.level < bunyan.ERROR) {
console.warn(record);
} else {
console.error(record);
}
}
}
write(rec) {
if (rec.level < bunyan.INFO) {
console.log(rec);
} else if (rec.level < bunyan.WARN) {
console.info(rec);
} else if (rec.level < bunyan.ERROR) {
console.warn(rec);
} else {
console.error(rec);
}
}
}
write(record: any) {
if (record.level < bunyan.INFO) {
console.log(record);
} else if (record.level < bunyan.WARN) {
console.info(record);
} else if (record.level < bunyan.ERROR) {
console.warn(record);
} else {
console.error(record);
}
}
}
write(rec) {
if (rec.level < bunyan.INFO) {
console.log(rec);
} else if (rec.level < bunyan.WARN) {
console.info(rec);
} else if (rec.level < bunyan.ERROR) {
console.warn(rec);
} else {
console.error(rec);
}
}
}