From 10c374c470a70ff8c6fb609df7eeacdbcde0bcc8 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Wed, 28 Sep 2022 08:48:47 -0400 Subject: [PATCH] make config easier to define --- data/config.base.d.ts | 3 +++ data/config.base.js | 16 ++++++++++++ data/config.base.ts | 19 ++++++++++++++ data/config.cemetery.d.ts | 3 +-- data/config.cemetery.js | 28 +++++++++------------ data/config.cemetery.ontario.js | 8 ++---- data/config.cemetery.ontario.ts | 8 ++---- data/config.cemetery.ssm.js | 44 +++++++++++++++------------------ data/config.cemetery.ssm.ts | 21 +++++++--------- data/config.cemetery.ts | 34 +++++++++++-------------- types/configTypes.d.ts | 31 ++++++++++++----------- types/configTypes.ts | 31 ++++++++++++----------- 12 files changed, 130 insertions(+), 116 deletions(-) create mode 100644 data/config.base.d.ts create mode 100644 data/config.base.js create mode 100644 data/config.base.ts diff --git a/data/config.base.d.ts b/data/config.base.d.ts new file mode 100644 index 00000000..1a225013 --- /dev/null +++ b/data/config.base.d.ts @@ -0,0 +1,3 @@ +import type { Config } from "../types/configTypes"; +export declare const config: Config; +export default config; diff --git a/data/config.base.js b/data/config.base.js new file mode 100644 index 00000000..8d25456a --- /dev/null +++ b/data/config.base.js @@ -0,0 +1,16 @@ +export const config = { + application: {}, + session: {}, + reverseProxy: {}, + users: {}, + aliases: {}, + settings: { + fees: {}, + map: {}, + lot: {}, + lotOccupancy: {}, + workOrders: {}, + adminCleanup: {} + } +}; +export default config; diff --git a/data/config.base.ts b/data/config.base.ts new file mode 100644 index 00000000..a14e10b3 --- /dev/null +++ b/data/config.base.ts @@ -0,0 +1,19 @@ +import type { Config } from "../types/configTypes"; + +export const config: Config = { + application: {}, + session: {}, + reverseProxy: {}, + users: {}, + aliases: {}, + settings: { + fees: {}, + map: {}, + lot: {}, + lotOccupancy: {}, + workOrders: {}, + adminCleanup: {} + } +}; + +export default config; diff --git a/data/config.cemetery.d.ts b/data/config.cemetery.d.ts index 1a225013..4cc10144 100644 --- a/data/config.cemetery.d.ts +++ b/data/config.cemetery.d.ts @@ -1,3 +1,2 @@ -import type { Config } from "../types/configTypes"; -export declare const config: Config; +export declare const config: import("../types/configTypes.js").Config; export default config; diff --git a/data/config.cemetery.js b/data/config.cemetery.js index 146abe0f..85afe25b 100644 --- a/data/config.cemetery.js +++ b/data/config.cemetery.js @@ -1,19 +1,13 @@ -export const config = { - application: { - applicationName: "Cemetery Management System", - backgroundURL: "/images/cemetery-background.jpg", - logoURL: "/images/cemetery-logo.svg" - }, - aliases: { - lot: "Burial Site", - lots: "Burial Sites", - map: "Cemetery", - maps: "Cemeteries" - }, - settings: { - lotOccupancy: { - occupancyEndDateIsRequired: false - } - } +import { config as baseConfig } from "./config.base.js"; +export const config = Object.assign({}, baseConfig); +config.application = { + applicationName: "Cemetery Management System", + backgroundURL: "/images/cemetery-background.jpg", + logoURL: "/images/cemetery-logo.svg" }; +config.aliases.lot = "Burial Site"; +config.aliases.lots = "Burial Sites"; +config.aliases.map = "Cemetery"; +config.aliases.maps = "Cemeteries"; +config.settings.lotOccupancy.occupancyEndDateIsRequired = false; export default config; diff --git a/data/config.cemetery.ontario.js b/data/config.cemetery.ontario.js index 4ef92d60..ee321fe3 100644 --- a/data/config.cemetery.ontario.js +++ b/data/config.cemetery.ontario.js @@ -1,10 +1,6 @@ import { config as cemeteryConfig } from "./config.cemetery.js"; export const config = Object.assign({}, cemeteryConfig); config.settings.lotOccupancy.occupantProvinceDefault = "ON"; -config.settings.map = { - mapProvinceDefault: "ON" -}; -config.settings.fees = { - taxPercentageDefault: 13 -}; +config.settings.map.mapProvinceDefault = "ON"; +config.settings.fees.taxPercentageDefault = 13; export default config; diff --git a/data/config.cemetery.ontario.ts b/data/config.cemetery.ontario.ts index a7f51650..1eeae569 100644 --- a/data/config.cemetery.ontario.ts +++ b/data/config.cemetery.ontario.ts @@ -4,12 +4,8 @@ export const config = Object.assign({}, cemeteryConfig); config.settings.lotOccupancy.occupantProvinceDefault = "ON"; -config.settings.map = { - mapProvinceDefault: "ON" -}; +config.settings.map.mapProvinceDefault = "ON"; -config.settings.fees = { - taxPercentageDefault: 13 -}; +config.settings.fees.taxPercentageDefault = 13; export default config; \ No newline at end of file diff --git a/data/config.cemetery.ssm.js b/data/config.cemetery.ssm.js index 35223296..c65634ef 100644 --- a/data/config.cemetery.ssm.js +++ b/data/config.cemetery.ssm.js @@ -1,34 +1,30 @@ import { config as cemeteryConfig } from "./config.cemetery.ontario.js"; export const config = Object.assign({}, cemeteryConfig); -config.settings.lot = { - lotNamePattern: /^[A-Z]{2}(-\d*[A-Z]?){3,5}$/, - lotNameSortNameFunction: (lotName) => { - const numericPadding = "00000"; - const lotNameSplit = lotName.toUpperCase().split("-"); - const cleanLotNamePieces = []; - for (const lotNamePiece of lotNameSplit) { - let numericPiece = numericPadding; - let letterPiece = ""; - for (const letter of lotNamePiece) { - if (letterPiece === "" && "0123456789".includes(letter)) { - numericPiece += letter; - } - else { - letterPiece += letter; - } +config.aliases.externalReceiptNumber = "GP Receipt Number"; +config.settings.lot.lotNamePattern = /^[A-Z]{2}(-\d*[A-Z]?){3,5}$/; +config.settings.lot.lotNameSortNameFunction = (lotName) => { + const numericPadding = "00000"; + const lotNameSplit = lotName.toUpperCase().split("-"); + const cleanLotNamePieces = []; + for (const lotNamePiece of lotNameSplit) { + let numericPiece = numericPadding; + let letterPiece = ""; + for (const letter of lotNamePiece) { + if (letterPiece === "" && "0123456789".includes(letter)) { + numericPiece += letter; + } + else { + letterPiece += letter; } - cleanLotNamePieces.push(numericPiece.slice(-1 * numericPadding.length) + letterPiece); } - return cleanLotNamePieces.join("-"); + cleanLotNamePieces.push(numericPiece.slice(-1 * numericPadding.length) + letterPiece); } + return cleanLotNamePieces.join("-"); }; config.settings.lotOccupancy.occupantCityDefault = "Sault Ste. Marie"; config.settings.lotOccupancy.prints = ["pdf/ssm.cemetery.burialPermit"]; config.settings.map.mapCityDefault = "Sault Ste. Marie"; -config.settings.workOrders = { - workOrderNumberLength: 6, - workOrderMilestoneDateRecentBeforeDays: 7, - workOrderMilestoneDateRecentAfterDays: 30 -}; -config.aliases.externalReceiptNumber = "GP Receipt Number"; +config.settings.workOrders.workOrderNumberLength = 6; +config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7; +config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30; export default config; diff --git a/data/config.cemetery.ssm.ts b/data/config.cemetery.ssm.ts index 4b30ffdc..49d38514 100644 --- a/data/config.cemetery.ssm.ts +++ b/data/config.cemetery.ssm.ts @@ -4,9 +4,11 @@ import { export const config = Object.assign({}, cemeteryConfig); -config.settings.lot = { - lotNamePattern: /^[A-Z]{2}(-\d*[A-Z]?){3,5}$/, - lotNameSortNameFunction: (lotName) => { +config.aliases.externalReceiptNumber = "GP Receipt Number"; + +config.settings.lot.lotNamePattern = /^[A-Z]{2}(-\d*[A-Z]?){3,5}$/; + +config.settings.lot.lotNameSortNameFunction = (lotName) => { const numericPadding = "00000"; @@ -32,20 +34,15 @@ config.settings.lot = { } return cleanLotNamePieces.join("-"); - } -}; + }; config.settings.lotOccupancy.occupantCityDefault = "Sault Ste. Marie"; config.settings.lotOccupancy.prints = ["pdf/ssm.cemetery.burialPermit"]; config.settings.map.mapCityDefault = "Sault Ste. Marie"; -config.settings.workOrders = { - workOrderNumberLength: 6, - workOrderMilestoneDateRecentBeforeDays: 7, - workOrderMilestoneDateRecentAfterDays: 30 -}; - -config.aliases.externalReceiptNumber = "GP Receipt Number"; +config.settings.workOrders.workOrderNumberLength = 6; +config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7; +config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30; export default config; \ No newline at end of file diff --git a/data/config.cemetery.ts b/data/config.cemetery.ts index d9bb5e99..33692b01 100644 --- a/data/config.cemetery.ts +++ b/data/config.cemetery.ts @@ -1,22 +1,18 @@ -import type { Config } from "../types/configTypes"; +import { config as baseConfig } from "./config.base.js"; -export const config: Config = { - application: { - applicationName: "Cemetery Management System", - backgroundURL: "/images/cemetery-background.jpg", - logoURL: "/images/cemetery-logo.svg" - }, - aliases: { - lot: "Burial Site", - lots: "Burial Sites", - map: "Cemetery", - maps: "Cemeteries" - }, - settings: { - lotOccupancy: { - occupancyEndDateIsRequired: false - } - } +export const config = Object.assign({}, baseConfig); + +config.application = { + applicationName: "Cemetery Management System", + backgroundURL: "/images/cemetery-background.jpg", + logoURL: "/images/cemetery-logo.svg" }; -export default config; \ No newline at end of file +config.aliases.lot = "Burial Site"; +config.aliases.lots = "Burial Sites"; +config.aliases.map = "Cemetery"; +config.aliases.maps = "Cemeteries"; + +config.settings.lotOccupancy.occupancyEndDateIsRequired = false; + +export default config; diff --git a/types/configTypes.d.ts b/types/configTypes.d.ts index a153b2d6..46ed8f5c 100644 --- a/types/configTypes.d.ts +++ b/types/configTypes.d.ts @@ -1,19 +1,19 @@ export interface Config { - application?: ConfigApplication; - session?: ConfigSession; - reverseProxy?: { - disableCompression: boolean; - disableEtag: boolean; - urlPrefix: string; + application: ConfigApplication; + session: ConfigSession; + reverseProxy: { + disableCompression?: boolean; + disableEtag?: boolean; + urlPrefix?: string; }; activeDirectory?: ConfigActiveDirectory; - users?: { + users: { testing?: string[]; canLogin?: string[]; canUpdate?: string[]; isAdmin?: string[]; }; - aliases?: { + aliases: { lot?: string; lots?: string; map?: string; @@ -24,32 +24,33 @@ export interface Config { occupants?: string; externalReceiptNumber?: string; }; - settings?: { - fees?: { + settings: { + fees: { taxPercentageDefault?: number; }; - map?: { + map: { mapCityDefault?: string; mapProvinceDefault?: string; }; - lot?: { + lot: { lotNamePattern?: RegExp; lotNameSortNameFunction?: (lotName: string) => string; }; - lotOccupancy?: { + lotOccupancy: { lotIdIsRequired?: boolean; occupancyEndDateIsRequired?: boolean; occupantCityDefault?: string; occupantProvinceDefault?: string; prints?: string[]; }; - workOrders?: { + workOrders: { workOrderNumberLength?: number; workOrderMilestoneDateRecentBeforeDays?: number; workOrderMilestoneDateRecentAfterDays?: number; calendarEmailAddress?: string; + prints?: string[]; }; - adminCleanup?: { + adminCleanup: { recordDeleteAgeDays?: number; }; }; diff --git a/types/configTypes.ts b/types/configTypes.ts index 8316bcc4..2d980965 100644 --- a/types/configTypes.ts +++ b/types/configTypes.ts @@ -1,19 +1,19 @@ export interface Config { - application?: ConfigApplication; - session?: ConfigSession; - reverseProxy?: { - disableCompression: boolean; - disableEtag: boolean; - urlPrefix: string; + application: ConfigApplication; + session: ConfigSession; + reverseProxy: { + disableCompression?: boolean; + disableEtag?: boolean; + urlPrefix?: string; }; activeDirectory?: ConfigActiveDirectory; - users?: { + users: { testing?: string[]; canLogin?: string[]; canUpdate?: string[]; isAdmin?: string[]; }; - aliases?: { + aliases: { lot?: string; lots?: string; map?: string; @@ -24,32 +24,33 @@ export interface Config { occupants?: string; externalReceiptNumber?: string; }; - settings?: { - fees?: { + settings: { + fees: { taxPercentageDefault?: number; }; - map?: { + map: { mapCityDefault?: string; mapProvinceDefault?: string; }; - lot?: { + lot: { lotNamePattern?: RegExp; lotNameSortNameFunction?: (lotName: string) => string; }; - lotOccupancy?: { + lotOccupancy: { lotIdIsRequired?: boolean; occupancyEndDateIsRequired?: boolean; occupantCityDefault?: string; occupantProvinceDefault?: string; prints?: string[]; }; - workOrders?: { + workOrders: { workOrderNumberLength?: number; workOrderMilestoneDateRecentBeforeDays?: number; workOrderMilestoneDateRecentAfterDays?: number; calendarEmailAddress?: string; + prints?: string[]; }; - adminCleanup?: { + adminCleanup: { recordDeleteAgeDays?: number; }; };