equipped 5.0.21 → 5.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [5.0.22](https://github.com/kevinand11/equipped/compare/v5.0.21...v5.0.22) (2025-07-19)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * return type of createServer ([6622adc](https://github.com/kevinand11/equipped/commit/6622adc01e9391e22d98c6af6528f82933c384f2))
11
+
5
12
  ### [5.0.21](https://github.com/kevinand11/equipped/compare/v5.0.20...v5.0.21) (2025-07-13)
6
13
 
7
14
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/instance/index.ts","/home/runner/work/equipped/equipped/dist/cjs/instance/index.cjs"],"names":[],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/instance/index.cjs","sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input)\n\t}\n}\n",null]}
1
+ {"version":3,"sources":["../../../src/instance/index.ts","/home/runner/work/equipped/equipped/dist/cjs/instance/index.cjs"],"names":[],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/instance/index.cjs","sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tServerTypes,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input) as ServerTypes[T['type']]\n\t}\n}\n",null]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/instance/index.ts"],"names":["Instance","#instance","settings","#registerOnExitHandler","runHooks","#hooks","error","EquippedError","v","envValidity"],"mappings":"AAAA,iNAAsE,8CAIrE,oDAcQ,sDAKC,MACA,CAAA,CAAA,MAED,CAAA,CAAA,CAAA,MAAgC,CACvCA,CAAAA,CAASC,CAAAA,CAAAA,CAAY,WACL,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOC,IAC9B,CAAA,IAAK,CAAA,QAAe,CAAA,MAAU,CAAA,MAAK,CAAA,CAAA,CAAA,CAAA,IAAS,CAAG,GAC/CF,CAASG,CAAAA,CAAAA,SAGV,CAAA,IAAA,CAAA,QAAkC,CAAA,GACjC,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,aAAc,CAAA,CAAI,CAAA,CAAA,CAAA,GAAU,CAAA,CAAE,MAAQ,CAC/C,IAEA,CAAA,QAAM,CAAQ,GACb,CAAI,IACH,CAAA,CAAA,CAAMC,CAAAA,IAAkBC,CAAAA,CAAO,CAAA,CAAA,MAAa,KAC5C,CAAA,CAAA,CAAA,GAAeL,CAAAA,MAAgB,mCAAA,iBAAA,CAAA,CAAA,CAAY,CAAC,CAAC,KAC9C,SAAA,CAASM,GAAAA,CAAO,CACfN,MAAS,mCAAA,iBAAM,CAAA,CAAA,CAAA,CAAIO,CAAAA,KAAc,SAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAA2B,CAAC,IAAS,+BACvE,CACD,yBAGqBC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAmB,IAAQ,CAAA,CAAA,CAAG,CAAA,MACpD,CAAA,CAAKC,WAAAA,CAAY,QAChBT,CAAS,CAAA,CAAA,OACR,CAAIO,GAAc,CAAA,CAAA,OAAA,CAAA,CAAA,KAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,+BAAA,CAAA,CAAA;AAAA,EAAwCE,CAAAA,CAAY,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CAAA;AAYR","file":"/home/runner/work/equipped/equipped/dist/cjs/instance/index.min.cjs","sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input)\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/instance/index.ts"],"names":["Instance","#instance","settings","#registerOnExitHandler","runHooks","#hooks","error","EquippedError","v","envValidity"],"mappings":"AAAA,iNAAsE,8CAIrE,oDAeQ,sDAKC,MACA,CAAA,CAAA,MAED,CAAA,CAAA,CAAA,MAAgC,CACvCA,CAAAA,CAASC,CAAAA,CAAAA,CAAY,WACL,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOC,IAC9B,CAAA,IAAK,CAAA,QAAe,CAAA,MAAU,CAAA,MAAK,CAAA,CAAA,CAAA,CAAA,IAAS,CAAG,GAC/CF,CAASG,CAAAA,CAAAA,SAGV,CAAA,IAAA,CAAA,QAAkC,CAAA,GACjC,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,aAAc,CAAA,CAAI,CAAA,CAAA,CAAA,GAAU,CAAA,CAAE,MAAQ,CAC/C,IAEA,CAAA,QAAM,CAAQ,GACb,CAAI,IACH,CAAA,CAAA,CAAMC,CAAAA,IAAkBC,CAAAA,CAAO,CAAA,CAAA,MAAa,KAC5C,CAAA,CAAA,CAAA,GAAeL,CAAAA,MAAgB,mCAAA,iBAAA,CAAA,CAAA,CAAY,CAAC,CAAC,KAC9C,SAAA,CAASM,GAAAA,CAAO,CACfN,MAAS,mCAAA,iBAAM,CAAA,CAAA,CAAA,CAAIO,CAAAA,KAAc,SAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAA2B,CAAC,IAAS,+BACvE,CACD,yBAGqBC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAmB,IAAQ,CAAA,CAAA,CAAG,CAAA,MACpD,CAAA,CAAKC,WAAAA,CAAY,QAChBT,CAAS,CAAA,CAAA,OACR,CAAIO,GAAc,CAAA,CAAA,OAAA,CAAA,CAAA,KAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,+BAAA,CAAA,CAAA;AAAA,EAAwCE,CAAAA,CAAY,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CAAA;AAYR","file":"/home/runner/work/equipped/equipped/dist/cjs/instance/index.min.cjs","sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tServerTypes,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input) as ServerTypes[T['type']]\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import{v as r}from"valleyed";import{runHooks as a}from "./hooks.min.mjs";import{cachePipe as n,dbPipe as p,eventBusPipe as c,instanceSettingsPipe as u,jobsPipe as l,logPipe as y,serverTypePipe as d}from "./settings.min.mjs";import{EquippedError as i}from "../errors/index.min.mjs";class s{static#t;static#e={};settings;log;constructor(e){s.#t=this,this.settings=Object.freeze(e),this.log=s.createLog(this.settings.log),s.#s()}getScopedName(e,t="."){return[this.settings.app.name,e].join(t)}async start(){try{await a(s.#e.setup??[]),await a(s.#e.start??[])}catch(e){s.crash(new i("Error starting instance",{},e))}}static envs(e){const t=r.validate(e,process.env);return t.valid||s.crash(new i(`Environment variables are not valid
1
+ import{v as r}from"valleyed";import{runHooks as a}from "./hooks.min.mjs";import{cachePipe as n,dbPipe as p,eventBusPipe as c,instanceSettingsPipe as u,jobsPipe as y,logPipe as l,serverTypePipe as d}from "./settings.min.mjs";import{EquippedError as i}from "../errors/index.min.mjs";class s{static#t;static#e={};settings;log;constructor(e){s.#t=this,this.settings=Object.freeze(e),this.log=s.createLog(this.settings.log),s.#s()}getScopedName(e,t="."){return[this.settings.app.name,e].join(t)}async start(){try{await a(s.#e.setup??[]),await a(s.#e.start??[])}catch(e){s.crash(new i("Error starting instance",{},e))}}static envs(e){const t=r.validate(e,process.env);return t.valid||s.crash(new i(`Environment variables are not valid
2
2
  ${t.error.toString()}`,{messages:t.error.messages})),t.value}static create(e){const t=r.validate(u(),e);return t.valid||s.crash(new i(`Settings are not valid
3
- ${t.error.toString()}`,{messages:t.error.messages})),new s(t.value)}static get(){return s.#t?s.#t:s.crash(new i("Has not been initialized. Make sure an instance has been created before you get an instance",{}))}static on(e,t,o){s.#e[e]??=[],s.#e[e].push({cb:t,order:o})}static#s(){Object.entries({SIGHUP:1,SIGINT:2,SIGTERM:15}).forEach(([t,o])=>{process.on(t,async()=>{await a(s.#e.close??[],()=>{}),process.exit(128+o)})})}static resolveBeforeCrash(e){const t=e();return s.on("close",async()=>await t,10),t}static crash(e){console.error(e),process.exit(1)}static createLog(e){return r.assert(y,e)}static createCache(e){return r.assert(n,e)}static createJobs(e){return r.assert(l,e)}static createEventBus(e){return r.assert(c,e)}static createDb(e){return r.assert(p,e)}createServer(e){return r.assert(d,e)}}export{s as Instance};
3
+ ${t.error.toString()}`,{messages:t.error.messages})),new s(t.value)}static get(){return s.#t?s.#t:s.crash(new i("Has not been initialized. Make sure an instance has been created before you get an instance",{}))}static on(e,t,o){s.#e[e]??=[],s.#e[e].push({cb:t,order:o})}static#s(){Object.entries({SIGHUP:1,SIGINT:2,SIGTERM:15}).forEach(([t,o])=>{process.on(t,async()=>{await a(s.#e.close??[],()=>{}),process.exit(128+o)})})}static resolveBeforeCrash(e){const t=e();return s.on("close",async()=>await t,10),t}static crash(e){console.error(e),process.exit(1)}static createLog(e){return r.assert(l,e)}static createCache(e){return r.assert(n,e)}static createJobs(e){return r.assert(y,e)}static createEventBus(e){return r.assert(c,e)}static createDb(e){return r.assert(p,e)}createServer(e){return r.assert(d,e)}}export{s as Instance};
4
4
  //# sourceMappingURL=index.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/instance/index.ts"],"sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input)\n\t}\n}\n"],"mappings":"AAAA,OAA6D,KAAAA,MAAS,WAEtE,OAAwC,YAAAC,MAAgB,UACxD,OACC,aAAAC,EAEA,UAAAC,EAEA,gBAAAC,EAEA,wBAAAC,EACA,YAAAC,EAEA,WAAAC,EACA,kBAAAC,MAGM,aACP,OAAS,iBAAAC,MAAqB,YAEvB,MAAMC,CAAS,CACrB,MAAOC,GACP,MAAOC,GAAmD,CAAC,EAClD,SACA,IAED,YAAYC,EAAoB,CACvCH,EAASC,GAAY,KACrB,KAAK,SAAW,OAAO,OAAOE,CAAQ,EACtC,KAAK,IAAMH,EAAS,UAAU,KAAK,SAAS,GAAG,EAC/CA,EAASI,GAAuB,CACjC,CAEA,cAAcC,EAAcC,EAAM,IAAK,CACtC,MAAO,CAAC,KAAK,SAAS,IAAI,KAAMD,CAAI,EAAE,KAAKC,CAAG,CAC/C,CAEA,MAAM,OAAQ,CACb,GAAI,CACH,MAAMf,EAASS,EAASE,GAAO,OAAY,CAAC,CAAC,EAC7C,MAAMX,EAASS,EAASE,GAAO,OAAY,CAAC,CAAC,CAC9C,OAASK,EAAO,CACfP,EAAS,MAAM,IAAID,EAAc,0BAA2B,CAAC,EAAGQ,CAAK,CAAC,CACvE,CACD,CAEA,OAAO,KAAuBC,EAA+B,CAC5D,MAAMC,EAAcnB,EAAE,SAASkB,EAAU,QAAQ,GAAG,EACpD,OAAKC,EAAY,OAChBT,EAAS,MACR,IAAID,EAAc;AAAA,EAAwCU,EAAY,MAAM,SAAS,CAAC,GAAI,CACzF,SAAUA,EAAY,MAAM,QAC7B,CAAC,CACF,EAEMA,EAAY,KACpB,CAEA,OAAO,OAAON,EAAyB,CACtC,MAAMO,EAAmBpB,EAAE,SAASK,EAAqB,EAAGQ,CAAQ,EACpE,OAAKO,EAAiB,OACrBV,EAAS,MACR,IAAID,EAAc;AAAA,EAA2BW,EAAiB,MAAM,SAAS,CAAC,GAAI,CACjF,SAAUA,EAAiB,MAAM,QAClC,CAAC,CACF,EAEM,IAAIV,EAASU,EAAiB,KAAK,CAC3C,CAEA,OAAO,KAAM,CACZ,OAAKV,EAASC,GAIPD,EAASC,GAHRD,EAAS,MACf,IAAID,EAAc,8FAA+F,CAAC,CAAC,CACpH,CAEF,CAEA,OAAO,GAAGY,EAAkBC,EAAYC,EAAe,CACtDb,EAASE,GAAOS,CAAK,IAAM,CAAC,EAC5BX,EAASE,GAAOS,CAAK,EAAE,KAAK,CAAE,GAAAC,EAAI,MAAAC,CAAM,CAAC,CAC1C,CAEA,MAAOT,IAAyB,CAO/B,OAAO,QANS,CACf,OAAQ,EACR,OAAQ,EACR,QAAS,EACV,CAEsB,EAAE,QAAQ,CAAC,CAACU,EAAQC,CAAI,IAAM,CACnD,QAAQ,GAAGD,EAAQ,SAAY,CAC9B,MAAMvB,EAASS,EAASE,GAAO,OAAY,CAAC,EAAG,IAAM,CAAC,CAAC,EACvD,QAAQ,KAAK,IAAMa,CAAI,CACxB,CAAC,CACF,CAAC,CACF,CAEA,OAAO,mBAAsBH,EAAsB,CAClD,MAAMI,EAAQJ,EAAG,EACjB,OAAAZ,EAAS,GAAG,QAAS,SAAY,MAAMgB,EAAO,EAAE,EACzCA,CACR,CAEA,OAAO,MAAMT,EAA6B,CAEzC,QAAQ,MAAMA,CAAK,EACnB,QAAQ,KAAK,CAAC,CACf,CAEA,OAAO,UAA+CU,EAAiC,CACtF,OAAO3B,EAAE,OAAOO,EAASoB,CAAK,CAC/B,CAEA,OAAO,YAAmDA,EAAiC,CAC1F,OAAO3B,EAAE,OAAOE,EAAWyB,CAAK,CACjC,CAEA,OAAO,WAAiDA,EAAiC,CACxF,OAAO3B,EAAE,OAAOM,EAAUqB,CAAK,CAChC,CAEA,OAAO,eAAyDA,EAAiC,CAChG,OAAO3B,EAAE,OAAOI,EAAcuB,CAAK,CACpC,CAEA,OAAO,SAA6CA,EAAiC,CACpF,OAAO3B,EAAE,OAAOG,EAAQwB,CAAK,CAC9B,CAEA,aAAyDA,EAAiC,CACzF,OAAO3B,EAAE,OAAOQ,EAAgBmB,CAAK,CACtC,CACD","names":["v","runHooks","cachePipe","dbPipe","eventBusPipe","instanceSettingsPipe","jobsPipe","logPipe","serverTypePipe","EquippedError","Instance","#instance","#hooks","settings","#registerOnExitHandler","name","key","error","envsPipe","envValidity","settingsValidity","event","cb","order","signal","code","value","input"]}
1
+ {"version":3,"sources":["../../../src/instance/index.ts"],"sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tServerTypes,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input) as ServerTypes[T['type']]\n\t}\n}\n"],"mappings":"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","names":["v","runHooks","cachePipe","dbPipe","eventBusPipe","instanceSettingsPipe","jobsPipe","logPipe","serverTypePipe","EquippedError","Instance","#instance","#hooks","settings","#registerOnExitHandler","name","key","error","envsPipe","envValidity","settingsValidity","event","cb","order","signal","code","value","input"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/instance/index.ts"],"sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input)\n\t}\n}\n"],"mappings":"AAAA,SAA6D,SAAS;AAEtE,SAAwC,gBAAgB;AACxD;AAAA,EACC;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OAGM;AACP,SAAS,qBAAqB;AAEvB,MAAM,SAAS;AAAA,EACrB,OAAO;AAAA,EACP,OAAO,SAAmD,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EAED,YAAY,UAAoB;AACvC,aAAS,YAAY;AACrB,SAAK,WAAW,OAAO,OAAO,QAAQ;AACtC,SAAK,MAAM,SAAS,UAAU,KAAK,SAAS,GAAG;AAC/C,aAAS,uBAAuB;AAAA,EACjC;AAAA,EAEA,cAAc,MAAc,MAAM,KAAK;AACtC,WAAO,CAAC,KAAK,SAAS,IAAI,MAAM,IAAI,EAAE,KAAK,GAAG;AAAA,EAC/C;AAAA,EAEA,MAAM,QAAQ;AACb,QAAI;AACH,YAAM,SAAS,SAAS,OAAO,OAAO,KAAK,CAAC,CAAC;AAC7C,YAAM,SAAS,SAAS,OAAO,OAAO,KAAK,CAAC,CAAC;AAAA,IAC9C,SAAS,OAAO;AACf,eAAS,MAAM,IAAI,cAAc,2BAA2B,CAAC,GAAG,KAAK,CAAC;AAAA,IACvE;AAAA,EACD;AAAA,EAEA,OAAO,KAAuB,UAA+B;AAC5D,UAAM,cAAc,EAAE,SAAS,UAAU,QAAQ,GAAG;AACpD,QAAI,CAAC,YAAY,OAAO;AACvB,eAAS;AAAA,QACR,IAAI,cAAc;AAAA,EAAwC,YAAY,MAAM,SAAS,CAAC,IAAI;AAAA,UACzF,UAAU,YAAY,MAAM;AAAA,QAC7B,CAAC;AAAA,MACF;AAAA,IACD;AACA,WAAO,YAAY;AAAA,EACpB;AAAA,EAEA,OAAO,OAAO,UAAyB;AACtC,UAAM,mBAAmB,EAAE,SAAS,qBAAqB,GAAG,QAAQ;AACpE,QAAI,CAAC,iBAAiB,OAAO;AAC5B,eAAS;AAAA,QACR,IAAI,cAAc;AAAA,EAA2B,iBAAiB,MAAM,SAAS,CAAC,IAAI;AAAA,UACjF,UAAU,iBAAiB,MAAM;AAAA,QAClC,CAAC;AAAA,MACF;AAAA,IACD;AACA,WAAO,IAAI,SAAS,iBAAiB,KAAK;AAAA,EAC3C;AAAA,EAEA,OAAO,MAAM;AACZ,QAAI,CAAC,SAAS;AACb,aAAO,SAAS;AAAA,QACf,IAAI,cAAc,+FAA+F,CAAC,CAAC;AAAA,MACpH;AACD,WAAO,SAAS;AAAA,EACjB;AAAA,EAEA,OAAO,GAAG,OAAkB,IAAY,OAAe;AACtD,aAAS,OAAO,KAAK,MAAM,CAAC;AAC5B,aAAS,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC;AAAA,EAC1C;AAAA,EAEA,OAAO,yBAAyB;AAC/B,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,IACV;AAEA,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM;AACnD,cAAQ,GAAG,QAAQ,YAAY;AAC9B,cAAM,SAAS,SAAS,OAAO,OAAO,KAAK,CAAC,GAAG,MAAM;AAAA,QAAC,CAAC;AACvD,gBAAQ,KAAK,MAAM,IAAI;AAAA,MACxB,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AAAA,EAEA,OAAO,mBAAsB,IAAsB;AAClD,UAAM,QAAQ,GAAG;AACjB,aAAS,GAAG,SAAS,YAAY,MAAM,OAAO,EAAE;AAChD,WAAO;AAAA,EACR;AAAA,EAEA,OAAO,MAAM,OAA6B;AAEzC,YAAQ,MAAM,KAAK;AACnB,YAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAEA,OAAO,UAA+C,OAAiC;AACtF,WAAO,EAAE,OAAO,SAAS,KAAK;AAAA,EAC/B;AAAA,EAEA,OAAO,YAAmD,OAAiC;AAC1F,WAAO,EAAE,OAAO,WAAW,KAAK;AAAA,EACjC;AAAA,EAEA,OAAO,WAAiD,OAAiC;AACxF,WAAO,EAAE,OAAO,UAAU,KAAK;AAAA,EAChC;AAAA,EAEA,OAAO,eAAyD,OAAiC;AAChG,WAAO,EAAE,OAAO,cAAc,KAAK;AAAA,EACpC;AAAA,EAEA,OAAO,SAA6C,OAAiC;AACpF,WAAO,EAAE,OAAO,QAAQ,KAAK;AAAA,EAC9B;AAAA,EAEA,aAAyD,OAAiC;AACzF,WAAO,EAAE,OAAO,gBAAgB,KAAK;AAAA,EACtC;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../src/instance/index.ts"],"sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tServerTypes,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input) as ServerTypes[T['type']]\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -1,23 +1,23 @@
1
1
  export { Instance } from './instance/index.js';
