@fjell/express-router 4.4.4 → 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":"index.cjs","sources":["../src/logger.ts","../src/ItemRouter.ts","../src/CItemRouter.ts","../src/PItemRouter.ts"],"sourcesContent":["import Logging from '@fjell/logging';\n\nconst LibLogger = Logging.getLogger('@fjell/express-router');\n\nexport default LibLogger;\n","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 postAllAction = async (req: Request, res: Response) => {\n this.logger.default('Posting All Action', { query: req?.query, params: req?.params, locals: res?.locals });\n const allActionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.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 = this.lib.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 this.lib.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 this.logger.default('Getting All Facet', { query: req?.query, params: req?.params, locals: res?.locals });\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.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 = this.lib.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 this.lib.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 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 const combinedQueryParams = { ...req.query, ...req.params } as Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>;\n res.json(await this.lib.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 this.logger.default('Configuring Router', { pkType: this.getPkType() });\n router.get('/', this.findItems);\n router.post('/', this.createItem);\n\n this.logger.debug('All Actions supplied to Router', { allActions: this.lib.allActions });\n if (this.lib.allActions) {\n Object.keys(this.lib.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}`, this.postAllAction);\n });\n }\n\n this.logger.debug('All Facets supplied to Router', { allFacets: this.lib.allFacets });\n if (this.lib.allFacets) {\n Object.keys(this.lib.allFacets).forEach((facetKey) => {\n this.logger.default('Configuring All Facet', { 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.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","import {\n ComKey, Item, ItemQuery, LocKey, LocKeyArray, paramsToQuery, PriKey, QueryParams, validatePK\n} from \"@fjell/core\";\nimport { Request, Response } from \"express\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport LibLogger from \"@/logger\";\nimport { Contained } from \"@fjell/lib\";\n\nconst logger = LibLogger.get('CItemRouter');\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class CItemRouter<\n T extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends ItemRouter<S, L1, L2, L3, L4, L5> {\n\n private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;\n\n constructor(\n lib: Contained.Operations<T, S, L1, L2, L3, L4, L5>,\n type: S,\n parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,\n options: ItemRouterOptions = {},\n ) {\n super(lib as any, type, options);\n this.parentRoute = parentRoute;\n }\n\n public hasParent(): boolean {\n return !!this.parentRoute;\n }\n\n public getIk(res: Response): ComKey<S, L1, L2, L3, L4, L5> {\n const pri = this.getPk(res) as PriKey<S>;\n const loc = this.getLocations(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n return { kt: pri.kt, pk: pri.pk, loc }\n }\n\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n /**\n * A location key array is passed to a child router to provide contextfor the items it will\n * be working with. It is always a concatenation of \"My LKA\" + \"Parent LKA\" which will\n * bubble all the way up to the root Primary.\n */\n let lka: LocKey<S | L1 | L2 | L3 | L4>[] = [this.getLk(res)];\n lka = lka.concat(this.parentRoute.getLKA(res) as LocKey<S | L1 | L2 | L3 | L4>[]);\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> {\n return this.parentRoute.getLKA(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n }\n\n protected createItem = async (req: Request, res: Response) => {\n logger.trace('Creating Item 2',\n { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);\n let item =\n validatePK(await this.lib.create(\n itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n item = await this.postCreateItem(item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n logger.trace('Finding Items', { query: req.query, params: req.params, locals: res.locals });\n\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n let items: Item<S, L1, L2, L3, L4, L5>[] = [];\n\n if (finder) {\n // If finder is defined? Call a finder.\n logger.trace('Finding Items with a finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));\n items = item ? [item] : [];\n } else {\n items = await this.lib.find(finder, JSON.parse(finderParams), this.getLocations(res));\n }\n } else {\n logger.trace('Finding Items with a query', { query: req.query });\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n items = await this.lib.all(itemQuery, this.getLocations(res));\n }\n\n res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));\n };\n\n}\n","import { Item, ItemQuery, paramsToQuery, PriKey, QueryParams, validatePK } from \"@fjell/core\";\nimport { Primary } from \"@fjell/lib\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Request, Response } from \"express\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('PItemRouter');\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class PItemRouter<T extends Item<S>, S extends string> extends ItemRouter<S> {\n\n constructor(lib: Primary.Operations<T, S>, keyType: S, options: ItemRouterOptions = {}) {\n super(lib as any, keyType, options);\n }\n\n public getIk(res: Response): PriKey<S> {\n const pri = this.getPk(res) as PriKey<S>;\n return pri\n }\n\n public createItem = async (req: Request, res: Response) => {\n logger.default('Creating Item 2', { body: req.body, query: req.query, params: req.params, locals: res.locals });\n const itemToCreate = this.convertDates(req.body as Item<S>);\n let item =\n validatePK(await this.lib.create(itemToCreate), this.getPkType()) as Item<S>;\n item = await this.postCreateItem(item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n logger.default('Finding Items', { query: req.query, params: req.params, locals: res.locals });\n\n let items: Item<S>[] = [];\n\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n if (finder) {\n // If finder is defined? Call a finder.\n logger.default('Finding Items with a finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams));\n items = item ? [item] : [];\n } else {\n items = await this.lib.find(finder, JSON.parse(finderParams));\n }\n } else {\n logger.default('Finding Items with a query', { query: req.query });\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n items = await this.lib.all(itemQuery);\n }\n\n res.json(items.map((item: Item<S>) => validatePK(item, this.getPkType())));\n };\n\n}\n"],"names":["LibLogger","Logging","getLogger","ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","_define_property","childRouters","logger","postAllAction","req","default","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","debug","Object","keys","forEach","itemRouter","getItem","put","updateItem","delete","deleteItem","itemActions","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","CItemRouter","hasParent","parentRoute","pri","loc","pk","lka","concat","type","trace","itemToCreate","create","locations","finder","finderParams","one","items","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","map","PItemRouter"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/logger.ts","../src/ItemRouter.ts","../src/CItemRouter.ts","../src/PItemRouter.ts"],"sourcesContent":["import Logging from '@fjell/logging';\n\nconst LibLogger = Logging.getLogger('@fjell/express-router');\n\nexport default LibLogger;\n","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","import {\n ComKey, Item, ItemQuery, LocKey, LocKeyArray, paramsToQuery, PriKey, QueryParams, validatePK\n} from \"@fjell/core\";\nimport { Request, Response } from \"express\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Contained } from \"@fjell/lib\";\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class CItemRouter<\n T extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends ItemRouter<S, L1, L2, L3, L4, L5> {\n\n private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;\n\n constructor(\n lib: Contained.Instance<T, S, L1, L2, L3, L4, L5>,\n type: S,\n parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,\n options: ItemRouterOptions = {},\n ) {\n super(lib as any, type, options);\n this.parentRoute = parentRoute;\n }\n\n public hasParent(): boolean {\n return !!this.parentRoute;\n }\n\n public getIk(res: Response): ComKey<S, L1, L2, L3, L4, L5> {\n const pri = this.getPk(res) as PriKey<S>;\n const loc = this.getLocations(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n return { kt: pri.kt, pk: pri.pk, loc }\n }\n\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n /**\n * A location key array is passed to a child router to provide contextfor the items it will\n * be working with. It is always a concatenation of \"My LKA\" + \"Parent LKA\" which will\n * bubble all the way up to the root Primary.\n */\n let lka: LocKey<S | L1 | L2 | L3 | L4>[] = [this.getLk(res)];\n lka = lka.concat(this.parentRoute.getLKA(res) as LocKey<S | L1 | L2 | L3 | L4>[]);\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> {\n return this.parentRoute.getLKA(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n }\n\n protected createItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Creating Item', { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);\n let item = validatePK(await libOperations.create(\n itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n item = await this.postCreateItem(item);\n this.logger.default('Created Item %j', item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n let items: Item<S, L1, L2, L3, L4, L5>[] = [];\n\n if (finder) {\n // If finder is defined? Call a finder.\n this.logger.default('Finding Items with Finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));\n items = item ? [item] : [];\n } else {\n items = await libOperations.find(finder, JSON.parse(finderParams), this.getLocations(res));\n }\n } else {\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n this.logger.default('Finding Items with Query: %j', itemQuery);\n items = await libOperations.all(itemQuery, this.getLocations(res));\n this.logger.default('Found %d Items with Query', items.length);\n }\n\n res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));\n };\n\n}\n","import { Item, ItemQuery, paramsToQuery, PriKey, QueryParams, validatePK } from \"@fjell/core\";\nimport { Primary } from \"@fjell/lib\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Request, Response } from \"express\";\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class PItemRouter<T extends Item<S>, S extends string> extends ItemRouter<S> {\n\n constructor(lib: Primary.Instance<T, S>, keyType: S, options: ItemRouterOptions = {}) {\n super(lib as any, keyType, options);\n }\n\n public getIk(res: Response): PriKey<S> {\n const pri = this.getPk(res) as PriKey<S>;\n return pri\n }\n\n public createItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Creating Item', { body: req.body, query: req.query, params: req.params, locals: res.locals });\n const itemToCreate = this.convertDates(req.body as Item<S>);\n let item = validatePK(await libOperations.create(itemToCreate), this.getPkType()) as Item<S>;\n item = await this.postCreateItem(item);\n this.logger.default('Created Item %j', item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Finding Items', { query: req.query, params: req.params, locals: res.locals });\n\n let items: Item<S>[] = [];\n\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n if (finder) {\n // If finder is defined? Call a finder.\n this.logger.default('Finding Items with Finder %s %j one:%s', finder, finderParams, one);\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams));\n items = item ? [item] : [];\n } else {\n items = await libOperations.find(finder, JSON.parse(finderParams));\n }\n } else {\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n this.logger.default('Finding Items with a query %j', itemQuery);\n items = await libOperations.all(itemQuery);\n }\n\n res.json(items.map((item: Item<S>) => validatePK(item, this.getPkType())));\n };\n\n}\n"],"names":["LibLogger","Logging","getLogger","ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","_define_property","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","CItemRouter","hasParent","parentRoute","pri","loc","pk","lka","concat","type","itemToCreate","create","locations","finder","finderParams","one","items","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","map","PItemRouter"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const clean: (obj: any) => {
2
+ [k: string]: unknown;
3
+ };
4
+ export declare const stringifyJSON: (obj: any, visited?: Set<any>) => string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjell/express-router",
3
- "version": "4.4.4",
3
+ "version": "4.4.5",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Express Router for Fjell",
6
6
  "engines": {
@@ -17,29 +17,29 @@
17
17
  },
18
18
  "type": "module",
19
19
  "dependencies": {
20
- "@fjell/core": "^4.4.3",
21
- "@fjell/lib": "^4.4.4",
22
- "@fjell/logging": "^4.4.3",
20
+ "@fjell/core": "^4.4.4",
21
+ "@fjell/lib": "^4.4.5",
22
+ "@fjell/logging": "^4.4.4",
23
23
  "deepmerge": "^4.3.1",
24
24
  "express": "^5.1.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@eslint/eslintrc": "^3.3.1",
28
- "@eslint/js": "^9.29.0",
29
- "@swc/core": "^1.12.6",
28
+ "@eslint/js": "^9.30.0",
29
+ "@swc/core": "^1.12.7",
30
30
  "@tsconfig/recommended": "^1.0.10",
31
31
  "@types/express": "^5.0.3",
32
- "@types/node": "^24.0.3",
33
- "@typescript-eslint/eslint-plugin": "^8.34.1",
34
- "@typescript-eslint/parser": "^8.34.1",
32
+ "@types/node": "^24.0.7",
33
+ "@typescript-eslint/eslint-plugin": "^8.35.0",
34
+ "@typescript-eslint/parser": "^8.35.0",
35
35
  "@vitest/coverage-v8": "^3.2.4",
36
36
  "@vitest/ui": "^3.2.4",
37
- "eslint": "^9.29.0",
37
+ "eslint": "^9.30.0",
38
38
  "nodemon": "^3.1.10",
39
39
  "rimraf": "^6.0.1",
40
40
  "ts-node": "^10.9.2",
41
41
  "typescript": "^5.8.3",
42
- "vite": "^6.3.5",
42
+ "vite": "^7.0.0",
43
43
  "vite-plugin-dts": "^4.5.4",
44
44
  "vite-plugin-node": "^5.0.1",
45
45
  "vitest": "^3.2.4"
@@ -0,0 +1,4 @@
1
+ overrides:
2
+ '@fjell/lib': link:../fjell-lib
3
+ '@fjell/core': link:../fjell-core
4
+ '@fjell/logging': link:../fjell-logging
package/release.sh ADDED
@@ -0,0 +1,89 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+
5
+ echo "Preparing for release: switching from workspace to remote dependencies."
6
+ if [ -f "pnpm-workspace.yaml" ]; then
7
+ echo "Renaming pnpm-workspace.yaml to prevent workspace-protocol resolution"
8
+ mv pnpm-workspace.yaml pnpm-workspace.yaml.bak
9
+ else
10
+ echo "pnpm-workspace.yaml not found, skipping rename."
11
+ fi
12
+
13
+ echo "Updating dependencies to latest versions from registry"
14
+ pnpm update --latest
15
+
16
+ echo "Staging changes for release commit"
17
+ git add package.json pnpm-lock.yaml
18
+ if [ -f "pnpm-workspace.yaml.bak" ]; then
19
+ git add pnpm-workspace.yaml.bak
20
+ fi
21
+
22
+ echo "Running clean, lint, build, and test..."
23
+ pnpm run clean && pnpm run lint && pnpm run build && pnpm run test
24
+
25
+ if git diff --staged --quiet; then
26
+ echo "No changes to commit, skipping commit."
27
+ else
28
+ ./commit.sh
29
+ fi
30
+
31
+ echo "Bumping version..."
32
+ pnpm version patch
33
+
34
+ echo "Generating release notes..."
35
+ pnpm dlx @eldrforge/kodrdriv release > RELEASE_NOTES.md
36
+
37
+ echo "Pushing to origin..."
38
+ git push --follow-tags
39
+
40
+ echo "Creating GitHub pull request..."
41
+ PR_URL=$(gh pr create --fill)
42
+ PR_NUM=$(echo "$PR_URL" | grep -o '[0-9]*$')
43
+ echo "Pull request created: $PR_URL"
44
+
45
+ echo "Waiting for PR #$PR_NUM checks to complete..."
46
+ while true; do
47
+ STATUS=$(gh pr checks "$PR_NUM" --json state | jq -r 'if length == 0 then "PENDING" else if any(.state == "PENDING") then "PENDING" else if any(.state == "FAILURE" or .state == "ERROR") then "FAILURE" else "SUCCESS" end end end' || echo "FAILURE")
48
+ echo "PR status: $STATUS"
49
+ if [[ "$STATUS" == "SUCCESS" ]]; then
50
+ echo "All checks passed!"
51
+ break
52
+ elif [[ "$STATUS" == "FAILURE" || "$STATUS" == "ERROR" ]]; then
53
+ echo "PR checks failed."
54
+ gh pr checks "$PR_NUM" | cat
55
+ exit 1
56
+ elif [[ "$STATUS" == "PENDING" ]]; then
57
+ echo "Checks are pending... waiting 30 seconds."
58
+ sleep 10
59
+ else
60
+ echo "Unknown PR status: $STATUS. Waiting 30 seconds."
61
+ sleep 10
62
+ fi
63
+ done
64
+
65
+ echo "Merging PR #$PR_NUM..."
66
+ gh pr merge "$PR_NUM" --merge --delete-branch
67
+
68
+ echo "Checking out main branch..."
69
+ git checkout main
70
+ git pull origin main
71
+
72
+ echo "Creating GitHub release..."
73
+ TAG_NAME="v$(jq -r .version package.json)"
74
+ gh release create "$TAG_NAME" --notes-file RELEASE_NOTES.md
75
+
76
+ echo "Creating next release branch..."
77
+ CURRENT_VERSION=$(jq -r .version package.json)
78
+ MAJOR=$(echo "$CURRENT_VERSION" | cut -d. -f1)
79
+ MINOR=$(echo "$CURRENT_VERSION" | cut -d. -f2)
80
+ PATCH=$(echo "$CURRENT_VERSION" | cut -d. -f3)
81
+ NEXT_PATCH=$((PATCH + 1))
82
+ NEXT_VERSION="$MAJOR.$MINOR.$NEXT_PATCH"
83
+
84
+ echo "Next version is $NEXT_VERSION"
85
+ git checkout -b "release/v$NEXT_VERSION"
86
+ git commit -m "feat: Start release v$NEXT_VERSION"
87
+ git push -u origin "release/v$NEXT_VERSION"
88
+
89
+ echo "Release process completed."
@@ -3,10 +3,8 @@ import {
3
3
  } from "@fjell/core";
4
4
  import { Request, Response } from "express";
5
5
  import { ItemRouter, ItemRouterOptions } from "@/ItemRouter";
6
- import LibLogger from "@/logger";
7
6
  import { Contained } from "@fjell/lib";
8
7
 
9
- const logger = LibLogger.get('CItemRouter');
10
8
  interface ParsedQuery {
11
9
  [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];
12
10
  }
@@ -24,7 +22,7 @@ export class CItemRouter<
24
22
  private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;
25
23
 
26
24
  constructor(
27
- lib: Contained.Operations<T, S, L1, L2, L3, L4, L5>,
25
+ lib: Contained.Instance<T, S, L1, L2, L3, L4, L5>,
28
26
  type: S,
29
27
  parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,
30
28
  options: ItemRouterOptions = {},
@@ -59,19 +57,18 @@ export class CItemRouter<
59
57
  }
60
58
 
61
59
  protected createItem = async (req: Request, res: Response) => {
62
- logger.trace('Creating Item 2',
63
- { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });
60
+ const libOperations = this.lib.operations;
61
+ this.logger.default('Creating Item', { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });
64
62
  const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);
65
- let item =
66
- validatePK(await this.lib.create(
67
- itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;
63
+ let item = validatePK(await libOperations.create(
64
+ itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;
68
65
  item = await this.postCreateItem(item);
66
+ this.logger.default('Created Item %j', item);
69
67
  res.json(item);
70
68
  };
71
69
 
72
70
  protected findItems = async (req: Request, res: Response) => {
73
- logger.trace('Finding Items', { query: req.query, params: req.params, locals: res.locals });
74
-
71
+ const libOperations = this.lib.operations;
75
72
  const query: ParsedQuery = req.query as unknown as ParsedQuery;
76
73
  const finder = query['finder'] as string;
77
74
  const finderParams = query['finderParams'] as string;
@@ -81,19 +78,20 @@ export class CItemRouter<
81
78
 
82
79
  if (finder) {
83
80
  // If finder is defined? Call a finder.
84
- logger.trace('Finding Items with a finder', { finder, finderParams, one });
81
+ this.logger.default('Finding Items with Finder', { finder, finderParams, one });
85
82
 
86
83
  if (one === 'true') {
87
84
  const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));
88
85
  items = item ? [item] : [];
89
86
  } else {
90
- items = await this.lib.find(finder, JSON.parse(finderParams), this.getLocations(res));
87
+ items = await libOperations.find(finder, JSON.parse(finderParams), this.getLocations(res));
91
88
  }
92
89
  } else {
93
- logger.trace('Finding Items with a query', { query: req.query });
94
90
  // TODO: This is once of the more important places to perform some validaation and feedback
95
91
  const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);
96
- items = await this.lib.all(itemQuery, this.getLocations(res));
92
+ this.logger.default('Finding Items with Query: %j', itemQuery);
93
+ items = await libOperations.all(itemQuery, this.getLocations(res));
94
+ this.logger.default('Found %d Items with Query', items.length);
97
95
  }
98
96
 
99
97
  res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));