@fjell/express-router 4.4.1 → 4.4.3

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.
@@ -41,14 +41,6 @@ class ItemRouter {
41
41
  getIk(res) {
42
42
  throw new Error('Method not implemented in an abstract router');
43
43
  }
44
- /* istanbul ignore next */ configureItemActions() {
45
- this.logger.debug('ARouter - No Item Actions Configured');
46
- return {};
47
- }
48
- /* istanbul ignore next */ configureAllActions() {
49
- this.logger.debug('ARouter - No All Actions Configured');
50
- return {};
51
- }
52
44
  /* istanbul ignore next */ getRouter() {
53
45
  const router = Router();
54
46
  this.configure(router);
@@ -60,7 +52,6 @@ class ItemRouter {
60
52
  _define_property(this, "options", void 0);
61
53
  _define_property(this, "childRouters", {});
62
54
  _define_property(this, "logger", void 0);
63
- _define_property(this, "itemActions", void 0);
64
55
  _define_property(this, "getPkType", ()=>{
65
56
  return this.keyType;
66
57
  });
@@ -75,21 +66,66 @@ class ItemRouter {
75
66
  });
76
67
  const ik = this.getIk(res);
77
68
  const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);
78
- if (!this.itemActions) {
69
+ if (!this.lib.actions) {
79
70
  this.logger.error('Item Actions are not configured');
80
- return res.status(500).json({
71
+ res.status(500).json({
81
72
  error: 'Item Actions are not configured'
82
73
  });
74
+ return;
75
+ }
76
+ const action = this.lib.actions[actionKey];
77
+ if (!action) {
78
+ this.logger.error('Item Action is not configured', {
79
+ actionKey
80
+ });
81
+ res.status(500).json({
82
+ error: 'Item Action is not configured'
83
+ });
84
+ return;
83
85
  }
84
86
  try {
85
- const item = validatePK(await this.lib.get(ik), this.getPkType());
86
- return res.json(await this.itemActions[actionKey](req, res, item, req.params, req.body));
87
+ res.json(await this.lib.action(ik, actionKey, req.body));
87
88
  } catch (err) {
88
89
  this.logger.error('Error in Item Action', {
89
90
  message: err === null || err === void 0 ? void 0 : err.message,
90
91
  stack: err === null || err === void 0 ? void 0 : err.stack
91
92
  });
92
- return res.status(500).json(err);
93
+ res.status(500).json(err);
94
+ }
95
+ });
96
+ _define_property(this, "getItemFacet", async (req, res)=>{
97
+ this.logger.default('Getting Item', {
98
+ query: req === null || req === void 0 ? void 0 : req.query,
99
+ params: req === null || req === void 0 ? void 0 : req.params,
100
+ locals: res === null || res === void 0 ? void 0 : res.locals
101
+ });
102
+ const ik = this.getIk(res);
103
+ const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);
104
+ if (!this.lib.facets) {
105
+ this.logger.error('Item Facets are not configured');
106
+ res.status(500).json({
107
+ error: 'Item Facets are not configured'
108
+ });
109
+ return;
110
+ }
111
+ const facet = this.lib.facets[facetKey];
112
+ if (!facet) {
113
+ this.logger.error('Item Facet is not configured', {
114
+ facetKey
115
+ });
116
+ res.status(500).json({
117
+ error: 'Item Facet is not configured'
118
+ });
119
+ return;
120
+ }
121
+ try {
122
+ res.json(await this.lib.facet(ik, facetKey, req.params));
123
+ } catch (err) {
124
+ this.logger.error('Error in Item Facet', {
125
+ message: err === null || err === void 0 ? void 0 : err.message,
126
+ stack: err === null || err === void 0 ? void 0 : err.stack
127
+ });
128
+ res.status(500).json(err);
93
129
  }
94
130
  });
95
131
  _define_property(this, "configure", (router)=>{
@@ -98,29 +134,24 @@ class ItemRouter {
98
134
  });
99
135
  router.get('/', this.findItems);
100
136
  router.post('/', this.createItem);
101
- const allActions = this.configureAllActions();
102
- this.logger.debug('All Actions supplied to Router', {
103
- allActions
104
- });
105
- if (allActions) {
106
- Object.keys(allActions).forEach((actionKey)=>{
107
- this.logger.default('Configuring All Action', {
108
- actionKey
109
- });
110
- // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
111
- router.post(`/${actionKey}`, ...allActions[actionKey]);
112
- });
113
- }
137
+ // const allActions = this.configureAllActions();
138
+ // this.logger.debug('All Actions supplied to Router', { allActions });
139
+ // if (allActions) {
140
+ // Object.keys(allActions).forEach((actionKey) => {
141
+ // this.logger.default('Configuring All Action', { actionKey });
142
+ // // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
143
+ // router.post(`/${actionKey}`, ...allActions[actionKey]);
144
+ // });
145
+ // }
114
146
  const itemRouter = Router();
115
147
  itemRouter.get('/', this.getItem);
116
148
  itemRouter.put('/', this.updateItem);
117
149
  itemRouter.delete('/', this.deleteItem);
118
- this.itemActions = this.configureItemActions();
119
150
  this.logger.debug('Item Actions supplied to Router', {
120
- itemActions: this.itemActions
151
+ itemActions: this.lib.actions
121
152
  });
122
- if (this.itemActions) {
123
- Object.keys(this.itemActions).forEach((actionKey)=>{
153
+ if (this.lib.actions) {
154
+ Object.keys(this.lib.actions).forEach((actionKey)=>{
124
155
  this.logger.default('Configuring Item Action', {
125
156
  actionKey
126
157
  });
@@ -128,6 +159,18 @@ class ItemRouter {
128
159
  itemRouter.post(`/${actionKey}`, this.postItemAction);
129
160
  });
130
161
  }
162
+ this.logger.debug('Item Facets supplied to Router', {
163
+ itemFacets: this.lib.facets
164
+ });
165
+ if (this.lib.facets) {
166
+ Object.keys(this.lib.facets).forEach((facetKey)=>{
167
+ this.logger.default('Configuring Item Facet', {
168
+ facetKey
169
+ });
170
+ // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
171
+ itemRouter.get(`/${facetKey}`, this.getItemFacet);
172
+ });
173
+ }
131
174
  this.logger.default('Configuring Item Operations under PK Param', {
132
175
  pkParam: this.getPkParam()
133
176
  });
@@ -185,7 +228,7 @@ class ItemRouter {
185
228
  const ik = this.getIk(res);
186
229
  const removedItem = await this.lib.remove(ik);
187
230
  const item = validatePK(removedItem, this.getPkType());
188
- return res.json(item);
231
+ res.json(item);
189
232
  });
190
233
  /* eslint-disable */ /* istanbul ignore next */ _define_property(this, "findItems", async (req, res)=>{
191
234
  throw new Error('Method not implemented in an abstract router');
@@ -200,7 +243,7 @@ class ItemRouter {
200
243
  try {
201
244
  // TODO: What error does validate PK throw, when can that fail?
202
245
  const item = validatePK(await this.lib.get(ik), this.getPkType());
203
- return res.json(item);
246
+ res.json(item);
204
247
  } catch (err) {
205
248
  if (err instanceof NotFoundError) {
206
249
  this.logger.error('Item Not Found', {
@@ -208,7 +251,7 @@ class ItemRouter {
208
251
  message: err === null || err === void 0 ? void 0 : err.message,
209
252
  stack: err === null || err === void 0 ? void 0 : err.stack
210
253
  });
211
- return res.status(404).json({
254
+ res.status(404).json({
212
255
  ik,
213
256
  message: "Item Not Found"
214
257
  });
@@ -218,7 +261,7 @@ class ItemRouter {
218
261
  message: err === null || err === void 0 ? void 0 : err.message,
219
262
  stack: err === null || err === void 0 ? void 0 : err.stack
220
263
  });
221
- return res.status(500).json({
264
+ res.status(500).json({
222
265
  ik,
223
266
  message: "General Error"
224
267
  });
@@ -235,7 +278,7 @@ class ItemRouter {
235
278
  const ik = this.getIk(res);
236
279
  const itemToUpdate = this.convertDates(req.body);
237
280
  const retItem = validatePK(await this.lib.update(ik, itemToUpdate), this.getPkType());
238
- return res.json(retItem);
281
+ res.json(retItem);
239
282
  });
240
283
  _define_property(this, "convertDates", (item)=>{
241
284
  const events = item.events;
@@ -1 +1 @@
1
- {"version":3,"file":"ItemRouter.js","sources":["../src/ItemRouter.ts"],"sourcesContent":["import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n ItemProperties,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { NotFoundError, Operations } from \"@fjell/lib\";\nimport deepmerge from \"deepmerge\";\nimport { Request, RequestHandler, Response, Router } from \"express\";\nimport LibLogger from \"./logger\";\n\nexport type ItemRouterOptions = Record<string, never>;\n\n// TODO: body is in the request, it's not needed in the parameters\nexport type ActionMethod = <\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>(req: Request, res: Response, item: Item<S, L1, L2, L3, L4, L5>, params: any, body: any) =>\n Promise<Item<S, L1, L2, L3, L4, L5>>;\n\n// TODO: body is in the request, it's not needed in the parameters\nexport type AllActionMethods = Array<RequestHandler>;\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 private itemActions: Record<string, ActionMethod> | undefined;\n\n constructor(\n lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>,\n keyType: S,\n options: ItemRouterOptions = {}\n ) {\n this.lib = lib;\n this.keyType = keyType;\n this.options = options;\n this.logger = LibLogger.get(\"ItemRouter\", keyType);\n }\n\n public getPkType = (): S => {\n return this.keyType;\n }\n\n protected getPkParam = (): string => {\n return `${this.getPkType()}Pk`;\n }\n\n protected getLk(res: Response): LocKey<S> {\n return { kt: this.keyType, lk: res.locals[this.getPkParam()] };\n }\n\n // this is meant to be consumed by children routers\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n return [this.getLk(res)] as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getPk(res: Response): PriKey<S> {\n return cPK<S>(res.locals[this.getPkParam()], this.getPkType());\n }\n\n // Unless this is a contained router, the locations will always be an empty array.\n /* eslint-disable */\n protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [] {\n throw new Error('Method not implemented in an abstract router');\n }\n /* eslint-enable */\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5> {\n throw new Error('Method not implemented in an abstract router');\n }\n\n protected postItemAction = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.itemActions) {\n this.logger.error('Item Actions are not configured');\n return res.status(500).json({ error: 'Item Actions are not configured' });\n }\n try {\n const item =\n validatePK(await this.lib.get(ik), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n return res.json(await this.itemActions[actionKey](req, res, item, req.params, req.body));\n } catch (err: any) {\n this.logger.error('Error in Item Action', { message: err?.message, stack: err?.stack });\n return res.status(500).json(err);\n }\n }\n\n private configure = (router: Router) => {\n this.logger.default('Configuring Router', { pkType: this.getPkType() });\n router.get('/', this.findItems);\n router.post('/', this.createItem);\n\n const allActions = this.configureAllActions();\n this.logger.debug('All Actions supplied to Router', { allActions });\n if (allActions) {\n Object.keys(allActions).forEach((actionKey) => {\n this.logger.default('Configuring All Action', { actionKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n router.post(`/${actionKey}`, ...allActions[actionKey]);\n });\n }\n\n const itemRouter = Router();\n itemRouter.get('/', this.getItem);\n itemRouter.put('/', this.updateItem);\n itemRouter.delete('/', this.deleteItem);\n\n this.itemActions = this.configureItemActions();\n this.logger.debug('Item Actions supplied to Router', { itemActions: this.itemActions });\n if (this.itemActions) {\n Object.keys(this.itemActions).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.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 protected configureItemActions(): Record<string, ActionMethod> {\n this.logger.debug('ARouter - No Item Actions Configured');\n return {};\n }\n\n /* istanbul ignore next */\n protected configureAllActions(): Record<string, AllActionMethods> {\n this.logger.debug('ARouter - No All Actions Configured');\n return {};\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<Response<any, Record<string, any>>> => {\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<Response<any, Record<string, any>>> => {\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 return res.json(item);\n };\n\n /* eslint-disable */\n /* istanbul ignore next */\n protected findItems = async (req: Request, res: Response): Promise<Response<any, Record<string, any>>> => {\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 return 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 return 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 return 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 return res.json(retItem);\n };\n\n public convertDates = (item: Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5>):\n Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5> => {\n const events = item.events as Record<string, ItemEvent>;\n this.logger.default('Converting Dates', { item });\n if (events) {\n Object.keys(events).forEach((key: string) => {\n Object.assign(events, {\n [key]: deepmerge(events[key], { at: events[key].at ? new Date(events[key].at) : null })\n });\n });\n }\n Object.assign(item, { events });\n return item;\n };\n\n // TODO: Maybe just simplify this and require that everything is a UUID?\n /**\n * This method might be an annoyance, but we need to capture a few cases where someone passes\n * a PK parameter that has an odd string in it.\n *\n * @param pkParamValue The value of the primary key parameter\n * @returns if the value is valid.\n */\n protected validatePKParam = (pkParamValue: string): boolean => {\n let validPkParam = true;\n if (pkParamValue.length <= 0) {\n this.logger.error('Primary Key is an Empty String', { pkParamValue });\n validPkParam = false;\n } else if (pkParamValue === 'undefined') {\n this.logger.error('Primary Key is the string \\'undefined\\'', { pkParamValue });\n validPkParam = false;\n }\n return validPkParam;\n }\n\n}\n"],"names":["ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","logger","debug","router","Router","configure","lib","options","childRouters","itemActions","postItemAction","req","default","query","params","ik","actionKey","path","substring","lastIndexOf","error","status","json","item","validatePK","get","body","err","message","stack","pkType","findItems","post","createItem","allActions","configureAllActions","Object","keys","forEach","itemRouter","getItem","put","updateItem","delete","deleteItem","configureItemActions","pkParam","use","validatePrimaryKeyValue","configureChildRouters","next","pkParamValue","validatePKParam","addChildRouter","postCreateItem","removedItem","remove","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 ItemProperties,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { NotFoundError, Operations } from \"@fjell/lib\";\nimport deepmerge from \"deepmerge\";\nimport { Request, Response, Router } from \"express\";\nimport LibLogger from \"./logger\";\n\nexport type ItemRouterOptions = Record<string, never>;\n\nexport class ItemRouter<\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n protected lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;\n private keyType: S;\n protected options: ItemRouterOptions;\n private childRouters: Record<string, Router> = {};\n private logger;\n\n constructor(\n lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>,\n keyType: S,\n options: ItemRouterOptions = {}\n ) {\n this.lib = lib;\n this.keyType = keyType;\n this.options = options;\n this.logger = LibLogger.get(\"ItemRouter\", keyType);\n }\n\n public getPkType = (): S => {\n return this.keyType;\n }\n\n protected getPkParam = (): string => {\n return `${this.getPkType()}Pk`;\n }\n\n protected getLk(res: Response): LocKey<S> {\n return { kt: this.keyType, lk: res.locals[this.getPkParam()] };\n }\n\n // this is meant to be consumed by children routers\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n return [this.getLk(res)] as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getPk(res: Response): PriKey<S> {\n return cPK<S>(res.locals[this.getPkParam()], this.getPkType());\n }\n\n // Unless this is a contained router, the locations will always be an empty array.\n /* eslint-disable */\n protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [] {\n throw new Error('Method not implemented in an abstract router');\n }\n /* eslint-enable */\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5> {\n throw new Error('Method not implemented in an abstract router');\n }\n\n protected postItemAction = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.actions) {\n this.logger.error('Item Actions are not configured');\n res.status(500).json({ error: 'Item Actions are not configured' });\n return;\n }\n const action = this.lib.actions[actionKey];\n if (!action) {\n this.logger.error('Item Action is not configured', { actionKey });\n res.status(500).json({ error: 'Item Action is not configured' });\n return;\n }\n try {\n res.json(await this.lib.action(ik, actionKey, req.body));\n } catch (err: any) {\n this.logger.error('Error in Item Action', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected getItemFacet = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.facets) {\n this.logger.error('Item Facets are not configured');\n res.status(500).json({ error: 'Item Facets are not configured' });\n return;\n }\n const facet = this.lib.facets[facetKey];\n if (!facet) {\n this.logger.error('Item Facet is not configured', { facetKey });\n res.status(500).json({ error: 'Item Facet is not configured' });\n return;\n }\n try {\n res.json(await this.lib.facet(ik, facetKey, req.params));\n } catch (err: any) {\n this.logger.error('Error in Item Facet', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n private configure = (router: Router) => {\n this.logger.default('Configuring Router', { pkType: this.getPkType() });\n router.get('/', this.findItems);\n router.post('/', this.createItem);\n\n // const allActions = this.configureAllActions();\n // this.logger.debug('All Actions supplied to Router', { allActions });\n // if (allActions) {\n // Object.keys(allActions).forEach((actionKey) => {\n // this.logger.default('Configuring All Action', { actionKey });\n // // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n // router.post(`/${actionKey}`, ...allActions[actionKey]);\n // });\n // }\n\n const itemRouter = Router();\n itemRouter.get('/', this.getItem);\n itemRouter.put('/', this.updateItem);\n itemRouter.delete('/', this.deleteItem);\n\n this.logger.debug('Item Actions supplied to Router', { itemActions: this.lib.actions });\n if (this.lib.actions) {\n Object.keys(this.lib.actions).forEach((actionKey) => {\n this.logger.default('Configuring Item Action', { actionKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.post(`/${actionKey}`, this.postItemAction)\n });\n }\n\n this.logger.debug('Item Facets supplied to Router', { itemFacets: this.lib.facets });\n if (this.lib.facets) {\n Object.keys(this.lib.facets).forEach((facetKey) => {\n this.logger.default('Configuring Item Facet', { facetKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.get(`/${facetKey}`, this.getItemFacet)\n });\n }\n\n this.logger.default('Configuring Item Operations under PK Param', { pkParam: this.getPkParam() });\n router.use(`/:${this.getPkParam()}`, this.validatePrimaryKeyValue, itemRouter);\n\n if (this.childRouters) {\n this.configureChildRouters(itemRouter, this.childRouters);\n }\n return router;\n }\n\n private validatePrimaryKeyValue = (req: Request, res: Response, next: any) => {\n const pkParamValue = req.params[this.getPkParam()];\n if (this.validatePKParam(pkParamValue)) {\n res.locals[this.getPkParam()] = pkParamValue;\n next();\n } else {\n this.logger.error('Invalid Primary Key', { pkParamValue, path: req?.path });\n res.status(500).json({ error: 'Invalid Primary Key', path: req?.path });\n }\n }\n\n private configureChildRouters = (router: Router, childRouters: Record<string, Router>) => {\n for (const path in childRouters) {\n this.logger.default('Configuring Child Router at Path', { path });\n\n router.use(`/${path}`, childRouters[path]);\n }\n return router;\n }\n\n public addChildRouter = (path: string, router: Router) => {\n this.childRouters[path] = router;\n }\n\n /* istanbul ignore next */\n public getRouter(): Router {\n const router = Router();\n this.configure(router);\n return router;\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected createItem = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n\n // TODO: Probably a better way to do this, but this postCreate hook only needs the item.\n /* istanbul ignore next */\n public postCreateItem = async (item: Item<S, L1, L2, L3, L4, L5>): Promise<Item<S, L1, L2, L3, L4, L5>> => {\n this.logger.default('Post Create Item', { item });\n return item;\n };\n\n protected deleteItem = async (req: Request, res: Response): Promise<void> => {\n this.logger.default('Deleting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n const removedItem = await this.lib.remove(ik);\n const item = validatePK(removedItem, this.getPkType());\n res.json(item);\n };\n\n /* eslint-disable */\n /* istanbul ignore next */\n protected findItems = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n /* eslint-enable */\n\n protected getItem = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n try {\n // TODO: What error does validate PK throw, when can that fail?\n const item = validatePK(await this.lib.get(ik), this.getPkType());\n res.json(item);\n } catch (err: any) {\n if (err instanceof NotFoundError) {\n this.logger.error('Item Not Found', { ik, message: err?.message, stack: err?.stack });\n res.status(404).json({\n ik,\n message: \"Item Not Found\",\n });\n } else {\n this.logger.error('General Error', { ik, message: err?.message, stack: err?.stack });\n res.status(500).json({\n ik,\n message: \"General Error\",\n });\n }\n }\n }\n\n protected updateItem = async (req: Request, res: Response) => {\n this.logger.default('Updating Item',\n { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const itemToUpdate = this.convertDates(req.body as ItemProperties<S, L1, L2, L3, L4, L5>);\n const retItem = validatePK(await this.lib.update(ik, itemToUpdate), this.getPkType());\n res.json(retItem);\n };\n\n public convertDates = (item: Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5>):\n Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5> => {\n const events = item.events as Record<string, ItemEvent>;\n this.logger.default('Converting Dates', { item });\n if (events) {\n Object.keys(events).forEach((key: string) => {\n Object.assign(events, {\n [key]: deepmerge(events[key], { at: events[key].at ? new Date(events[key].at) : null })\n });\n });\n }\n Object.assign(item, { events });\n return item;\n };\n\n // TODO: Maybe just simplify this and require that everything is a UUID?\n /**\n * This method might be an annoyance, but we need to capture a few cases where someone passes\n * a PK parameter that has an odd string in it.\n *\n * @param pkParamValue The value of the primary key parameter\n * @returns if the value is valid.\n */\n protected validatePKParam = (pkParamValue: string): boolean => {\n let validPkParam = true;\n if (pkParamValue.length <= 0) {\n this.logger.error('Primary Key is an Empty String', { pkParamValue });\n validPkParam = false;\n } else if (pkParamValue === 'undefined') {\n this.logger.error('Primary Key is the string \\'undefined\\'', { pkParamValue });\n validPkParam = false;\n }\n return validPkParam;\n }\n\n}\n"],"names":["ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","childRouters","logger","postItemAction","req","default","query","params","ik","actionKey","path","substring","lastIndexOf","actions","error","status","json","action","body","err","message","stack","getItemFacet","facetKey","facets","facet","pkType","get","findItems","post","createItem","itemRouter","getItem","put","updateItem","delete","deleteItem","debug","itemActions","Object","keys","forEach","itemFacets","pkParam","use","validatePrimaryKeyValue","configureChildRouters","next","pkParamValue","validatePKParam","addChildRouter","postCreateItem","item","removedItem","remove","validatePK","NotFoundError","itemToUpdate","convertDates","retItem","update","events","key","assign","deepmerge","at","Date","validPkParam","length","LibLogger"],"mappings":"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"}
@@ -36,8 +36,8 @@ class PItemRouter extends ItemRouter.ItemRouter {
36
36
  const itemToCreate = this.convertDates(req.body);
37
37
  let item = core.validatePK(await this.lib.create(itemToCreate), this.getPkType());
38
38
  item = await this.postCreateItem(item);
39
- return res.json(item);
40
- }), /* eslint-disable */ _define_property(this, "findItems", async (req, res)=>{
39
+ res.json(item);
40
+ }), _define_property(this, "findItems", async (req, res)=>{
41
41
  logger.default('Finding Items', {
42
42
  query: req.query,
43
43
  params: req.params,
@@ -47,13 +47,22 @@ class PItemRouter extends ItemRouter.ItemRouter {
47
47
  const query = req.query;
48
48
  const finder = query['finder'];
49
49
  const finderParams = query['finderParams'];
50
+ const one = query['one'];
50
51
  if (finder) {
51
52
  // If finder is defined? Call a finder.
52
53
  logger.default('Finding Items with a finder', {
53
54
  finder,
54
- finderParams
55
+ finderParams,
56
+ one
55
57
  });
56
- items = await this.lib.find(finder, JSON.parse(finderParams));
58
+ if (one === 'true') {
59
+ const item = await this.lib.findOne(finder, JSON.parse(finderParams));
60
+ items = item ? [
61
+ item
62
+ ] : [];
63
+ } else {
64
+ items = await this.lib.find(finder, JSON.parse(finderParams));
65
+ }
57
66
  } else {
58
67
  logger.default('Finding Items with a query', {
59
68
  query: req.query
@@ -62,7 +71,7 @@ class PItemRouter extends ItemRouter.ItemRouter {
62
71
  const itemQuery = core.paramsToQuery(req.query);
63
72
  items = await this.lib.all(itemQuery);
64
73
  }
65
- return res.json(items.map((item)=>core.validatePK(item, this.getPkType())));
74
+ res.json(items.map((item)=>core.validatePK(item, this.getPkType())));
66
75
  });
67
76
  }
68
77
  }
@@ -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\";\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, 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 return res.json(item);\n };\n\n /* eslint-disable */\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\n if( finder ) { \n // If finder is defined? Call a finder.\n logger.default('Finding Items with a finder', { finder, finderParams });\n items = await this.lib.find(finder, JSON.parse(finderParams));\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 return res.json(items.map((item: Item<S>) => validatePK(item, this.getPkType())));\n };\n /* eslint-enable */\n}\n"],"names":["logger","LibLogger","get","PItemRouter","ItemRouter","getIk","res","pri","getPk","lib","keyType","options","createItem","req","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","getPkType","postCreateItem","json","findItems","items","finder","finderParams","find","JSON","parse","itemQuery","paramsToQuery","all","map"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,MAAAA,GAASC,gBAAUC,CAAAA,GAAG,CAAC,aAAA,CAAA;AAMtB,MAAMC,WAAyDC,SAAAA,qBAAAA,CAAAA;AAM7DC,IAAAA,KAAAA,CAAMC,GAAa,EAAa;AACrC,QAAA,MAAMC,GAAM,GAAA,IAAI,CAACC,KAAK,CAACF,GAAAA,CAAAA;QACvB,OAAOC,GAAAA;AACT;AAPA,IAAA,WAAA,CAAYE,GAA6B,EAAEC,OAAU,EAAEC,OAA6B,GAAA,EAAE,CAAE;AACtF,QAAA,KAAK,CAACF,GAAKC,EAAAA,OAAAA,EAASC,UAQtB,gBAAOC,CAAAA,IAAAA,EAAAA,YAAAA,EAAa,OAAOC,GAAcP,EAAAA,GAAAA,GAAAA;YACvCN,MAAOc,CAAAA,OAAO,CAAC,iBAAmB,EAAA;AAAEC,gBAAAA,IAAAA,EAAMF,IAAIE,IAAI;AAAEC,gBAAAA,KAAAA,EAAOH,IAAIG,KAAK;AAAEC,gBAAAA,MAAAA,EAAQJ,IAAII,MAAM;AAAEC,gBAAAA,MAAAA,EAAQZ,IAAIY;AAAO,aAAA,CAAA;AAC7G,YAAA,MAAMC,eAAe,IAAI,CAACC,YAAY,CAACP,IAAIE,IAAI,CAAA;AAC/C,YAAA,IAAIM,IACFC,GAAAA,eAAAA,CAAW,MAAM,IAAI,CAACb,GAAG,CAACc,MAAM,CAACJ,YAAAA,CAAAA,EAAe,IAAI,CAACK,SAAS,EAAA,CAAA;AAChEH,YAAAA,IAAAA,GAAO,MAAM,IAAI,CAACI,cAAc,CAACJ,IAAAA,CAAAA;YACjC,OAAOf,GAAAA,CAAIoB,IAAI,CAACL,IAAAA,CAAAA;AAClB,SAAA,CAAA,uBAGA,gBAAUM,CAAAA,IAAAA,EAAAA,WAAAA,EAAY,OAAOd,GAAcP,EAAAA,GAAAA,GAAAA;YACzCN,MAAOc,CAAAA,OAAO,CAAC,eAAiB,EAAA;AAAEE,gBAAAA,KAAAA,EAAOH,IAAIG,KAAK;AAAEC,gBAAAA,MAAAA,EAAQJ,IAAII,MAAM;AAAEC,gBAAAA,MAAAA,EAAQZ,IAAIY;AAAO,aAAA,CAAA;AAE3F,YAAA,IAAIU,QAAmB,EAAE;YAEzB,MAAMZ,KAAAA,GAAqBH,IAAIG,KAAK;YACpC,MAAMa,MAAAA,GAASb,KAAK,CAAC,QAAS,CAAA;YAC9B,MAAMc,YAAAA,GAAed,KAAK,CAAC,cAAe,CAAA;AAE1C,YAAA,IAAIa,MAAS,EAAA;;gBAEX7B,MAAOc,CAAAA,OAAO,CAAC,6BAA+B,EAAA;AAAEe,oBAAAA,MAAAA;AAAQC,oBAAAA;AAAa,iBAAA,CAAA;gBACrEF,KAAQ,GAAA,MAAM,IAAI,CAACnB,GAAG,CAACsB,IAAI,CAACF,MAAAA,EAAQG,IAAKC,CAAAA,KAAK,CAACH,YAAAA,CAAAA,CAAAA;aAC1C,MAAA;gBACL9B,MAAOc,CAAAA,OAAO,CAAC,4BAA8B,EAAA;AAAEE,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA,CAAA;;gBAEhE,MAAMkB,SAAAA,GAAuBC,kBAActB,CAAAA,GAAAA,CAAIG,KAAK,CAAA;AACpDY,gBAAAA,KAAAA,GAAQ,MAAM,IAAI,CAACnB,GAAG,CAAC2B,GAAG,CAACF,SAAAA,CAAAA;AAC7B;AAEA,YAAA,OAAO5B,GAAIoB,CAAAA,IAAI,CAACE,KAAAA,CAAMS,GAAG,CAAC,CAAChB,IAAAA,GAAkBC,eAAWD,CAAAA,IAAAA,EAAM,IAAI,CAACG,SAAS,EAAA,CAAA,CAAA,CAAA;AAC9E,SAAA,CAAA;AAtCA;AAwCF;;;;"}
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\";\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":["logger","LibLogger","get","PItemRouter","ItemRouter","getIk","res","pri","getPk","lib","keyType","options","createItem","req","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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"}
@@ -5,6 +5,6 @@ import { Request, Response } from 'express';
5
5
  export declare class PItemRouter<T extends Item<S>, S extends string> extends ItemRouter<S> {
6
6
  constructor(lib: Primary.Operations<T, S>, keyType: S, options?: ItemRouterOptions);
7
7
  getIk(res: Response): PriKey<S>;
8
- createItem: (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
9
- protected findItems: (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
8
+ createItem: (req: Request, res: Response) => Promise<void>;
9
+ protected findItems: (req: Request, res: Response) => Promise<void>;
10
10
  }
@@ -32,8 +32,8 @@ class PItemRouter extends ItemRouter {
32
32
  const itemToCreate = this.convertDates(req.body);
33
33
  let item = validatePK(await this.lib.create(itemToCreate), this.getPkType());
34
34
  item = await this.postCreateItem(item);
35
- return res.json(item);
36
- }), /* eslint-disable */ _define_property(this, "findItems", async (req, res)=>{
35
+ res.json(item);
36
+ }), _define_property(this, "findItems", async (req, res)=>{
37
37
  logger.default('Finding Items', {
38
38
  query: req.query,
39
39
  params: req.params,
@@ -43,13 +43,22 @@ class PItemRouter extends ItemRouter {
43
43
  const query = req.query;
44
44
  const finder = query['finder'];
45
45
  const finderParams = query['finderParams'];
46
+ const one = query['one'];
46
47
  if (finder) {
47
48
  // If finder is defined? Call a finder.
48
49
  logger.default('Finding Items with a finder', {
49
50
  finder,
50
- finderParams
51
+ finderParams,
52
+ one
51
53
  });
52
- items = await this.lib.find(finder, JSON.parse(finderParams));
54
+ if (one === 'true') {
55
+ const item = await this.lib.findOne(finder, JSON.parse(finderParams));
56
+ items = item ? [
57
+ item
58
+ ] : [];
59
+ } else {
60
+ items = await this.lib.find(finder, JSON.parse(finderParams));
61
+ }
53
62
  } else {
54
63
  logger.default('Finding Items with a query', {
55
64
  query: req.query
@@ -58,7 +67,7 @@ class PItemRouter extends ItemRouter {
58
67
  const itemQuery = paramsToQuery(req.query);
59
68
  items = await this.lib.all(itemQuery);
60
69
  }
61
- return res.json(items.map((item)=>validatePK(item, this.getPkType())));
70
+ res.json(items.map((item)=>validatePK(item, this.getPkType())));
62
71
  });
63
72
  }
64
73
  }
@@ -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\";\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, 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 return res.json(item);\n };\n\n /* eslint-disable */\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\n if( finder ) { \n // If finder is defined? Call a finder.\n logger.default('Finding Items with a finder', { finder, finderParams });\n items = await this.lib.find(finder, JSON.parse(finderParams));\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 return res.json(items.map((item: Item<S>) => validatePK(item, this.getPkType())));\n };\n /* eslint-enable */\n}\n"],"names":["logger","LibLogger","get","PItemRouter","ItemRouter","getIk","res","pri","getPk","lib","keyType","options","createItem","req","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","getPkType","postCreateItem","json","findItems","items","finder","finderParams","find","JSON","parse","itemQuery","paramsToQuery","all","map"],"mappings":";;;;;;;;;;;;;;;;;AAMA,MAAMA,MAAAA,GAASC,SAAUC,CAAAA,GAAG,CAAC,aAAA,CAAA;AAMtB,MAAMC,WAAyDC,SAAAA,UAAAA,CAAAA;AAM7DC,IAAAA,KAAAA,CAAMC,GAAa,EAAa;AACrC,QAAA,MAAMC,GAAM,GAAA,IAAI,CAACC,KAAK,CAACF,GAAAA,CAAAA;QACvB,OAAOC,GAAAA;AACT;AAPA,IAAA,WAAA,CAAYE,GAA6B,EAAEC,OAAU,EAAEC,OAA6B,GAAA,EAAE,CAAE;AACtF,QAAA,KAAK,CAACF,GAAKC,EAAAA,OAAAA,EAASC,UAQtB,gBAAOC,CAAAA,IAAAA,EAAAA,YAAAA,EAAa,OAAOC,GAAcP,EAAAA,GAAAA,GAAAA;YACvCN,MAAOc,CAAAA,OAAO,CAAC,iBAAmB,EAAA;AAAEC,gBAAAA,IAAAA,EAAMF,IAAIE,IAAI;AAAEC,gBAAAA,KAAAA,EAAOH,IAAIG,KAAK;AAAEC,gBAAAA,MAAAA,EAAQJ,IAAII,MAAM;AAAEC,gBAAAA,MAAAA,EAAQZ,IAAIY;AAAO,aAAA,CAAA;AAC7G,YAAA,MAAMC,eAAe,IAAI,CAACC,YAAY,CAACP,IAAIE,IAAI,CAAA;AAC/C,YAAA,IAAIM,IACFC,GAAAA,UAAAA,CAAW,MAAM,IAAI,CAACb,GAAG,CAACc,MAAM,CAACJ,YAAAA,CAAAA,EAAe,IAAI,CAACK,SAAS,EAAA,CAAA;AAChEH,YAAAA,IAAAA,GAAO,MAAM,IAAI,CAACI,cAAc,CAACJ,IAAAA,CAAAA;YACjC,OAAOf,GAAAA,CAAIoB,IAAI,CAACL,IAAAA,CAAAA;AAClB,SAAA,CAAA,uBAGA,gBAAUM,CAAAA,IAAAA,EAAAA,WAAAA,EAAY,OAAOd,GAAcP,EAAAA,GAAAA,GAAAA;YACzCN,MAAOc,CAAAA,OAAO,CAAC,eAAiB,EAAA;AAAEE,gBAAAA,KAAAA,EAAOH,IAAIG,KAAK;AAAEC,gBAAAA,MAAAA,EAAQJ,IAAII,MAAM;AAAEC,gBAAAA,MAAAA,EAAQZ,IAAIY;AAAO,aAAA,CAAA;AAE3F,YAAA,IAAIU,QAAmB,EAAE;YAEzB,MAAMZ,KAAAA,GAAqBH,IAAIG,KAAK;YACpC,MAAMa,MAAAA,GAASb,KAAK,CAAC,QAAS,CAAA;YAC9B,MAAMc,YAAAA,GAAed,KAAK,CAAC,cAAe,CAAA;AAE1C,YAAA,IAAIa,MAAS,EAAA;;gBAEX7B,MAAOc,CAAAA,OAAO,CAAC,6BAA+B,EAAA;AAAEe,oBAAAA,MAAAA;AAAQC,oBAAAA;AAAa,iBAAA,CAAA;gBACrEF,KAAQ,GAAA,MAAM,IAAI,CAACnB,GAAG,CAACsB,IAAI,CAACF,MAAAA,EAAQG,IAAKC,CAAAA,KAAK,CAACH,YAAAA,CAAAA,CAAAA;aAC1C,MAAA;gBACL9B,MAAOc,CAAAA,OAAO,CAAC,4BAA8B,EAAA;AAAEE,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA,CAAA;;gBAEhE,MAAMkB,SAAAA,GAAuBC,aAActB,CAAAA,GAAAA,CAAIG,KAAK,CAAA;AACpDY,gBAAAA,KAAAA,GAAQ,MAAM,IAAI,CAACnB,GAAG,CAAC2B,GAAG,CAACF,SAAAA,CAAAA;AAC7B;AAEA,YAAA,OAAO5B,GAAIoB,CAAAA,IAAI,CAACE,KAAAA,CAAMS,GAAG,CAAC,CAAChB,IAAAA,GAAkBC,UAAWD,CAAAA,IAAAA,EAAM,IAAI,CAACG,SAAS,EAAA,CAAA,CAAA,CAAA;AAC9E,SAAA,CAAA;AAtCA;AAwCF;;;;"}
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\";\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":["logger","LibLogger","get","PItemRouter","ItemRouter","getIk","res","pri","getPk","lib","keyType","options","createItem","req","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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"}