2
+ import 'pino';
2
3
  import 'valleyed';
3
- import './requests-C80D2uPT.js';
4
- import 'stream';
4
+ import './kafka-C7Cf9HIm.js';
5
5
  import './overrides-6Hxg764S.js';
6
- import './types/index.js';
6
+ import './events/index.js';
7
+ import './cache/index.js';
8
+ import './base-8yVXb67P.js';
9
+ import 'ioredis';
10
+ import './db-BSRe9TQ7.js';
11
+ import 'mongodb';
12
+ import './core-vQHxNQYK.js';
13
+ import './jobs/index.js';
7
14
  import './tokens-Di0pgCG9.js';
8
15
  import 'express';
9
16
  import 'fastify';
10
- import './kafka-C7Cf9HIm.js';
11
17
  import 'supertest/lib/agent';
12
18
  import 'http';
13
19
  import 'supertest';
20
+ import './requests-C80D2uPT.js';
21
+ import 'stream';
22
+ import './types/index.js';
14
23
  import 'socket.io';
15
- import './core-vQHxNQYK.js';
16
- import 'mongodb';
17
- import './base-8yVXb67P.js';
18
- import 'pino';
19
- import './events/index.js';
20
- import './cache/index.js';
21
- import 'ioredis';
22
- import './db-BSRe9TQ7.js';
23
- import './jobs/index.js';
@@ -1,26 +1,26 @@
1
+ import * as pino from 'pino';
1
2
  import * as valleyed from 'valleyed';
