@fjell/express-router 4.4.8 → 4.4.11

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.js","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
+ {"version":3,"file":"ItemRouter.js","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.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.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.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.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.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","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 +1 @@
1
- {"version":3,"file":"PItemRouter.cjs","sources":["../src/PItemRouter.ts"],"sourcesContent":["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":["PItemRouter","ItemRouter","getIk","res","pri","getPk","lib","keyType","options","createItem","req","libOperations","operations","logger","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","getPkType","postCreateItem","json","findItems","items","finder","finderParams","one","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","map"],"mappings":"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"}
1
+ {"version":3,"file":"PItemRouter.cjs","sources":["../src/PItemRouter.ts"],"sourcesContent":["import { Item, ItemQuery, paramsToQuery, PriKey, QueryParams, validatePK } from \"@fjell/core\";\nimport { Instance } 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: 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":["PItemRouter","ItemRouter","getIk","res","pri","getPk","lib","keyType","options","createItem","req","libOperations","operations","logger","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","getPkType","postCreateItem","json","findItems","items","finder","finderParams","one","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","map"],"mappings":";;;;;;;;;;;;;;;;;;;;AASO,MAAMA,WAAAA,SAAyDC,qBAAAA,CAAAA;AAM7DC,IAAAA,KAAAA,CAAMC,GAAa,EAAa;AACrC,QAAA,MAAMC,GAAAA,GAAM,IAAI,CAACC,KAAK,CAACF,GAAAA,CAAAA;QACvB,OAAOC,GAAAA;AACT,IAAA;AAPA,IAAA,WAAA,CAAYE,GAAmB,EAAEC,OAAU,EAAEC,OAAAA,GAA6B,EAAE,CAAE;AAC5E,QAAA,KAAK,CAACF,GAAAA,EAAYC,OAAAA,EAASC,UAQ7B,gBAAA,CAAA,IAAA,EAAOC,YAAAA,EAAa,OAAOC,GAAAA,EAAcP,GAAAA,GAAAA;AACvC,YAAA,MAAMQ,aAAAA,GAAgB,IAAI,CAACL,GAAG,CAACM,UAAU;AACzC,YAAA,IAAI,CAACC,MAAM,CAACC,OAAO,CAAC,eAAA,EAAiB;AAAEC,gBAAAA,IAAAA,EAAML,IAAIK,IAAI;AAAEC,gBAAAA,KAAAA,EAAON,IAAIM,KAAK;AAAEC,gBAAAA,MAAAA,EAAQP,IAAIO,MAAM;AAAEC,gBAAAA,MAAAA,EAAQf,IAAIe;AAAO,aAAA,CAAA;AAChH,YAAA,MAAMC,eAAe,IAAI,CAACC,YAAY,CAACV,IAAIK,IAAI,CAAA;YAC/C,IAAIM,IAAAA,GAAOC,gBAAW,MAAMX,aAAAA,CAAcY,MAAM,CAACJ,YAAAA,CAAAA,EAAe,IAAI,CAACK,SAAS,EAAA,CAAA;AAC9EH,YAAAA,IAAAA,GAAO,MAAM,IAAI,CAACI,cAAc,CAACJ,IAAAA,CAAAA;AACjC,YAAA,IAAI,CAACR,MAAM,CAACC,OAAO,CAAC,iBAAA,EAAmBO,IAAAA,CAAAA;AACvClB,YAAAA,GAAAA,CAAIuB,IAAI,CAACL,IAAAA,CAAAA;QACX,CAAA,CAAA,EAEA,gBAAA,CAAA,IAAA,EAAUM,WAAAA,EAAY,OAAOjB,GAAAA,EAAcP,GAAAA,GAAAA;AACzC,YAAA,MAAMQ,aAAAA,GAAgB,IAAI,CAACL,GAAG,CAACM,UAAU;AACzC,YAAA,IAAI,CAACC,MAAM,CAACC,OAAO,CAAC,eAAA,EAAiB;AAAEE,gBAAAA,KAAAA,EAAON,IAAIM,KAAK;AAAEC,gBAAAA,MAAAA,EAAQP,IAAIO,MAAM;AAAEC,gBAAAA,MAAAA,EAAQf,IAAIe;AAAO,aAAA,CAAA;AAEhG,YAAA,IAAIU,QAAmB,EAAE;YAEzB,MAAMZ,KAAAA,GAAqBN,IAAIM,KAAK;YACpC,MAAMa,MAAAA,GAASb,KAAK,CAAC,QAAA,CAAS;YAC9B,MAAMc,YAAAA,GAAed,KAAK,CAAC,cAAA,CAAe;YAC1C,MAAMe,GAAAA,GAAMf,KAAK,CAAC,KAAA,CAAM;AAExB,YAAA,IAAIa,MAAAA,EAAQ;;AAEV,gBAAA,IAAI,CAAChB,MAAM,CAACC,OAAO,CAAC,wCAAA,EAA0Ce,QAAQC,YAAAA,EAAcC,GAAAA,CAAAA;AAEpF,gBAAA,IAAIA,QAAQ,MAAA,EAAQ;AAClB,oBAAA,MAAMV,IAAAA,GAAO,MAAM,IAAK,CAACf,GAAG,CAAS0B,OAAO,CAACH,MAAAA,EAAQI,IAAAA,CAAKC,KAAK,CAACJ,YAAAA,CAAAA,CAAAA;AAChEF,oBAAAA,KAAAA,GAAQP,IAAAA,GAAO;AAACA,wBAAAA;AAAK,qBAAA,GAAG,EAAE;gBAC5B,CAAA,MAAO;AACLO,oBAAAA,KAAAA,GAAQ,MAAMjB,aAAAA,CAAcwB,IAAI,CAACN,MAAAA,EAAQI,IAAAA,CAAKC,KAAK,CAACJ,YAAAA,CAAAA,CAAAA;AACtD,gBAAA;YACF,CAAA,MAAO;;gBAEL,MAAMM,SAAAA,GAAuBC,kBAAAA,CAAc3B,GAAAA,CAAIM,KAAK,CAAA;AACpD,gBAAA,IAAI,CAACH,MAAM,CAACC,OAAO,CAAC,+BAAA,EAAiCsB,SAAAA,CAAAA;gBACrDR,KAAAA,GAAQ,MAAMjB,aAAAA,CAAc2B,GAAG,CAACF,SAAAA,CAAAA;AAClC,YAAA;YAEAjC,GAAAA,CAAIuB,IAAI,CAACE,KAAAA,CAAMW,GAAG,CAAC,CAAClB,IAAAA,GAAkBC,eAAAA,CAAWD,IAAAA,EAAM,IAAI,CAACG,SAAS,EAAA,CAAA,CAAA,CAAA;AACvE,QAAA,CAAA,CAAA;AA9CA,IAAA;AAgDF;;;;"}
@@ -1,9 +1,9 @@
1
1
  import { Item, PriKey } from '@fjell/core';
2
- import { Primary } from '@fjell/lib';
2
+ import { Instance } from '@fjell/lib';
3
3
  import { ItemRouter, ItemRouterOptions } from './ItemRouter';
4
4
  import { Request, Response } from 'express';
5
5
  export declare class PItemRouter<T extends Item<S>, S extends string> extends ItemRouter<S> {
6
- constructor(lib: Primary.Instance<T, S>, keyType: S, options?: ItemRouterOptions);
6
+ constructor(lib: Instance<T, S>, keyType: S, options?: ItemRouterOptions);
7
7
  getIk(res: Response): PriKey<S>;
8
8
  createItem: (req: Request, res: Response) => Promise<void>;
9
9
  protected findItems: (req: Request, res: Response) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"PItemRouter.js","sources":["../src/PItemRouter.ts"],"sourcesContent":["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":["PItemRouter","ItemRouter","getIk","res","pri","getPk","lib","keyType","options","createItem","req","libOperations","operations","logger","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","getPkType","postCreateItem","json","findItems","items","finder","finderParams","one","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","map"],"mappings":"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"}
1
+ {"version":3,"file":"PItemRouter.js","sources":["../src/PItemRouter.ts"],"sourcesContent":["import { Item, ItemQuery, paramsToQuery, PriKey, QueryParams, validatePK } from \"@fjell/core\";\nimport { Instance } 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: 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":["PItemRouter","ItemRouter","getIk","res","pri","getPk","lib","keyType","options","createItem","req","libOperations","operations","logger","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","getPkType","postCreateItem","json","findItems","items","finder","finderParams","one","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","map"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const logger$1 = require('./logger.cjs');
6
+ const registry = require('@fjell/registry');
7
+
8
+ const logger = logger$1.default.get("Registry");
9
+ /**
10
+ * Factory function for creating express-router registries
11
+ */ const createRegistryFactory = ()=>{
12
+ return (type, registryHub)=>{
13
+ if (type !== 'express-router') {
14
+ throw new Error(`Express Router registry factory can only create 'express-router' type registries, got: ${type}`);
15
+ }
16
+ logger.debug("Creating express-router registry", {
17
+ type,
18
+ registryHub
19
+ });
20
+ const baseRegistry = registry.createRegistry(type, registryHub);
21
+ // Cast to Registry for type safety
22
+ return baseRegistry;
23
+ };
24
+ };
25
+ /**
26
+ * Creates a new express-router registry instance
27
+ */ const createRegistry = (registryHub)=>{
28
+ const baseRegistry = registry.createRegistry('express-router', registryHub);
29
+ return {
30
+ ...baseRegistry
31
+ };
32
+ };
33
+
34
+ exports.createRegistry = createRegistry;
35
+ exports.createRegistryFactory = createRegistryFactory;
36
+ //# sourceMappingURL=Registry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.cjs","sources":["../src/Registry.ts"],"sourcesContent":["import LibLogger from './logger';\nimport {\n Registry as BaseRegistry,\n createRegistry as createBaseRegistry,\n RegistryFactory,\n RegistryHub\n} from '@fjell/registry';\n\nconst logger = LibLogger.get(\"Registry\");\n\n/**\n * Extended Registry interface for express-router-specific functionality\n */\nexport interface Registry extends BaseRegistry {\n type: 'express-router';\n}\n\n/**\n * Factory function for creating express-router registries\n */\nexport const createRegistryFactory = (): RegistryFactory => {\n return (type: string, registryHub?: RegistryHub): BaseRegistry => {\n if (type !== 'express-router') {\n throw new Error(`Express Router registry factory can only create 'express-router' type registries, got: ${type}`);\n }\n\n logger.debug(\"Creating express-router registry\", { type, registryHub });\n\n const baseRegistry = createBaseRegistry(type, registryHub);\n\n // Cast to Registry for type safety\n return baseRegistry as Registry;\n };\n};\n\n/**\n * Creates a new express-router registry instance\n */\nexport const createRegistry = (registryHub?: RegistryHub): Registry => {\n const baseRegistry = createBaseRegistry('express-router', registryHub);\n\n return {\n ...baseRegistry,\n } as Registry;\n};\n"],"names":["logger","LibLogger","get","createRegistryFactory","type","registryHub","Error","debug","baseRegistry","createBaseRegistry","createRegistry"],"mappings":";;;;;;;AAQA,MAAMA,MAAAA,GAASC,gBAAAA,CAAUC,GAAG,CAAC,UAAA,CAAA;AAS7B;;UAGaC,qBAAAA,GAAwB,IAAA;AACnC,IAAA,OAAO,CAACC,IAAAA,EAAcC,WAAAA,GAAAA;AACpB,QAAA,IAAID,SAAS,gBAAA,EAAkB;AAC7B,YAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,uFAAuF,EAAEF,IAAAA,CAAAA,CAAM,CAAA;AAClH,QAAA;QAEAJ,MAAAA,CAAOO,KAAK,CAAC,kCAAA,EAAoC;AAAEH,YAAAA,IAAAA;AAAMC,YAAAA;AAAY,SAAA,CAAA;QAErE,MAAMG,YAAAA,GAAeC,wBAAmBL,IAAAA,EAAMC,WAAAA,CAAAA;;QAG9C,OAAOG,YAAAA;AACT,IAAA,CAAA;AACF;AAEA;;IAGO,MAAME,cAAAA,GAAiB,CAACL,WAAAA,GAAAA;IAC7B,MAAMG,YAAAA,GAAeC,wBAAmB,gBAAA,EAAkBJ,WAAAA,CAAAA;IAE1D,OAAO;AACL,QAAA,GAAGG;AACL,KAAA;AACF;;;;;"}
@@ -0,0 +1,15 @@
1
+ import { Registry as BaseRegistry, RegistryFactory, RegistryHub } from '@fjell/registry';
2
+ /**
3
+ * Extended Registry interface for express-router-specific functionality
4
+ */
5
+ export interface Registry extends BaseRegistry {
6
+ type: 'express-router';
7
+ }
8
+ /**
9
+ * Factory function for creating express-router registries
10
+ */
11
+ export declare const createRegistryFactory: () => RegistryFactory;
12
+ /**
13
+ * Creates a new express-router registry instance
14
+ */
15
+ export declare const createRegistry: (registryHub?: RegistryHub) => Registry;
@@ -0,0 +1,31 @@
1
+ import LibLogger from './logger.js';
2
+ import { createRegistry as createRegistry$1 } from '@fjell/registry';
3
+
4
+ const logger = LibLogger.get("Registry");
5
+ /**
6
+ * Factory function for creating express-router registries
7
+ */ const createRegistryFactory = ()=>{
8
+ return (type, registryHub)=>{
9
+ if (type !== 'express-router') {
10
+ throw new Error(`Express Router registry factory can only create 'express-router' type registries, got: ${type}`);
11
+ }
12
+ logger.debug("Creating express-router registry", {
13
+ type,
14
+ registryHub
15
+ });
16
+ const baseRegistry = createRegistry$1(type, registryHub);
17
+ // Cast to Registry for type safety
18
+ return baseRegistry;
19
+ };
20
+ };
21
+ /**
22
+ * Creates a new express-router registry instance
23
+ */ const createRegistry = (registryHub)=>{
24
+ const baseRegistry = createRegistry$1('express-router', registryHub);
25
+ return {
26
+ ...baseRegistry
27
+ };
28
+ };
29
+
30
+ export { createRegistry, createRegistryFactory };
31
+ //# sourceMappingURL=Registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.js","sources":["../src/Registry.ts"],"sourcesContent":["import LibLogger from './logger';\nimport {\n Registry as BaseRegistry,\n createRegistry as createBaseRegistry,\n RegistryFactory,\n RegistryHub\n} from '@fjell/registry';\n\nconst logger = LibLogger.get(\"Registry\");\n\n/**\n * Extended Registry interface for express-router-specific functionality\n */\nexport interface Registry extends BaseRegistry {\n type: 'express-router';\n}\n\n/**\n * Factory function for creating express-router registries\n */\nexport const createRegistryFactory = (): RegistryFactory => {\n return (type: string, registryHub?: RegistryHub): BaseRegistry => {\n if (type !== 'express-router') {\n throw new Error(`Express Router registry factory can only create 'express-router' type registries, got: ${type}`);\n }\n\n logger.debug(\"Creating express-router registry\", { type, registryHub });\n\n const baseRegistry = createBaseRegistry(type, registryHub);\n\n // Cast to Registry for type safety\n return baseRegistry as Registry;\n };\n};\n\n/**\n * Creates a new express-router registry instance\n */\nexport const createRegistry = (registryHub?: RegistryHub): Registry => {\n const baseRegistry = createBaseRegistry('express-router', registryHub);\n\n return {\n ...baseRegistry,\n } as Registry;\n};\n"],"names":["logger","LibLogger","get","createRegistryFactory","type","registryHub","Error","debug","baseRegistry","createBaseRegistry","createRegistry"],"mappings":";;;AAQA,MAAMA,MAAAA,GAASC,SAAAA,CAAUC,GAAG,CAAC,UAAA,CAAA;AAS7B;;UAGaC,qBAAAA,GAAwB,IAAA;AACnC,IAAA,OAAO,CAACC,IAAAA,EAAcC,WAAAA,GAAAA;AACpB,QAAA,IAAID,SAAS,gBAAA,EAAkB;AAC7B,YAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,uFAAuF,EAAEF,IAAAA,CAAAA,CAAM,CAAA;AAClH,QAAA;QAEAJ,MAAAA,CAAOO,KAAK,CAAC,kCAAA,EAAoC;AAAEH,YAAAA,IAAAA;AAAMC,YAAAA;AAAY,SAAA,CAAA;QAErE,MAAMG,YAAAA,GAAeC,iBAAmBL,IAAAA,EAAMC,WAAAA,CAAAA;;QAG9C,OAAOG,YAAAA;AACT,IAAA,CAAA;AACF;AAEA;;IAGO,MAAME,cAAAA,GAAiB,CAACL,WAAAA,GAAAA;IAC7B,MAAMG,YAAAA,GAAeC,iBAAmB,gBAAA,EAAkBJ,WAAAA,CAAAA;IAE1D,OAAO;AACL,QAAA,GAAGG;AACL,KAAA;AACF;;;;"}
package/dist/index.cjs CHANGED
@@ -7,6 +7,7 @@ const lib = require('@fjell/lib');
7
7
  const deepmerge = require('deepmerge');
8
8
  const express = require('express');
9
9
  const Logging = require('@fjell/logging');
10
+ const registry = require('@fjell/registry');
10
11
 
11
12
  const LibLogger = Logging.getLogger('@fjell/express-router');
12
13
 
@@ -65,7 +66,7 @@ class ItemRouter {
65
66
  return `${this.getPkType()}Pk`;
66
67
  });
67
68
  _define_property$2(this, "postAllAction", async (req, res)=>{
68
- const libOptions = this.lib.definition.options;
69
+ const libOptions = this.lib.options;
69
70
  const libOperations = this.lib.operations;
70
71
  this.logger.debug('Posting All Action', {
71
72
  query: req === null || req === void 0 ? void 0 : req.query,
@@ -101,7 +102,7 @@ class ItemRouter {
101
102
  }
102
103
  });
103
104
  _define_property$2(this, "getAllFacet", async (req, res)=>{
104
- const libOptions = this.lib.definition.options;
105
+ const libOptions = this.lib.options;
105
106
  const libOperations = this.lib.operations;
106
107
  this.logger.debug('Getting All Facet', {
107
108
  query: req === null || req === void 0 ? void 0 : req.query,
@@ -141,7 +142,7 @@ class ItemRouter {
141
142
  }
142
143
  });
143
144
  _define_property$2(this, "postItemAction", async (req, res)=>{
144
- const libOptions = this.lib.definition.options;
145
+ const libOptions = this.lib.options;
145
146
  const libOperations = this.lib.operations;
146
147
  this.logger.debug('Getting Item', {
147
148
  query: req === null || req === void 0 ? void 0 : req.query,
@@ -178,7 +179,7 @@ class ItemRouter {
178
179
  }
179
180
  });
180
181
  _define_property$2(this, "getItemFacet", async (req, res)=>{
181
- const libOptions = this.lib.definition.options;
182
+ const libOptions = this.lib.options;
182
183
  const libOperations = this.lib.operations;
183
184
  this.logger.debug('Getting Item', {
184
185
  query: req === null || req === void 0 ? void 0 : req.query,
@@ -219,7 +220,7 @@ class ItemRouter {
219
220
  }
220
221
  });
221
222
  _define_property$2(this, "configure", (router)=>{
222
- const libOptions = this.lib.definition.options;
223
+ const libOptions = this.lib.options;
223
224
  this.logger.debug('Configuring Router', {
224
225
  pkType: this.getPkType()
225
226
  });
@@ -582,7 +583,69 @@ class PItemRouter extends ItemRouter {
582
583
  }
583
584
  }
584
585
 
586
+ const logger$2 = LibLogger.get("Instance");
587
+ const createInstance = (registry$1, coordinate, router)=>{
588
+ logger$2.debug("createInstance", {
589
+ coordinate,
590
+ router,
591
+ registry: registry$1
592
+ });
593
+ const baseInstance = registry.createInstance(registry$1, coordinate);
594
+ return {
595
+ ...baseInstance,
596
+ router
597
+ };
598
+ };
599
+ const isInstance = (instance)=>{
600
+ return instance != null && typeof instance === 'object' && instance.coordinate != null && instance.router != null && instance.registry != null;
601
+ };
602
+
603
+ const logger$1 = LibLogger.get("InstanceFactory");
604
+ /**
605
+ * Factory function for creating express-router instances
606
+ */ const createInstanceFactory = (router)=>{
607
+ return (coordinate, context)=>{
608
+ logger$1.debug("Creating express-router instance", {
609
+ coordinate,
610
+ registry: context.registry,
611
+ router
612
+ });
613
+ return createInstance(context.registry, coordinate, router);
614
+ };
615
+ };
616
+
617
+ const logger = LibLogger.get("Registry");
618
+ /**
619
+ * Factory function for creating express-router registries
620
+ */ const createRegistryFactory = ()=>{
621
+ return (type, registryHub)=>{
622
+ if (type !== 'express-router') {
623
+ throw new Error(`Express Router registry factory can only create 'express-router' type registries, got: ${type}`);
624
+ }
625
+ logger.debug("Creating express-router registry", {
626
+ type,
627
+ registryHub
628
+ });
629
+ const baseRegistry = registry.createRegistry(type, registryHub);
630
+ // Cast to Registry for type safety
631
+ return baseRegistry;
632
+ };
633
+ };
634
+ /**
635
+ * Creates a new express-router registry instance
636
+ */ const createRegistry = (registryHub)=>{
637
+ const baseRegistry = registry.createRegistry('express-router', registryHub);
638
+ return {
639
+ ...baseRegistry
640
+ };
641
+ };
642
+
585
643
  exports.CItemRouter = CItemRouter;
586
644
  exports.ItemRouter = ItemRouter;
587
645
  exports.PItemRouter = PItemRouter;
646
+ exports.createInstance = createInstance;
647
+ exports.createInstanceFactory = createInstanceFactory;
648
+ exports.createRegistry = createRegistry;
649
+ exports.createRegistryFactory = createRegistryFactory;
650
+ exports.isInstance = isInstance;
588
651
  //# sourceMappingURL=index.cjs.map