232 lines
7.8 KiB
TypeScript
232 lines
7.8 KiB
TypeScript
/* eslint-disable @typescript-eslint/indent, node/no-unpublished-import */
|
|
|
|
import './polyfills.js'
|
|
|
|
import { config } from '../data/config.js'
|
|
|
|
import type * as configTypes from '../types/configTypes'
|
|
|
|
/*
|
|
* SET UP FALLBACK VALUES
|
|
*/
|
|
|
|
const configFallbackValues = new Map<string, unknown>()
|
|
|
|
configFallbackValues.set('application.applicationName', 'Lot Occupancy System')
|
|
configFallbackValues.set(
|
|
'application.backgroundURL',
|
|
'/images/cemetery-background.jpg'
|
|
)
|
|
configFallbackValues.set('application.logoURL', '/images/cemetery-logo.png')
|
|
configFallbackValues.set('application.httpPort', 7000)
|
|
configFallbackValues.set('application.useTestDatabases', false)
|
|
|
|
configFallbackValues.set('reverseProxy.disableCompression', false)
|
|
configFallbackValues.set('reverseProxy.disableEtag', false)
|
|
configFallbackValues.set('reverseProxy.urlPrefix', '')
|
|
|
|
configFallbackValues.set('session.cookieName', 'lot-occupancy-system-user-sid')
|
|
configFallbackValues.set('session.secret', 'cityssm/lot-occupancy-system')
|
|
configFallbackValues.set('session.maxAgeMillis', 60 * 60 * 1000)
|
|
configFallbackValues.set('session.doKeepAlive', false)
|
|
|
|
configFallbackValues.set('users.testing', [])
|
|
configFallbackValues.set('users.canLogin', ['administrator'])
|
|
configFallbackValues.set('users.canUpdate', [])
|
|
configFallbackValues.set('users.isAdmin', ['administrator'])
|
|
|
|
configFallbackValues.set('aliases.lot', 'Lot')
|
|
configFallbackValues.set('aliases.lots', 'Lots')
|
|
configFallbackValues.set('aliases.map', 'Map')
|
|
configFallbackValues.set('aliases.maps', 'Maps')
|
|
configFallbackValues.set('aliases.occupancy', 'Occupancy')
|
|
configFallbackValues.set('aliases.occupancies', 'Occupancies')
|
|
configFallbackValues.set('aliases.occupancyStartDate', 'Start Date')
|
|
configFallbackValues.set('aliases.occupant', 'Occupant')
|
|
configFallbackValues.set('aliases.occupants', 'Occupants')
|
|
configFallbackValues.set(
|
|
'aliases.externalReceiptNumber',
|
|
'External Receipt Number'
|
|
)
|
|
configFallbackValues.set('aliases.workOrderOpenDate', 'Open Date')
|
|
configFallbackValues.set('aliases.workOrderCloseDate', 'Close Date')
|
|
|
|
configFallbackValues.set('settings.map.mapCityDefault', '')
|
|
configFallbackValues.set('settings.map.mapProvinceDefault', '')
|
|
|
|
configFallbackValues.set(
|
|
'settings.lot.lotNameSortNameFunction',
|
|
(lotName: string) => lotName
|
|
)
|
|
|
|
configFallbackValues.set(
|
|
'settings.lotOccupancy.occupancyEndDateIsRequired',
|
|
true
|
|
)
|
|
configFallbackValues.set('settings.lotOccupancy.occupantCityDefault', '')
|
|
configFallbackValues.set('settings.lotOccupancy.occupantProvinceDefault', '')
|
|
configFallbackValues.set('settings.lotOccupancy.prints', [
|
|
'screen/lotOccupancy'
|
|
])
|
|
|
|
configFallbackValues.set('settings.fees.taxPercentageDefault', 0)
|
|
|
|
configFallbackValues.set('settings.workOrders.workOrderNumberLength', 6)
|
|
configFallbackValues.set(
|
|
'settings.workOrders.workOrderMilestoneDateRecentBeforeDays',
|
|
5
|
|
)
|
|
configFallbackValues.set(
|
|
'settings.workOrders.workOrderMilestoneDateRecentAfterDays',
|
|
60
|
|
)
|
|
configFallbackValues.set(
|
|
'settings.workOrders.calendarEmailAddress',
|
|
'no-reply@127.0.0.1'
|
|
)
|
|
configFallbackValues.set('settings.workOrders.prints', [
|
|
'pdf/workOrder',
|
|
'pdf/workOrder-commentLog'
|
|
])
|
|
|
|
configFallbackValues.set('settings.adminCleanup.recordDeleteAgeDays', 60)
|
|
|
|
configFallbackValues.set('settings.printPdf.contentDisposition', 'attachment')
|
|
|
|
/*
|
|
* Set up function overloads
|
|
*/
|
|
|
|
export function getProperty(propertyName: 'application.applicationName'): string
|
|
|
|
export function getProperty(propertyName: 'application.logoURL'): string
|
|
export function getProperty(propertyName: 'application.httpPort'): number
|
|
export function getProperty(propertyName: 'application.userDomain'): string
|
|
export function getProperty(
|
|
propertyName: 'application.useTestDatabases'
|
|
): boolean
|
|
export function getProperty(
|
|
propertyName: 'application.ntfyStartup'
|
|
): configTypes.ConfigNtfyStartup | undefined
|
|
|
|
export function getProperty(
|
|
propertyName: 'activeDirectory'
|
|
): configTypes.ConfigActiveDirectory
|
|
|
|
export function getProperty(propertyName: 'users.testing'): string[]
|
|
export function getProperty(propertyName: 'users.canLogin'): string[]
|
|
export function getProperty(propertyName: 'users.canUpdate'): string[]
|
|
export function getProperty(propertyName: 'users.isAdmin'): string[]
|
|
|
|
export function getProperty(
|
|
propertyName: 'reverseProxy.disableCompression'
|
|
): boolean
|
|
|
|
export function getProperty(propertyName: 'reverseProxy.disableEtag'): boolean
|
|
export function getProperty(propertyName: 'reverseProxy.urlPrefix'): string
|
|
|
|
export function getProperty(propertyName: 'session.cookieName'): string
|
|
export function getProperty(propertyName: 'session.doKeepAlive'): boolean
|
|
export function getProperty(propertyName: 'session.maxAgeMillis'): number
|
|
export function getProperty(propertyName: 'session.secret'): string
|
|
|
|
export function getProperty(propertyName: 'aliases.lot'): string
|
|
export function getProperty(propertyName: 'aliases.lots'): string
|
|
export function getProperty(propertyName: 'aliases.map'): string
|
|
export function getProperty(propertyName: 'aliases.maps'): string
|
|
export function getProperty(propertyName: 'aliases.occupancy'): string
|
|
export function getProperty(propertyName: 'aliases.occupancies'): string
|
|
export function getProperty(propertyName: 'aliases.occupancyStartDate'): string
|
|
export function getProperty(propertyName: 'aliases.occupant'): string
|
|
export function getProperty(propertyName: 'aliases.occupants'): string
|
|
export function getProperty(propertyName: 'aliases.workOrderOpenDate'): string
|
|
export function getProperty(propertyName: 'aliases.workOrderCloseDate'): string
|
|
|
|
export function getProperty(
|
|
propertyName: 'aliases.externalReceiptNumber'
|
|
): string
|
|
|
|
export function getProperty(propertyName: 'settings.map.mapCityDefault'): string
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.map.mapProvinceDefault'
|
|
): string
|
|
|
|
export function getProperty(propertyName: 'settings.lot.lotNamePattern'): RegExp
|
|
export function getProperty(
|
|
propertyName: 'settings.lot.lotNameHelpText'
|
|
): string
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.lot.lotNameSortNameFunction'
|
|
): (lotName: string) => string
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.lotOccupancy.occupancyEndDateIsRequired'
|
|
): boolean
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.lotOccupancy.occupantCityDefault'
|
|
): string
|
|
export function getProperty(
|
|
propertyName: 'settings.lotOccupancy.occupantProvinceDefault'
|
|
): string
|
|
export function getProperty(
|
|
propertyName: 'settings.lotOccupancy.prints'
|
|
): string[]
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.fees.taxPercentageDefault'
|
|
): number
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.workOrders.workOrderNumberLength'
|
|
): number
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays'
|
|
): number
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.workOrders.workOrderMilestoneDateRecentAfterDays'
|
|
): number
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.workOrders.calendarEmailAddress'
|
|
): string
|
|
export function getProperty(
|
|
propertyName: 'settings.workOrders.prints'
|
|
): string[]
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.adminCleanup.recordDeleteAgeDays'
|
|
): number
|
|
|
|
export function getProperty(
|
|
propertyName: 'settings.printPdf.contentDisposition'
|
|
): 'attachment' | 'inline'
|
|
|
|
export function getProperty(propertyName: string): unknown {
|
|
const propertyNameSplit = propertyName.split('.')
|
|
|
|
let currentObject = config
|
|
|
|
for (const propertyNamePiece of propertyNameSplit) {
|
|
if (Object.hasOwn(currentObject, propertyNamePiece)) {
|
|
currentObject = currentObject[propertyNamePiece]
|
|
continue
|
|
}
|
|
|
|
return configFallbackValues.get(propertyName)
|
|
}
|
|
|
|
return currentObject
|
|
}
|
|
|
|
export const keepAliveMillis = getProperty('session.doKeepAlive')
|
|
? Math.max(
|
|
getProperty('session.maxAgeMillis') / 2,
|
|
getProperty('session.maxAgeMillis') - 10 * 60 * 1000
|
|
)
|
|
: 0
|