2
3
  import { PipeOutput, ConditionalObjectKeys, PipeInput, Pipe } from 'valleyed';
3
- import { E as EquippedError } from '../requests-C80D2uPT.js';
4
- import { b as BaseTokensUtility, B as BaseApiKeysUtility, E as ExpressServer, F as FastifyServer } from '../tokens-Di0pgCG9.js';
5
- import * as pino from 'pino';
6
4
  import { K as KafkaEventBus, E as EventBus } from '../kafka-C7Cf9HIm.js';
7
5
  import { RabbitMQEventBus } from '../events/index.js';
8
6
  import { InMemoryCache, RedisCache } from '../cache/index.js';
9
7
  import { M as MongoDb } from '../db-BSRe9TQ7.js';
10
8
  import { RedisJob } from '../jobs/index.js';
11
- import 'stream';
9
+ import { b as BaseTokensUtility, B as BaseApiKeysUtility, E as ExpressServer, F as FastifyServer } from '../tokens-Di0pgCG9.js';
10
+ import { E as EquippedError } from '../requests-C80D2uPT.js';
12
11
  import '../overrides-6Hxg764S.js';
13
- import '../types/index.js';
12
+ import '../base-8yVXb67P.js';
13
+ import 'ioredis';
14
+ import 'mongodb';
15
+ import '../core-vQHxNQYK.js';
14
16
  import 'express';
