@fjell/express-router 4.4.3 → 4.4.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ItemRouter.cjs","sources":["../src/ItemRouter.ts"],"sourcesContent":["import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n ItemProperties,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { NotFoundError, Operations } from \"@fjell/lib\";\nimport deepmerge from \"deepmerge\";\nimport { Request, Response, Router } from \"express\";\nimport LibLogger from \"./logger\";\n\nexport type ItemRouterOptions = Record<string, never>;\n\nexport class ItemRouter<\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n protected lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;\n private keyType: S;\n protected options: ItemRouterOptions;\n private childRouters: Record<string, Router> = {};\n private logger;\n\n constructor(\n lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>,\n keyType: S,\n options: ItemRouterOptions = {}\n ) {\n this.lib = lib;\n this.keyType = keyType;\n this.options = options;\n this.logger = LibLogger.get(\"ItemRouter\", keyType);\n }\n\n public getPkType = (): S => {\n return this.keyType;\n }\n\n protected getPkParam = (): string => {\n return `${this.getPkType()}Pk`;\n }\n\n protected getLk(res: Response): LocKey<S> {\n return { kt: this.keyType, lk: res.locals[this.getPkParam()] };\n }\n\n // this is meant to be consumed by children routers\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n return [this.getLk(res)] as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getPk(res: Response): PriKey<S> {\n return cPK<S>(res.locals[this.getPkParam()], this.getPkType());\n }\n\n // Unless this is a contained router, the locations will always be an empty array.\n /* eslint-disable */\n protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [] {\n throw new Error('Method not implemented in an abstract router');\n }\n /* eslint-enable */\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5> {\n throw new Error('Method not implemented in an abstract router');\n }\n\n protected postItemAction = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.actions) {\n this.logger.error('Item Actions are not configured');\n res.status(500).json({ error: 'Item Actions are not configured' });\n return;\n }\n const action = this.lib.actions[actionKey];\n if (!action) {\n this.logger.error('Item Action is not configured', { actionKey });\n res.status(500).json({ error: 'Item Action is not configured' });\n return;\n }\n try {\n res.json(await this.lib.action(ik, actionKey, req.body));\n } catch (err: any) {\n this.logger.error('Error in Item Action', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected getItemFacet = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.facets) {\n this.logger.error('Item Facets are not configured');\n res.status(500).json({ error: 'Item Facets are not configured' });\n return;\n }\n const facet = this.lib.facets[facetKey];\n if (!facet) {\n this.logger.error('Item Facet is not configured', { facetKey });\n res.status(500).json({ error: 'Item Facet is not configured' });\n return;\n }\n try {\n res.json(await this.lib.facet(ik, facetKey, req.params));\n } catch (err: any) {\n this.logger.error('Error in Item Facet', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n private configure = (router: Router) => {\n this.logger.default('Configuring Router', { pkType: this.getPkType() });\n router.get('/', this.findItems);\n router.post('/', this.createItem);\n\n // const allActions = this.configureAllActions();\n // this.logger.debug('All Actions supplied to Router', { allActions });\n // if (allActions) {\n // Object.keys(allActions).forEach((actionKey) => {\n // this.logger.default('Configuring All Action', { actionKey });\n // // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n // router.post(`/${actionKey}`, ...allActions[actionKey]);\n // });\n // }\n\n const itemRouter = Router();\n itemRouter.get('/', this.getItem);\n itemRouter.put('/', this.updateItem);\n itemRouter.delete('/', this.deleteItem);\n\n this.logger.debug('Item Actions supplied to Router', { itemActions: this.lib.actions });\n if (this.lib.actions) {\n Object.keys(this.lib.actions).forEach((actionKey) => {\n this.logger.default('Configuring Item Action', { actionKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.post(`/${actionKey}`, this.postItemAction)\n });\n }\n\n this.logger.debug('Item Facets supplied to Router', { itemFacets: this.lib.facets });\n if (this.lib.facets) {\n Object.keys(this.lib.facets).forEach((facetKey) => {\n this.logger.default('Configuring Item Facet', { facetKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.get(`/${facetKey}`, this.getItemFacet)\n });\n }\n\n this.logger.default('Configuring Item Operations under PK Param', { pkParam: this.getPkParam() });\n router.use(`/:${this.getPkParam()}`, this.validatePrimaryKeyValue, itemRouter);\n\n if (this.childRouters) {\n this.configureChildRouters(itemRouter, this.childRouters);\n }\n return router;\n }\n\n private validatePrimaryKeyValue = (req: Request, res: Response, next: any) => {\n const pkParamValue = req.params[this.getPkParam()];\n if (this.validatePKParam(pkParamValue)) {\n res.locals[this.getPkParam()] = pkParamValue;\n next();\n } else {\n this.logger.error('Invalid Primary Key', { pkParamValue, path: req?.path });\n res.status(500).json({ error: 'Invalid Primary Key', path: req?.path });\n }\n }\n\n private configureChildRouters = (router: Router, childRouters: Record<string, Router>) => {\n for (const path in childRouters) {\n this.logger.default('Configuring Child Router at Path', { path });\n\n router.use(`/${path}`, childRouters[path]);\n }\n return router;\n }\n\n public addChildRouter = (path: string, router: Router) => {\n this.childRouters[path] = router;\n }\n\n /* istanbul ignore next */\n public getRouter(): Router {\n const router = Router();\n this.configure(router);\n return router;\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected createItem = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n\n // TODO: Probably a better way to do this, but this postCreate hook only needs the item.\n /* istanbul ignore next */\n public postCreateItem = async (item: Item<S, L1, L2, L3, L4, L5>): Promise<Item<S, L1, L2, L3, L4, L5>> => {\n this.logger.default('Post Create Item', { item });\n return item;\n };\n\n protected deleteItem = async (req: Request, res: Response): Promise<void> => {\n this.logger.default('Deleting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n const removedItem = await this.lib.remove(ik);\n const item = validatePK(removedItem, this.getPkType());\n res.json(item);\n };\n\n /* eslint-disable */\n /* istanbul ignore next */\n protected findItems = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n /* eslint-enable */\n\n protected getItem = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n try {\n // TODO: What error does validate PK throw, when can that fail?\n const item = validatePK(await this.lib.get(ik), this.getPkType());\n res.json(item);\n } catch (err: any) {\n if (err instanceof NotFoundError) {\n this.logger.error('Item Not Found', { ik, message: err?.message, stack: err?.stack });\n res.status(404).json({\n ik,\n message: \"Item Not Found\",\n });\n } else {\n this.logger.error('General Error', { ik, message: err?.message, stack: err?.stack });\n res.status(500).json({\n ik,\n message: \"General Error\",\n });\n }\n }\n }\n\n protected updateItem = async (req: Request, res: Response) => {\n this.logger.default('Updating Item',\n { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const itemToUpdate = this.convertDates(req.body as ItemProperties<S, L1, L2, L3, L4, L5>);\n const retItem = validatePK(await this.lib.update(ik, itemToUpdate), this.getPkType());\n res.json(retItem);\n };\n\n public convertDates = (item: Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5>):\n Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5> => {\n const events = item.events as Record<string, ItemEvent>;\n this.logger.default('Converting Dates', { item });\n if (events) {\n Object.keys(events).forEach((key: string) => {\n Object.assign(events, {\n [key]: deepmerge(events[key], { at: events[key].at ? new Date(events[key].at) : null })\n });\n });\n }\n Object.assign(item, { events });\n return item;\n };\n\n // TODO: Maybe just simplify this and require that everything is a UUID?\n /**\n * This method might be an annoyance, but we need to capture a few cases where someone passes\n * a PK parameter that has an odd string in it.\n *\n * @param pkParamValue The value of the primary key parameter\n * @returns if the value is valid.\n */\n protected validatePKParam = (pkParamValue: string): boolean => {\n let validPkParam = true;\n if (pkParamValue.length <= 0) {\n this.logger.error('Primary Key is an Empty String', { pkParamValue });\n validPkParam = false;\n } else if (pkParamValue === 'undefined') {\n this.logger.error('Primary Key is the string \\'undefined\\'', { pkParamValue });\n validPkParam = false;\n }\n return validPkParam;\n }\n\n}\n"],"names":["ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","childRouters","logger","postItemAction","req","default","query","params","ik","actionKey","path","substring","lastIndexOf","actions","error","status","json","action","body","err","message","stack","getItemFacet","facetKey","facets","facet","pkType","get","findItems","post","createItem","itemRouter","getItem","put","updateItem","delete","deleteItem","debug","itemActions","Object","keys","forEach","itemFacets","pkParam","use","validatePrimaryKeyValue","configureChildRouters","next","pkParamValue","validatePKParam","addChildRouter","postCreateItem","item","removedItem","remove","validatePK","NotFoundError","itemToUpdate","convertDates","retItem","update","events","key","assign","deepmerge","at","Date","validPkParam","length","LibLogger"],"mappings":"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"}
1
+ {"version":3,"file":"ItemRouter.cjs","sources":["../src/ItemRouter.ts"],"sourcesContent":["import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { Instance, NotFoundError } from \"@fjell/lib\";\nimport deepmerge from \"deepmerge\";\nimport { Request, Response, Router } from \"express\";\nimport LibLogger from \"./logger\";\n\nexport type ItemRouterOptions = Record<string, never>;\n\nexport class ItemRouter<\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n protected lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;\n private keyType: S;\n protected options: ItemRouterOptions;\n private childRouters: Record<string, Router> = {};\n protected logger;\n\n constructor(\n lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>,\n keyType: S,\n options: ItemRouterOptions = {}\n ) {\n this.lib = lib;\n this.keyType = keyType;\n this.options = options;\n this.logger = LibLogger.get(\"ItemRouter\", keyType);\n }\n\n public getPkType = (): S => {\n return this.keyType;\n }\n\n protected getPkParam = (): string => {\n return `${this.getPkType()}Pk`;\n }\n\n protected getLk(res: Response): LocKey<S> {\n return { kt: this.keyType, lk: res.locals[this.getPkParam()] };\n }\n\n // this is meant to be consumed by children routers\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n return [this.getLk(res)] as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getPk(res: Response): PriKey<S> {\n return cPK<S>(res.locals[this.getPkParam()], this.getPkType());\n }\n\n // Unless this is a contained router, the locations will always be an empty array.\n /* eslint-disable */\n protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [] {\n throw new Error('Method not implemented in an abstract router');\n }\n /* eslint-enable */\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5> {\n throw new Error('Method not implemented in an abstract router');\n }\n\n protected postAllAction = async (req: Request, res: Response) => {\n const libOptions = this.lib.definition.options;\n const libOperations = this.lib.operations;\n this.logger.debug('Posting All Action', { query: req?.query, params: req?.params, locals: res?.locals });\n const allActionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!libOptions.allActions) {\n this.logger.error('Item Actions are not configured');\n res.status(500).json({ error: 'Item Actions are not configured' });\n return;\n }\n const allAction = libOptions.allActions[allActionKey];\n if (!allAction) {\n this.logger.error('All Action is not configured', { allActionKey });\n res.status(500).json({ error: 'Item Action is not configured' });\n return;\n }\n try {\n res.json(await libOperations.allAction(allActionKey, req.body));\n } catch (err: any) {\n this.logger.error('Error in All Action', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected getAllFacet = async (req: Request, res: Response) => {\n const libOptions = this.lib.definition.options;\n const libOperations = this.lib.operations;\n this.logger.debug('Getting All Facet', { query: req?.query, params: req?.params, locals: res?.locals });\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!libOptions.allFacets) {\n this.logger.error('Item Facets are not configured');\n res.status(500).json({ error: 'Item Facets are not configured' });\n return;\n }\n const facet = libOptions.allFacets[facetKey];\n if (!facet) {\n this.logger.error('Item Facet is not configured', { facetKey });\n res.status(500).json({ error: 'Item Facet is not configured' });\n return;\n }\n try {\n const combinedQueryParams = { ...req.query, ...req.params } as Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>;\n res.json(await libOperations.allFacet(facetKey, combinedQueryParams));\n } catch (err: any) {\n this.logger.error('Error in All Facet', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected postItemAction = async (req: Request, res: Response) => {\n const libOptions = this.lib.definition.options;\n const libOperations = this.lib.operations;\n this.logger.debug('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!libOptions.actions) {\n this.logger.error('Item Actions are not configured');\n res.status(500).json({ error: 'Item Actions are not configured' });\n return;\n }\n const action = libOptions.actions[actionKey];\n if (!action) {\n this.logger.error('Item Action is not configured', { actionKey });\n res.status(500).json({ error: 'Item Action is not configured' });\n return;\n }\n try {\n res.json(await libOperations.action(ik, actionKey, req.body));\n } catch (err: any) {\n this.logger.error('Error in Item Action', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected getItemFacet = async (req: Request, res: Response) => {\n const libOptions = this.lib.definition.options;\n const libOperations = this.lib.operations;\n this.logger.debug('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!libOptions.facets) {\n this.logger.error('Item Facets are not configured');\n res.status(500).json({ error: 'Item Facets are not configured' });\n return;\n }\n const facet = libOptions.facets[facetKey];\n if (!facet) {\n this.logger.error('Item Facet is not configured', { facetKey });\n res.status(500).json({ error: 'Item Facet is not configured' });\n return;\n }\n try {\n const combinedQueryParams = { ...req.query, ...req.params } as Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>;\n res.json(await libOperations.facet(ik, facetKey, combinedQueryParams));\n } catch (err: any) {\n this.logger.error('Error in Item Facet', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n private configure = (router: Router) => {\n const libOptions = this.lib.definition.options;\n this.logger.debug('Configuring Router', { pkType: this.getPkType() });\n router.get('/', this.findItems);\n router.post('/', this.createItem);\n\n this.logger.default('All Actions supplied to Router', { allActions: libOptions.allActions });\n if (libOptions.allActions) {\n Object.keys(libOptions.allActions).forEach((actionKey) => {\n this.logger.debug('Configuring All Action %s', actionKey);\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n router.post(`/${actionKey}`, this.postAllAction);\n });\n }\n\n this.logger.default('All Facets supplied to Router', { allFacets: libOptions.allFacets });\n if (libOptions.allFacets) {\n Object.keys(libOptions.allFacets).forEach((facetKey) => {\n this.logger.debug('Configuring All Facet %s', facetKey);\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n router.get(`/${facetKey}`, this.getAllFacet);\n });\n }\n\n const itemRouter = Router();\n itemRouter.get('/', this.getItem);\n itemRouter.put('/', this.updateItem);\n itemRouter.delete('/', this.deleteItem);\n\n this.logger.default('Item Actions supplied to Router', { itemActions: libOptions.actions });\n if (libOptions.actions) {\n Object.keys(libOptions.actions).forEach((actionKey) => {\n this.logger.debug('Configuring Item Action %s', actionKey);\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.post(`/${actionKey}`, this.postItemAction)\n });\n }\n\n this.logger.default('Item Facets supplied to Router', { itemFacets: libOptions.facets });\n if (libOptions.facets) {\n Object.keys(libOptions.facets).forEach((facetKey) => {\n this.logger.debug('Configuring Item Facet %s', facetKey);\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.get(`/${facetKey}`, this.getItemFacet)\n });\n }\n\n this.logger.debug('Configuring Item Operations under PK Param %s', this.getPkParam());\n router.use(`/:${this.getPkParam()}`, this.validatePrimaryKeyValue, itemRouter);\n\n if (this.childRouters) {\n this.configureChildRouters(itemRouter, this.childRouters);\n }\n return router;\n }\n\n private validatePrimaryKeyValue = (req: Request, res: Response, next: any) => {\n const pkParamValue = req.params[this.getPkParam()];\n if (this.validatePKParam(pkParamValue)) {\n res.locals[this.getPkParam()] = pkParamValue;\n next();\n } else {\n this.logger.error('Invalid Primary Key', { pkParamValue, path: req?.originalUrl });\n res.status(500).json({ error: 'Invalid Primary Key', path: req?.originalUrl });\n }\n }\n\n private configureChildRouters = (router: Router, childRouters: Record<string, Router>) => {\n for (const path in childRouters) {\n this.logger.debug('Configuring Child Router at Path %s', path);\n\n router.use(`/${path}`, childRouters[path]);\n }\n return router;\n }\n\n public addChildRouter = (path: string, router: Router) => {\n this.childRouters[path] = router;\n }\n\n /* istanbul ignore next */\n public getRouter(): Router {\n const router = Router();\n this.configure(router);\n return router;\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected createItem = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n\n // TODO: Probably a better way to do this, but this postCreate hook only needs the item.\n /* istanbul ignore next */\n public postCreateItem = async (item: Item<S, L1, L2, L3, L4, L5>): Promise<Item<S, L1, L2, L3, L4, L5>> => {\n this.logger.debug('Post Create Item', { item });\n return item;\n };\n\n protected deleteItem = async (req: Request, res: Response): Promise<void> => {\n const libOperations = this.lib.operations;\n\n this.logger.debug('Deleting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n const removedItem = await libOperations.remove(ik);\n const item = validatePK(removedItem, this.getPkType());\n res.json(item);\n };\n\n /* eslint-disable */\n /* istanbul ignore next */\n protected findItems = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n /* eslint-enable */\n\n protected getItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.debug('Getting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n try {\n // TODO: What error does validate PK throw, when can that fail?\n const item = validatePK(await libOperations.get(ik), this.getPkType());\n res.json(item);\n } catch (err: any) {\n if (err instanceof NotFoundError) {\n this.logger.error('Item Not Found', { ik, message: err?.message, stack: err?.stack });\n res.status(404).json({\n ik,\n message: \"Item Not Found\",\n });\n } else {\n this.logger.error('General Error', { ik, message: err?.message, stack: err?.stack });\n res.status(500).json({\n ik,\n message: \"General Error\",\n });\n }\n }\n }\n\n protected updateItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.debug('Updating Item',\n { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const itemToUpdate = this.convertDates(req.body as Partial<Item<S, L1, L2, L3, L4, L5>>);\n const retItem = validatePK(await libOperations.update(ik, itemToUpdate), this.getPkType());\n res.json(retItem);\n };\n\n public convertDates = (item: Partial<Item<S, L1, L2, L3, L4, L5>>): Partial<Item<S, L1, L2, L3, L4, L5>> => {\n const events = item.events as Record<string, ItemEvent>;\n this.logger.debug('Converting Dates', { item });\n if (events) {\n Object.keys(events).forEach((key: string) => {\n Object.assign(events, {\n [key]: deepmerge(events[key], { at: events[key].at ? new Date(events[key].at) : null })\n });\n });\n }\n Object.assign(item, { events });\n return item;\n };\n\n // TODO: Maybe just simplify this and require that everything is a UUID?\n /**\n * This method might be an annoyance, but we need to capture a few cases where someone passes\n * a PK parameter that has an odd string in it.\n *\n * @param pkParamValue The value of the primary key parameter\n * @returns if the value is valid.\n */\n protected validatePKParam = (pkParamValue: string): boolean => {\n let validPkParam = true;\n if (pkParamValue.length <= 0) {\n this.logger.error('Primary Key is an Empty String', { pkParamValue });\n validPkParam = false;\n } else if (pkParamValue === 'undefined') {\n this.logger.error('Primary Key is the string \\'undefined\\'', { pkParamValue });\n validPkParam = false;\n }\n return validPkParam;\n }\n\n}\n"],"names":["ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","childRouters","logger","postAllAction","req","libOptions","definition","libOperations","operations","debug","query","params","allActionKey","path","substring","lastIndexOf","allActions","error","status","json","allAction","body","err","message","stack","getAllFacet","facetKey","allFacets","facet","combinedQueryParams","allFacet","postItemAction","ik","actionKey","actions","action","getItemFacet","facets","pkType","get","findItems","post","createItem","default","Object","keys","forEach","itemRouter","getItem","put","updateItem","delete","deleteItem","itemActions","itemFacets","use","validatePrimaryKeyValue","configureChildRouters","next","pkParamValue","validatePKParam","originalUrl","addChildRouter","postCreateItem","item","removedItem","remove","validatePK","NotFoundError","itemToUpdate","convertDates","retItem","update","events","key","assign","deepmerge","at","Date","validPkParam","length","LibLogger"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
- import { ComKey, Item, ItemProperties, LocKey, LocKeyArray, PriKey } from '@fjell/core';
2
- import { Operations } from '@fjell/lib';
1
+ import { ComKey, Item, LocKey, LocKeyArray, PriKey } from '@fjell/core';
2
+ import { Instance } from '@fjell/lib';
3
3
  import { Request, Response, Router } from 'express';
4
4
  export type ItemRouterOptions = Record<string, never>;
5
5
  export declare class ItemRouter<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> {
6
- protected lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;
6
+ protected lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;
7
7
  private keyType;
8
8
  protected options: ItemRouterOptions;
9
9
  private childRouters;
10
- private logger;
11
- constructor(lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>, keyType: S, options?: ItemRouterOptions);
10
+ protected logger: import('@fjell/logging').Logger;
11
+ constructor(lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>, keyType: S, options?: ItemRouterOptions);
12
12
  getPkType: () => S;
13
13
  protected getPkParam: () => string;
14
14
  protected getLk(res: Response): LocKey<S>;
@@ -16,6 +16,8 @@ export declare class ItemRouter<S extends string, L1 extends string = never, L2
16
16
  getPk(res: Response): PriKey<S>;
17
17
  protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [];
18
18
  protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>;
19
+ protected postAllAction: (req: Request, res: Response) => Promise<void>;
20
+ protected getAllFacet: (req: Request, res: Response) => Promise<void>;
19
21
  protected postItemAction: (req: Request, res: Response) => Promise<void>;
20
22
  protected getItemFacet: (req: Request, res: Response) => Promise<void>;
21
23
  private configure;
@@ -29,7 +31,7 @@ export declare class ItemRouter<S extends string, L1 extends string = never, L2
29
31
  protected findItems: (req: Request, res: Response) => Promise<void>;
30
32
  protected getItem: (req: Request, res: Response) => Promise<void>;
31
33
  protected updateItem: (req: Request, res: Response) => Promise<void>;
32
- convertDates: (item: Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5>) => Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5>;
34
+ convertDates: (item: Partial<Item<S, L1, L2, L3, L4, L5>>) => Partial<Item<S, L1, L2, L3, L4, L5>>;
33
35
  /**
34
36
  * This method might be an annoyance, but we need to capture a few cases where someone passes
35
37
  * a PK parameter that has an odd string in it.
@@ -58,22 +58,100 @@ class ItemRouter {
58
58
  _define_property(this, "getPkParam", ()=>{
59
59
  return `${this.getPkType()}Pk`;
60
60
  });
61
+ _define_property(this, "postAllAction", async (req, res)=>{
62
+ const libOptions = this.lib.definition.options;
63
+ const libOperations = this.lib.operations;
64
+ this.logger.debug('Posting All Action', {
65
+ query: req === null || req === void 0 ? void 0 : req.query,
66
+ params: req === null || req === void 0 ? void 0 : req.params,
67
+ locals: res === null || res === void 0 ? void 0 : res.locals
68
+ });
69
+ const allActionKey = req.path.substring(req.path.lastIndexOf('/') + 1);
70
+ if (!libOptions.allActions) {
71
+ this.logger.error('Item Actions are not configured');
72
+ res.status(500).json({
73
+ error: 'Item Actions are not configured'
74
+ });
75
+ return;
76
+ }
77
+ const allAction = libOptions.allActions[allActionKey];
78
+ if (!allAction) {
79
+ this.logger.error('All Action is not configured', {
80
+ allActionKey
81
+ });
82
+ res.status(500).json({
83
+ error: 'Item Action is not configured'
84
+ });
85
+ return;
86
+ }
87
+ try {
88
+ res.json(await libOperations.allAction(allActionKey, req.body));
89
+ } catch (err) {
90
+ this.logger.error('Error in All Action', {
91
+ message: err === null || err === void 0 ? void 0 : err.message,
92
+ stack: err === null || err === void 0 ? void 0 : err.stack
93
+ });
94
+ res.status(500).json(err);
95
+ }
96
+ });
97
+ _define_property(this, "getAllFacet", async (req, res)=>{
98
+ const libOptions = this.lib.definition.options;
99
+ const libOperations = this.lib.operations;
100
+ this.logger.debug('Getting All Facet', {
101
+ query: req === null || req === void 0 ? void 0 : req.query,
102
+ params: req === null || req === void 0 ? void 0 : req.params,
103
+ locals: res === null || res === void 0 ? void 0 : res.locals
104
+ });
105
+ const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);
106
+ if (!libOptions.allFacets) {
107
+ this.logger.error('Item Facets are not configured');
108
+ res.status(500).json({
109
+ error: 'Item Facets are not configured'
110
+ });
111
+ return;
112
+ }
113
+ const facet = libOptions.allFacets[facetKey];
114
+ if (!facet) {
115
+ this.logger.error('Item Facet is not configured', {
116
+ facetKey
117
+ });
118
+ res.status(500).json({
119
+ error: 'Item Facet is not configured'
120
+ });
121
+ return;
122
+ }
123
+ try {
124
+ const combinedQueryParams = {
125
+ ...req.query,
126
+ ...req.params
127
+ };
128
+ res.json(await libOperations.allFacet(facetKey, combinedQueryParams));
129
+ } catch (err) {
130
+ this.logger.error('Error in All Facet', {
131
+ message: err === null || err === void 0 ? void 0 : err.message,
132
+ stack: err === null || err === void 0 ? void 0 : err.stack
133
+ });
134
+ res.status(500).json(err);
135
+ }
136
+ });
61
137
  _define_property(this, "postItemAction", async (req, res)=>{
62
- this.logger.default('Getting Item', {
138
+ const libOptions = this.lib.definition.options;
139
+ const libOperations = this.lib.operations;
140
+ this.logger.debug('Getting Item', {
63
141
  query: req === null || req === void 0 ? void 0 : req.query,
64
142
  params: req === null || req === void 0 ? void 0 : req.params,
65
143
  locals: res === null || res === void 0 ? void 0 : res.locals
66
144
  });
67
145
  const ik = this.getIk(res);
68
146
  const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);
69
- if (!this.lib.actions) {
147
+ if (!libOptions.actions) {
70
148
  this.logger.error('Item Actions are not configured');
71
149
  res.status(500).json({
72
150
  error: 'Item Actions are not configured'
73
151
  });
74
152
  return;
75
153
  }
76
- const action = this.lib.actions[actionKey];
154
+ const action = libOptions.actions[actionKey];
77
155
  if (!action) {
78
156
  this.logger.error('Item Action is not configured', {
79
157
  actionKey
@@ -84,7 +162,7 @@ class ItemRouter {
84
162
  return;
85
163
  }
86
164
  try {
87
- res.json(await this.lib.action(ik, actionKey, req.body));
165
+ res.json(await libOperations.action(ik, actionKey, req.body));
88
166
  } catch (err) {
89
167
  this.logger.error('Error in Item Action', {
90
168
  message: err === null || err === void 0 ? void 0 : err.message,
@@ -94,21 +172,23 @@ class ItemRouter {
94
172
  }
95
173
  });
96
174
  _define_property(this, "getItemFacet", async (req, res)=>{
97
- this.logger.default('Getting Item', {
175
+ const libOptions = this.lib.definition.options;
176
+ const libOperations = this.lib.operations;
177
+ this.logger.debug('Getting Item', {
98
178
  query: req === null || req === void 0 ? void 0 : req.query,
99
179
  params: req === null || req === void 0 ? void 0 : req.params,
100
180
  locals: res === null || res === void 0 ? void 0 : res.locals
101
181
  });
102
182
  const ik = this.getIk(res);
103
183
  const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);
104
- if (!this.lib.facets) {
184
+ if (!libOptions.facets) {
105
185
  this.logger.error('Item Facets are not configured');
106
186
  res.status(500).json({
107
187
  error: 'Item Facets are not configured'
108
188
  });
109
189
  return;
110
190
  }
111
- const facet = this.lib.facets[facetKey];
191
+ const facet = libOptions.facets[facetKey];
112
192
  if (!facet) {
113
193
  this.logger.error('Item Facet is not configured', {
114
194
  facetKey
@@ -119,7 +199,11 @@ class ItemRouter {
119
199
  return;
120
200
  }
121
201
  try {
122
- res.json(await this.lib.facet(ik, facetKey, req.params));
202
+ const combinedQueryParams = {
203
+ ...req.query,
204
+ ...req.params
205
+ };
206
+ res.json(await libOperations.facet(ik, facetKey, combinedQueryParams));
123
207
  } catch (err) {
124
208
  this.logger.error('Error in Item Facet', {
125
209
  message: err === null || err === void 0 ? void 0 : err.message,
@@ -129,51 +213,57 @@ class ItemRouter {
129
213
  }
130
214
  });
131
215
  _define_property(this, "configure", (router)=>{
132
- this.logger.default('Configuring Router', {
216
+ const libOptions = this.lib.definition.options;
217
+ this.logger.debug('Configuring Router', {
133
218
  pkType: this.getPkType()
134
219
  });
135
220
  router.get('/', this.findItems);
136
221
  router.post('/', this.createItem);
137
- // const allActions = this.configureAllActions();
138
- // this.logger.debug('All Actions supplied to Router', { allActions });
139
- // if (allActions) {
140
- // Object.keys(allActions).forEach((actionKey) => {
141
- // this.logger.default('Configuring All Action', { actionKey });
142
- // // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
143
- // router.post(`/${actionKey}`, ...allActions[actionKey]);
144
- // });
145
- // }
222
+ this.logger.default('All Actions supplied to Router', {
223
+ allActions: libOptions.allActions
224
+ });
225
+ if (libOptions.allActions) {
226
+ Object.keys(libOptions.allActions).forEach((actionKey)=>{
227
+ this.logger.debug('Configuring All Action %s', actionKey);
228
+ // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
229
+ router.post(`/${actionKey}`, this.postAllAction);
230
+ });
231
+ }
232
+ this.logger.default('All Facets supplied to Router', {
233
+ allFacets: libOptions.allFacets
234
+ });
235
+ if (libOptions.allFacets) {
236
+ Object.keys(libOptions.allFacets).forEach((facetKey)=>{
237
+ this.logger.debug('Configuring All Facet %s', facetKey);
238
+ // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
239
+ router.get(`/${facetKey}`, this.getAllFacet);
240
+ });
241
+ }
146
242
  const itemRouter = Router();
147
243
  itemRouter.get('/', this.getItem);
148
244
  itemRouter.put('/', this.updateItem);
149
245
  itemRouter.delete('/', this.deleteItem);
150
- this.logger.debug('Item Actions supplied to Router', {
151
- itemActions: this.lib.actions
246
+ this.logger.default('Item Actions supplied to Router', {
247
+ itemActions: libOptions.actions
152
248
  });
153
- if (this.lib.actions) {
154
- Object.keys(this.lib.actions).forEach((actionKey)=>{
155
- this.logger.default('Configuring Item Action', {
156
- actionKey
157
- });
249
+ if (libOptions.actions) {
250
+ Object.keys(libOptions.actions).forEach((actionKey)=>{
251
+ this.logger.debug('Configuring Item Action %s', actionKey);
158
252
  // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
159
253
  itemRouter.post(`/${actionKey}`, this.postItemAction);
160
254
  });
161
255
  }
162
- this.logger.debug('Item Facets supplied to Router', {
163
- itemFacets: this.lib.facets
256
+ this.logger.default('Item Facets supplied to Router', {
257
+ itemFacets: libOptions.facets
164
258
  });
165
- if (this.lib.facets) {
166
- Object.keys(this.lib.facets).forEach((facetKey)=>{
167
- this.logger.default('Configuring Item Facet', {
168
- facetKey
169
- });
259
+ if (libOptions.facets) {
260
+ Object.keys(libOptions.facets).forEach((facetKey)=>{
261
+ this.logger.debug('Configuring Item Facet %s', facetKey);
170
262
  // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
171
263
  itemRouter.get(`/${facetKey}`, this.getItemFacet);
172
264
  });
173
265
  }
174
- this.logger.default('Configuring Item Operations under PK Param', {
175
- pkParam: this.getPkParam()
176
- });
266
+ this.logger.debug('Configuring Item Operations under PK Param %s', this.getPkParam());
177
267
  router.use(`/:${this.getPkParam()}`, this.validatePrimaryKeyValue, itemRouter);
178
268
  if (this.childRouters) {
179
269
  this.configureChildRouters(itemRouter, this.childRouters);
@@ -188,19 +278,17 @@ class ItemRouter {
188
278
  } else {
189
279
  this.logger.error('Invalid Primary Key', {
190
280
  pkParamValue,
191
- path: req === null || req === void 0 ? void 0 : req.path
281
+ path: req === null || req === void 0 ? void 0 : req.originalUrl
192
282
  });
193
283
  res.status(500).json({
194
284
  error: 'Invalid Primary Key',
195
- path: req === null || req === void 0 ? void 0 : req.path
285
+ path: req === null || req === void 0 ? void 0 : req.originalUrl
196
286
  });
197
287
  }
198
288
  });
199
289
  _define_property(this, "configureChildRouters", (router, childRouters)=>{
200
290
  for(const path in childRouters){
201
- this.logger.default('Configuring Child Router at Path', {
202
- path
203
- });
291
+ this.logger.debug('Configuring Child Router at Path %s', path);
204
292
  router.use(`/${path}`, childRouters[path]);
205
293
  }
206
294
  return router;
@@ -214,19 +302,20 @@ class ItemRouter {
214
302
  });
215
303
  // TODO: Probably a better way to do this, but this postCreate hook only needs the item.
216
304
  /* istanbul ignore next */ _define_property(this, "postCreateItem", async (item)=>{
217
- this.logger.default('Post Create Item', {
305
+ this.logger.debug('Post Create Item', {
218
306
  item
219
307
  });
220
308
  return item;
221
309
  });
222
310
  _define_property(this, "deleteItem", async (req, res)=>{
223
- this.logger.default('Deleting Item', {
311
+ const libOperations = this.lib.operations;
312
+ this.logger.debug('Deleting Item', {
224
313
  query: req.query,
225
314
  params: req.params,
226
315
  locals: res.locals
227
316
  });
228
317
  const ik = this.getIk(res);
229
- const removedItem = await this.lib.remove(ik);
318
+ const removedItem = await libOperations.remove(ik);
230
319
  const item = validatePK(removedItem, this.getPkType());
231
320
  res.json(item);
232
321
  });
@@ -234,7 +323,8 @@ class ItemRouter {
234
323
  throw new Error('Method not implemented in an abstract router');
235
324
  });
236
325
  /* eslint-enable */ _define_property(this, "getItem", async (req, res)=>{
237
- this.logger.default('Getting Item', {
326
+ const libOperations = this.lib.operations;
327
+ this.logger.debug('Getting Item', {
238
328
  query: req.query,
239
329
  params: req.params,
240
330
  locals: res.locals
@@ -242,7 +332,7 @@ class ItemRouter {
242
332
  const ik = this.getIk(res);
243
333
  try {
244
334
  // TODO: What error does validate PK throw, when can that fail?
245
- const item = validatePK(await this.lib.get(ik), this.getPkType());
335
+ const item = validatePK(await libOperations.get(ik), this.getPkType());
246
336
  res.json(item);
247
337
  } catch (err) {
248
338
  if (err instanceof NotFoundError) {
@@ -269,7 +359,8 @@ class ItemRouter {
269
359
  }
270
360
  });
271
361
  _define_property(this, "updateItem", async (req, res)=>{
272
- this.logger.default('Updating Item', {
362
+ const libOperations = this.lib.operations;
363
+ this.logger.debug('Updating Item', {
273
364
  body: req === null || req === void 0 ? void 0 : req.body,
274
365
  query: req === null || req === void 0 ? void 0 : req.query,
275
366
  params: req === null || req === void 0 ? void 0 : req.params,
@@ -277,12 +368,12 @@ class ItemRouter {
277
368
  });
278
369
  const ik = this.getIk(res);
279
370
  const itemToUpdate = this.convertDates(req.body);
280
- const retItem = validatePK(await this.lib.update(ik, itemToUpdate), this.getPkType());
371
+ const retItem = validatePK(await libOperations.update(ik, itemToUpdate), this.getPkType());
281
372
  res.json(retItem);
282
373
  });
283
374
  _define_property(this, "convertDates", (item)=>{
284
375
  const events = item.events;
285
- this.logger.default('Converting Dates', {
376
+ this.logger.debug('Converting Dates', {
286
377
  item
287
378
  });
288
379
  if (events) {