15
17
  import 'fastify';
16
18
  import 'supertest/lib/agent';
17
19
  import 'http';
18
20
  import 'supertest';
19
21
  import 'socket.io';
20
- import '../core-vQHxNQYK.js';
21
- import 'mongodb';
22
- import '../base-8yVXb67P.js';
23
- import 'ioredis';
22
+ import 'stream';
23
+ import '../types/index.js';
24
24
 
25
25
  type HookEvent = 'setup' | 'start' | 'close';
26
26
  type HookCb = Promise<unknown | void> | (() => void | unknown | Promise<void | unknown>);
@@ -179,6 +179,10 @@ declare const dbPipe: valleyed.Pipe<{
179
179
  eventBus: KafkaEventBus;
180
180
  } | undefined;
181
181
  }, MongoDb>;
182
+ type ServerTypes = {
183
+ express: ExpressServer;
184
+ fastify: FastifyServer;
185
+ };
182
186
  declare const serverTypePipe: valleyed.Pipe<{
183
187
  type: "fastify" | "express";
184
188
  port: number;
@@ -203,7 +207,7 @@ declare class Instance {
203
207
  static createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>): JobTypes[T["type"]];
204
208
  static createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>): EventBusTypes[T["type"]];
205
209
  static createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>): DbTypes[T["db"]["type"]];
206
- createServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>): ExpressServer | FastifyServer;
210
+ createServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>): ServerTypes[T["type"]];
207
211
  }
208
212
 
209
213
  export { Instance };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "equipped",
3
- "version": "5.0.21",
3
+ "version": "5.0.22",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "type": "module",