@fjell/express-router 4.4.11 → 4.4.12

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":"CItemRouter.cjs","sources":["../src/CItemRouter.ts"],"sourcesContent":["import {\n ComKey, Item, ItemQuery, LocKey, LocKeyArray, paramsToQuery, PriKey, QueryParams, validatePK\n} from \"@fjell/core\";\nimport { Request, Response } from \"express\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"@fjell/lib\";\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class CItemRouter<\n T extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends ItemRouter<S, L1, L2, L3, L4, L5> {\n\n private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;\n\n constructor(\n lib: Instance<T, S, L1, L2, L3, L4, L5>,\n type: S,\n parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,\n options: ItemRouterOptions = {},\n ) {\n super(lib as any, type, options);\n this.parentRoute = parentRoute;\n }\n\n public hasParent(): boolean {\n return !!this.parentRoute;\n }\n\n public getIk(res: Response): ComKey<S, L1, L2, L3, L4, L5> {\n const pri = this.getPk(res) as PriKey<S>;\n const loc = this.getLocations(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n return { kt: pri.kt, pk: pri.pk, loc }\n }\n\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n /**\n * A location key array is passed to a child router to provide contextfor the items it will\n * be working with. It is always a concatenation of \"My LKA\" + \"Parent LKA\" which will\n * bubble all the way up to the root Primary.\n */\n let lka: LocKey<S | L1 | L2 | L3 | L4>[] = [this.getLk(res)];\n lka = lka.concat(this.parentRoute.getLKA(res) as LocKey<S | L1 | L2 | L3 | L4>[]);\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> {\n return this.parentRoute.getLKA(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n }\n\n protected createItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Creating Item', { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);\n let item = validatePK(await libOperations.create(\n itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n item = await this.postCreateItem(item);\n this.logger.default('Created Item %j', item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n let items: Item<S, L1, L2, L3, L4, L5>[] = [];\n\n if (finder) {\n // If finder is defined? Call a finder.\n this.logger.default('Finding Items with Finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));\n items = item ? [item] : [];\n } else {\n items = await libOperations.find(finder, JSON.parse(finderParams), this.getLocations(res));\n }\n } else {\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n this.logger.default('Finding Items with Query: %j', itemQuery);\n items = await libOperations.all(itemQuery, this.getLocations(res));\n this.logger.default('Found %d Items with Query', items.length);\n }\n\n res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));\n };\n\n}\n"],"names":["CItemRouter","ItemRouter","hasParent","parentRoute","getIk","res","pri","getPk","loc","getLocations","kt","pk","getLKA","lka","getLk","concat","lib","type","options","createItem","req","libOperations","operations","logger","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","locations","getPkType","postCreateItem","json","findItems","finder","finderParams","one","items","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","length","map"],"mappings":"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"}
1
+ {"version":3,"file":"CItemRouter.cjs","sources":["../src/CItemRouter.ts"],"sourcesContent":["import {\n ComKey, Item, ItemQuery, LocKey, LocKeyArray, paramsToQuery, PriKey, QueryParams, validatePK\n} from \"@fjell/core\";\nimport { Request, Response } from \"express\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"./Instance\";\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class CItemRouter<\n T extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends ItemRouter<S, L1, L2, L3, L4, L5> {\n\n private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;\n\n constructor(\n lib: Instance<T, S, L1, L2, L3, L4, L5>,\n type: S,\n parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,\n options: ItemRouterOptions = {},\n ) {\n super(lib as any, type, options);\n this.parentRoute = parentRoute;\n }\n\n public hasParent(): boolean {\n return !!this.parentRoute;\n }\n\n public getIk(res: Response): ComKey<S, L1, L2, L3, L4, L5> {\n const pri = this.getPk(res) as PriKey<S>;\n const loc = this.getLocations(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n return { kt: pri.kt, pk: pri.pk, loc }\n }\n\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n /**\n * A location key array is passed to a child router to provide contextfor the items it will\n * be working with. It is always a concatenation of \"My LKA\" + \"Parent LKA\" which will\n * bubble all the way up to the root Primary.\n */\n let lka: LocKey<S | L1 | L2 | L3 | L4>[] = [this.getLk(res)];\n lka = lka.concat(this.parentRoute.getLKA(res) as LocKey<S | L1 | L2 | L3 | L4>[]);\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> {\n return this.parentRoute.getLKA(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n }\n\n protected createItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Creating Item', { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);\n let item = validatePK(await libOperations.create(\n itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n item = await this.postCreateItem(item);\n this.logger.default('Created Item %j', item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n let items: Item<S, L1, L2, L3, L4, L5>[] = [];\n\n if (finder) {\n // If finder is defined? Call a finder.\n this.logger.default('Finding Items with Finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));\n items = item ? [item] : [];\n } else {\n items = await libOperations.find(finder, JSON.parse(finderParams), this.getLocations(res));\n }\n } else {\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n this.logger.default('Finding Items with Query: %j', itemQuery);\n items = await libOperations.all(itemQuery, this.getLocations(res));\n this.logger.default('Found %d Items with Query', items.length);\n }\n\n res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));\n };\n\n}\n"],"names":["CItemRouter","ItemRouter","hasParent","parentRoute","getIk","res","pri","getPk","loc","getLocations","kt","pk","getLKA","lka","getLk","concat","lib","type","options","createItem","req","libOperations","operations","logger","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","locations","getPkType","postCreateItem","json","findItems","finder","finderParams","one","items","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","length","map"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ComKey, Item, LocKeyArray } from '@fjell/core';
2
2
  import { Request, Response } from 'express';
3
3
  import { ItemRouter, ItemRouterOptions } from './ItemRouter';
4
- import { Instance } from '@fjell/lib';
4
+ import { Instance } from './Instance';
5
5
  export declare class CItemRouter<T extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> extends ItemRouter<S, L1, L2, L3, L4, L5> {
6
6
  private parentRoute;
7
7
  constructor(lib: Instance<T, S, L1, L2, L3, L4, L5>, type: S, parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>, options?: ItemRouterOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"CItemRouter.js","sources":["../src/CItemRouter.ts"],"sourcesContent":["import {\n ComKey, Item, ItemQuery, LocKey, LocKeyArray, paramsToQuery, PriKey, QueryParams, validatePK\n} from \"@fjell/core\";\nimport { Request, Response } from \"express\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"@fjell/lib\";\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class CItemRouter<\n T extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends ItemRouter<S, L1, L2, L3, L4, L5> {\n\n private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;\n\n constructor(\n lib: Instance<T, S, L1, L2, L3, L4, L5>,\n type: S,\n parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,\n options: ItemRouterOptions = {},\n ) {\n super(lib as any, type, options);\n this.parentRoute = parentRoute;\n }\n\n public hasParent(): boolean {\n return !!this.parentRoute;\n }\n\n public getIk(res: Response): ComKey<S, L1, L2, L3, L4, L5> {\n const pri = this.getPk(res) as PriKey<S>;\n const loc = this.getLocations(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n return { kt: pri.kt, pk: pri.pk, loc }\n }\n\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n /**\n * A location key array is passed to a child router to provide contextfor the items it will\n * be working with. It is always a concatenation of \"My LKA\" + \"Parent LKA\" which will\n * bubble all the way up to the root Primary.\n */\n let lka: LocKey<S | L1 | L2 | L3 | L4>[] = [this.getLk(res)];\n lka = lka.concat(this.parentRoute.getLKA(res) as LocKey<S | L1 | L2 | L3 | L4>[]);\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> {\n return this.parentRoute.getLKA(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n }\n\n protected createItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Creating Item', { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);\n let item = validatePK(await libOperations.create(\n itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n item = await this.postCreateItem(item);\n this.logger.default('Created Item %j', item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n let items: Item<S, L1, L2, L3, L4, L5>[] = [];\n\n if (finder) {\n // If finder is defined? Call a finder.\n this.logger.default('Finding Items with Finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));\n items = item ? [item] : [];\n } else {\n items = await libOperations.find(finder, JSON.parse(finderParams), this.getLocations(res));\n }\n } else {\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n this.logger.default('Finding Items with Query: %j', itemQuery);\n items = await libOperations.all(itemQuery, this.getLocations(res));\n this.logger.default('Found %d Items with Query', items.length);\n }\n\n res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));\n };\n\n}\n"],"names":["CItemRouter","ItemRouter","hasParent","parentRoute","getIk","res","pri","getPk","loc","getLocations","kt","pk","getLKA","lka","getLk","concat","lib","type","options","createItem","req","libOperations","operations","logger","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","locations","getPkType","postCreateItem","json","findItems","finder","finderParams","one","items","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","length","map"],"mappings":"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"}
1
+ {"version":3,"file":"CItemRouter.js","sources":["../src/CItemRouter.ts"],"sourcesContent":["import {\n ComKey, Item, ItemQuery, LocKey, LocKeyArray, paramsToQuery, PriKey, QueryParams, validatePK\n} from \"@fjell/core\";\nimport { Request, Response } from \"express\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"./Instance\";\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class CItemRouter<\n T extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends ItemRouter<S, L1, L2, L3, L4, L5> {\n\n private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;\n\n constructor(\n lib: Instance<T, S, L1, L2, L3, L4, L5>,\n type: S,\n parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,\n options: ItemRouterOptions = {},\n ) {\n super(lib as any, type, options);\n this.parentRoute = parentRoute;\n }\n\n public hasParent(): boolean {\n return !!this.parentRoute;\n }\n\n public getIk(res: Response): ComKey<S, L1, L2, L3, L4, L5> {\n const pri = this.getPk(res) as PriKey<S>;\n const loc = this.getLocations(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n return { kt: pri.kt, pk: pri.pk, loc }\n }\n\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n /**\n * A location key array is passed to a child router to provide contextfor the items it will\n * be working with. It is always a concatenation of \"My LKA\" + \"Parent LKA\" which will\n * bubble all the way up to the root Primary.\n */\n let lka: LocKey<S | L1 | L2 | L3 | L4>[] = [this.getLk(res)];\n lka = lka.concat(this.parentRoute.getLKA(res) as LocKey<S | L1 | L2 | L3 | L4>[]);\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> {\n return this.parentRoute.getLKA(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n }\n\n protected createItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Creating Item', { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);\n let item = validatePK(await libOperations.create(\n itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n item = await this.postCreateItem(item);\n this.logger.default('Created Item %j', item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n let items: Item<S, L1, L2, L3, L4, L5>[] = [];\n\n if (finder) {\n // If finder is defined? Call a finder.\n this.logger.default('Finding Items with Finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));\n items = item ? [item] : [];\n } else {\n items = await libOperations.find(finder, JSON.parse(finderParams), this.getLocations(res));\n }\n } else {\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n this.logger.default('Finding Items with Query: %j', itemQuery);\n items = await libOperations.all(itemQuery, this.getLocations(res));\n this.logger.default('Found %d Items with Query', items.length);\n }\n\n res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));\n };\n\n}\n"],"names":["CItemRouter","ItemRouter","hasParent","parentRoute","getIk","res","pri","getPk","loc","getLocations","kt","pk","getLKA","lka","getLk","concat","lib","type","options","createItem","req","libOperations","operations","logger","default","body","query","params","locals","itemToCreate","convertDates","item","validatePK","create","locations","getPkType","postCreateItem","json","findItems","finder","finderParams","one","items","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","length","map"],"mappings":"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"}
package/dist/Instance.cjs CHANGED
@@ -6,20 +6,24 @@ const logger$1 = require('./logger.cjs');
6
6
  const registry = require('@fjell/registry');
7
7
 
8
8
  const logger = logger$1.default.get("Instance");
9
- const createInstance = (registry$1, coordinate, router)=>{
9
+ const createInstance = (registry$1, coordinate, router, operations, options)=>{
10
10
  logger.debug("createInstance", {
11
11
  coordinate,
12
12
  router,
13
- registry: registry$1
13
+ registry: registry$1,
14
+ operations,
15
+ options
14
16
  });
15
17
  const baseInstance = registry.createInstance(registry$1, coordinate);
16
18
  return {
17
19
  ...baseInstance,
18
- router
20
+ router,
21
+ operations,
22
+ options: options || {}
19
23
  };
20
24
  };
21
25
  const isInstance = (instance)=>{
22
- return instance != null && typeof instance === 'object' && instance.coordinate != null && instance.router != null && instance.registry != null;
26
+ return instance != null && typeof instance === 'object' && instance.coordinate != null && instance.router != null && instance.registry != null && instance.operations != null && instance.options != null;
23
27
  };
24
28
 
25
29
  exports.createInstance = createInstance;
@@ -1 +1 @@
1
- {"version":3,"file":"Instance.cjs","sources":["../src/Instance.ts"],"sourcesContent":["import LibLogger from \"./logger\";\nimport { Item } from \"@fjell/core\";\nimport { Instance as BaseInstance, Coordinate, createInstance as createBaseInstance, Registry } from \"@fjell/registry\";\nimport { ItemRouter } from \"./ItemRouter\";\n\nconst logger = LibLogger.get(\"Instance\");\n\n/**\n * The Express Router Instance interface represents a router model instance that extends the base Instance\n * from @fjell/registry and adds express router operations for handling HTTP requests.\n *\n * The interface extends the base Instance (which provides coordinate and registry) with:\n * - router: Provides methods for routing HTTP requests and handling CRUD operations\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport interface Instance<\n V extends Item<S, L1, L2, L3, L4, L5>,\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> extends BaseInstance<S, L1, L2, L3, L4, L5> {\n /** The router object that provides methods for handling HTTP requests */\n router: ItemRouter<S, L1, L2, L3, L4, L5>;\n /** The data model item type (for type safety) */\n readonly itemType?: V;\n}\n\nexport const createInstance = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 registry: Registry,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n router: ItemRouter<S, L1, L2, L3, L4, L5>,\n ): Instance<V, S, L1, L2, L3, L4, L5> => {\n logger.debug(\"createInstance\", { coordinate, router, registry });\n const baseInstance = createBaseInstance(registry, coordinate);\n return { ...baseInstance, router };\n}\n\nexport const isInstance = (instance: any): instance is Instance<any, any, any, any, any, any, any> => {\n return instance != null &&\n typeof instance === 'object' &&\n instance.coordinate != null &&\n instance.router != null &&\n instance.registry != null;\n}\n"],"names":["logger","LibLogger","get","createInstance","registry","coordinate","router","debug","baseInstance","createBaseInstance","isInstance","instance"],"mappings":";;;;;;;AAKA,MAAMA,MAAAA,GAASC,gBAAAA,CAAUC,GAAG,CAAC,UAAA,CAAA;AA4BtB,MAAMC,cAAAA,GAAiB,CAS1BC,UAAAA,EACAC,UAAAA,EACAC,MAAAA,GAAAA;IAEFN,MAAAA,CAAOO,KAAK,CAAC,gBAAA,EAAkB;AAAEF,QAAAA,UAAAA;AAAYC,QAAAA,MAAAA;AAAQF,kBAAAA;AAAS,KAAA,CAAA;IAC9D,MAAMI,YAAAA,GAAeC,wBAAmBL,UAAAA,EAAUC,UAAAA,CAAAA;IAClD,OAAO;AAAE,QAAA,GAAGG,YAAY;AAAEF,QAAAA;AAAO,KAAA;AACnC;AAEO,MAAMI,aAAa,CAACC,QAAAA,GAAAA;AACzB,IAAA,OAAOA,QAAAA,IAAY,IAAA,IACjB,OAAOA,QAAAA,KAAa,YACpBA,QAAAA,CAASN,UAAU,IAAI,IAAA,IACvBM,SAASL,MAAM,IAAI,IAAA,IACnBK,QAAAA,CAASP,QAAQ,IAAI,IAAA;AACzB;;;;;"}
1
+ {"version":3,"file":"Instance.cjs","sources":["../src/Instance.ts"],"sourcesContent":["import LibLogger from \"./logger\";\nimport { Item } from \"@fjell/core\";\nimport { Instance as BaseInstance, Coordinate, createInstance as createBaseInstance, Registry } from \"@fjell/registry\";\nimport { Operations, Options } from \"@fjell/lib\";\nimport { ItemRouter } from \"./ItemRouter\";\n\nconst logger = LibLogger.get(\"Instance\");\n\n/**\n * The Express Router Instance interface represents a router model instance that extends the base Instance\n * from @fjell/registry and adds express router operations for handling HTTP requests.\n *\n * The interface extends the base Instance (which provides coordinate and registry) with:\n * - router: Provides methods for routing HTTP requests and handling CRUD operations\n * - operations: Provides methods for interacting with the data model (get, find, all, etc.)\n * - options: Provides hooks, validators, finders, actions, and facets\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport interface Instance<\n V extends Item<S, L1, L2, L3, L4, L5>,\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> extends BaseInstance<S, L1, L2, L3, L4, L5> {\n /** The router object that provides methods for handling HTTP requests */\n router: ItemRouter<S, L1, L2, L3, L4, L5>;\n /** The operations object that provides methods for interacting with the data model */\n operations: Operations<V, S, L1, L2, L3, L4, L5>;\n /** The options object that provides hooks, validators, finders, actions, and facets */\n options: Options<V, S, L1, L2, L3, L4, L5>;\n /** The data model item type (for type safety) */\n readonly itemType?: V;\n}\n\nexport const createInstance = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 registry: Registry,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>,\n ): Instance<V, S, L1, L2, L3, L4, L5> => {\n logger.debug(\"createInstance\", { coordinate, router, registry, operations, options });\n const baseInstance = createBaseInstance(registry, coordinate);\n return { ...baseInstance, router, operations, options: options || {} as Options<V, S, L1, L2, L3, L4, L5> };\n}\n\nexport const isInstance = (instance: any): instance is Instance<any, any, any, any, any, any, any> => {\n return instance != null &&\n typeof instance === 'object' &&\n instance.coordinate != null &&\n instance.router != null &&\n instance.registry != null &&\n instance.operations != null &&\n instance.options != null;\n}\n"],"names":["logger","LibLogger","get","createInstance","registry","coordinate","router","operations","options","debug","baseInstance","createBaseInstance","isInstance","instance"],"mappings":";;;;;;;AAMA,MAAMA,MAAAA,GAASC,gBAAAA,CAAUC,GAAG,CAAC,UAAA,CAAA;MAkChBC,cAAAA,GAAiB,CAS1BC,UAAAA,EACAC,UAAAA,EACAC,QACAC,UAAAA,EACAC,OAAAA,GAAAA;IAEFR,MAAAA,CAAOS,KAAK,CAAC,gBAAA,EAAkB;AAAEJ,QAAAA,UAAAA;AAAYC,QAAAA,MAAAA;AAAQF,kBAAAA,UAAAA;AAAUG,QAAAA,UAAAA;AAAYC,QAAAA;AAAQ,KAAA,CAAA;IACnF,MAAME,YAAAA,GAAeC,wBAAmBP,UAAAA,EAAUC,UAAAA,CAAAA;IAClD,OAAO;AAAE,QAAA,GAAGK,YAAY;AAAEJ,QAAAA,MAAAA;AAAQC,QAAAA,UAAAA;AAAYC,QAAAA,OAAAA,EAASA,WAAW;AAAwC,KAAA;AAC5G;AAEO,MAAMI,aAAa,CAACC,QAAAA,GAAAA;IACzB,OAAOA,QAAAA,IAAY,QACjB,OAAOA,QAAAA,KAAa,YACpBA,QAAAA,CAASR,UAAU,IAAI,IAAA,IACvBQ,QAAAA,CAASP,MAAM,IAAI,IAAA,IACnBO,QAAAA,CAAST,QAAQ,IAAI,IAAA,IACrBS,QAAAA,CAASN,UAAU,IAAI,IAAA,IACvBM,QAAAA,CAASL,OAAO,IAAI,IAAA;AACxB;;;;;"}
@@ -1,5 +1,6 @@
1
1
  import { Item } from '@fjell/core';
2
2
  import { Instance as BaseInstance, Coordinate, Registry } from '@fjell/registry';
3
+ import { Operations, Options } from '@fjell/lib';
3
4
  import { ItemRouter } from './ItemRouter';
4
5
  /**
5
6
  * The Express Router Instance interface represents a router model instance that extends the base Instance
@@ -7,6 +8,8 @@ import { ItemRouter } from './ItemRouter';
7
8
  *
8
9
  * The interface extends the base Instance (which provides coordinate and registry) with:
9
10
  * - router: Provides methods for routing HTTP requests and handling CRUD operations
11
+ * - operations: Provides methods for interacting with the data model (get, find, all, etc.)
12
+ * - options: Provides hooks, validators, finders, actions, and facets
10
13
  *
11
14
  * @template V - The type of the data model item, extending Item
12
15
  * @template S - The string literal type representing the model's key type
@@ -15,8 +18,12 @@ import { ItemRouter } from './ItemRouter';
15
18
  export interface Instance<V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> extends BaseInstance<S, L1, L2, L3, L4, L5> {
16
19
  /** The router object that provides methods for handling HTTP requests */
17
20
  router: ItemRouter<S, L1, L2, L3, L4, L5>;
21
+ /** The operations object that provides methods for interacting with the data model */
22
+ operations: Operations<V, S, L1, L2, L3, L4, L5>;
23
+ /** The options object that provides hooks, validators, finders, actions, and facets */
24
+ options: Options<V, S, L1, L2, L3, L4, L5>;
18
25
  /** The data model item type (for type safety) */
19
26
  readonly itemType?: V;
20
27
  }
21
- export declare const createInstance: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(registry: Registry, coordinate: Coordinate<S, L1, L2, L3, L4, L5>, router: ItemRouter<S, L1, L2, L3, L4, L5>) => Instance<V, S, L1, L2, L3, L4, L5>;
28
+ export declare const createInstance: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(registry: Registry, coordinate: Coordinate<S, L1, L2, L3, L4, L5>, router: ItemRouter<S, L1, L2, L3, L4, L5>, operations: Operations<V, S, L1, L2, L3, L4, L5>, options?: Options<V, S, L1, L2, L3, L4, L5>) => Instance<V, S, L1, L2, L3, L4, L5>;
22
29
  export declare const isInstance: (instance: any) => instance is Instance<any, any, any, any, any, any, any>;
package/dist/Instance.js CHANGED
@@ -2,20 +2,24 @@ import LibLogger from './logger.js';
2
2
  import { createInstance as createInstance$1 } from '@fjell/registry';
3
3
 
4
4
  const logger = LibLogger.get("Instance");
5
- const createInstance = (registry, coordinate, router)=>{
5
+ const createInstance = (registry, coordinate, router, operations, options)=>{
6
6
  logger.debug("createInstance", {
7
7
  coordinate,
8
8
  router,
9
- registry
9
+ registry,
10
+ operations,
11
+ options
10
12
  });
11
13
  const baseInstance = createInstance$1(registry, coordinate);
12
14
  return {
13
15
  ...baseInstance,
14
- router
16
+ router,
17
+ operations,
18
+ options: options || {}
15
19
  };
16
20
  };
17
21
  const isInstance = (instance)=>{
18
- return instance != null && typeof instance === 'object' && instance.coordinate != null && instance.router != null && instance.registry != null;
22
+ return instance != null && typeof instance === 'object' && instance.coordinate != null && instance.router != null && instance.registry != null && instance.operations != null && instance.options != null;
19
23
  };
20
24
 
21
25
  export { createInstance, isInstance };
@@ -1 +1 @@
1
- {"version":3,"file":"Instance.js","sources":["../src/Instance.ts"],"sourcesContent":["import LibLogger from \"./logger\";\nimport { Item } from \"@fjell/core\";\nimport { Instance as BaseInstance, Coordinate, createInstance as createBaseInstance, Registry } from \"@fjell/registry\";\nimport { ItemRouter } from \"./ItemRouter\";\n\nconst logger = LibLogger.get(\"Instance\");\n\n/**\n * The Express Router Instance interface represents a router model instance that extends the base Instance\n * from @fjell/registry and adds express router operations for handling HTTP requests.\n *\n * The interface extends the base Instance (which provides coordinate and registry) with:\n * - router: Provides methods for routing HTTP requests and handling CRUD operations\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport interface Instance<\n V extends Item<S, L1, L2, L3, L4, L5>,\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> extends BaseInstance<S, L1, L2, L3, L4, L5> {\n /** The router object that provides methods for handling HTTP requests */\n router: ItemRouter<S, L1, L2, L3, L4, L5>;\n /** The data model item type (for type safety) */\n readonly itemType?: V;\n}\n\nexport const createInstance = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 registry: Registry,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n router: ItemRouter<S, L1, L2, L3, L4, L5>,\n ): Instance<V, S, L1, L2, L3, L4, L5> => {\n logger.debug(\"createInstance\", { coordinate, router, registry });\n const baseInstance = createBaseInstance(registry, coordinate);\n return { ...baseInstance, router };\n}\n\nexport const isInstance = (instance: any): instance is Instance<any, any, any, any, any, any, any> => {\n return instance != null &&\n typeof instance === 'object' &&\n instance.coordinate != null &&\n instance.router != null &&\n instance.registry != null;\n}\n"],"names":["logger","LibLogger","get","createInstance","registry","coordinate","router","debug","baseInstance","createBaseInstance","isInstance","instance"],"mappings":";;;AAKA,MAAMA,MAAAA,GAASC,SAAAA,CAAUC,GAAG,CAAC,UAAA,CAAA;AA4BtB,MAAMC,cAAAA,GAAiB,CAS1BC,QAAAA,EACAC,UAAAA,EACAC,MAAAA,GAAAA;IAEFN,MAAAA,CAAOO,KAAK,CAAC,gBAAA,EAAkB;AAAEF,QAAAA,UAAAA;AAAYC,QAAAA,MAAAA;AAAQF,QAAAA;AAAS,KAAA,CAAA;IAC9D,MAAMI,YAAAA,GAAeC,iBAAmBL,QAAAA,EAAUC,UAAAA,CAAAA;IAClD,OAAO;AAAE,QAAA,GAAGG,YAAY;AAAEF,QAAAA;AAAO,KAAA;AACnC;AAEO,MAAMI,aAAa,CAACC,QAAAA,GAAAA;AACzB,IAAA,OAAOA,QAAAA,IAAY,IAAA,IACjB,OAAOA,QAAAA,KAAa,YACpBA,QAAAA,CAASN,UAAU,IAAI,IAAA,IACvBM,SAASL,MAAM,IAAI,IAAA,IACnBK,QAAAA,CAASP,QAAQ,IAAI,IAAA;AACzB;;;;"}
1
+ {"version":3,"file":"Instance.js","sources":["../src/Instance.ts"],"sourcesContent":["import LibLogger from \"./logger\";\nimport { Item } from \"@fjell/core\";\nimport { Instance as BaseInstance, Coordinate, createInstance as createBaseInstance, Registry } from \"@fjell/registry\";\nimport { Operations, Options } from \"@fjell/lib\";\nimport { ItemRouter } from \"./ItemRouter\";\n\nconst logger = LibLogger.get(\"Instance\");\n\n/**\n * The Express Router Instance interface represents a router model instance that extends the base Instance\n * from @fjell/registry and adds express router operations for handling HTTP requests.\n *\n * The interface extends the base Instance (which provides coordinate and registry) with:\n * - router: Provides methods for routing HTTP requests and handling CRUD operations\n * - operations: Provides methods for interacting with the data model (get, find, all, etc.)\n * - options: Provides hooks, validators, finders, actions, and facets\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport interface Instance<\n V extends Item<S, L1, L2, L3, L4, L5>,\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> extends BaseInstance<S, L1, L2, L3, L4, L5> {\n /** The router object that provides methods for handling HTTP requests */\n router: ItemRouter<S, L1, L2, L3, L4, L5>;\n /** The operations object that provides methods for interacting with the data model */\n operations: Operations<V, S, L1, L2, L3, L4, L5>;\n /** The options object that provides hooks, validators, finders, actions, and facets */\n options: Options<V, S, L1, L2, L3, L4, L5>;\n /** The data model item type (for type safety) */\n readonly itemType?: V;\n}\n\nexport const createInstance = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 registry: Registry,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>,\n ): Instance<V, S, L1, L2, L3, L4, L5> => {\n logger.debug(\"createInstance\", { coordinate, router, registry, operations, options });\n const baseInstance = createBaseInstance(registry, coordinate);\n return { ...baseInstance, router, operations, options: options || {} as Options<V, S, L1, L2, L3, L4, L5> };\n}\n\nexport const isInstance = (instance: any): instance is Instance<any, any, any, any, any, any, any> => {\n return instance != null &&\n typeof instance === 'object' &&\n instance.coordinate != null &&\n instance.router != null &&\n instance.registry != null &&\n instance.operations != null &&\n instance.options != null;\n}\n"],"names":["logger","LibLogger","get","createInstance","registry","coordinate","router","operations","options","debug","baseInstance","createBaseInstance","isInstance","instance"],"mappings":";;;AAMA,MAAMA,MAAAA,GAASC,SAAAA,CAAUC,GAAG,CAAC,UAAA,CAAA;MAkChBC,cAAAA,GAAiB,CAS1BC,QAAAA,EACAC,UAAAA,EACAC,QACAC,UAAAA,EACAC,OAAAA,GAAAA;IAEFR,MAAAA,CAAOS,KAAK,CAAC,gBAAA,EAAkB;AAAEJ,QAAAA,UAAAA;AAAYC,QAAAA,MAAAA;AAAQF,QAAAA,QAAAA;AAAUG,QAAAA,UAAAA;AAAYC,QAAAA;AAAQ,KAAA,CAAA;IACnF,MAAME,YAAAA,GAAeC,iBAAmBP,QAAAA,EAAUC,UAAAA,CAAAA;IAClD,OAAO;AAAE,QAAA,GAAGK,YAAY;AAAEJ,QAAAA,MAAAA;AAAQC,QAAAA,UAAAA;AAAYC,QAAAA,OAAAA,EAASA,WAAW;AAAwC,KAAA;AAC5G;AAEO,MAAMI,aAAa,CAACC,QAAAA,GAAAA;IACzB,OAAOA,QAAAA,IAAY,QACjB,OAAOA,QAAAA,KAAa,YACpBA,QAAAA,CAASR,UAAU,IAAI,IAAA,IACvBQ,QAAAA,CAASP,MAAM,IAAI,IAAA,IACnBO,QAAAA,CAAST,QAAQ,IAAI,IAAA,IACrBS,QAAAA,CAASN,UAAU,IAAI,IAAA,IACvBM,QAAAA,CAASL,OAAO,IAAI,IAAA;AACxB;;;;"}
@@ -8,14 +8,16 @@ const logger$1 = require('./logger.cjs');
8
8
  const logger = logger$1.default.get("InstanceFactory");
9
9
  /**
10
10
  * Factory function for creating express-router instances
11
- */ const createInstanceFactory = (router)=>{
11
+ */ const createInstanceFactory = (router, operations, options)=>{
12
12
  return (coordinate, context)=>{
13
13
  logger.debug("Creating express-router instance", {
14
14
  coordinate,
15
15
  registry: context.registry,
16
- router
16
+ router,
17
+ operations,
18
+ options
17
19
  });
18
- return Instance.createInstance(context.registry, coordinate, router);
20
+ return Instance.createInstance(context.registry, coordinate, router, operations, options);
19
21
  };
20
22
  };
21
23
 
@@ -1 +1 @@
1
- {"version":3,"file":"InstanceFactory.cjs","sources":["../src/InstanceFactory.ts"],"sourcesContent":["import { Item } from \"@fjell/core\";\nimport { ItemRouter } from \"./ItemRouter\";\nimport { InstanceFactory as BaseInstanceFactory, Registry, RegistryHub } from \"@fjell/registry\";\nimport { createInstance, Instance } from \"./Instance\";\nimport { Coordinate } from \"@fjell/registry\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"InstanceFactory\");\n\nexport type InstanceFactory<\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>\n) => BaseInstanceFactory<S, L1, L2, L3, L4, L5> & { readonly _itemType?: V };\n\n/**\n * Factory function for creating express-router instances\n */\nexport const createInstanceFactory = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>\n ): BaseInstanceFactory<S, L1, L2, L3, L4, L5> => {\n return (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: { registry: Registry, registryHub?: RegistryHub }) => {\n logger.debug(\"Creating express-router instance\", { coordinate, registry: context.registry, router });\n\n return createInstance(context.registry, coordinate, router) as Instance<V, S, L1, L2, L3, L4, L5>;\n };\n};\n"],"names":["logger","LibLogger","get","createInstanceFactory","router","coordinate","context","debug","registry","createInstance"],"mappings":";;;;;;;AAOA,MAAMA,MAAAA,GAASC,gBAAAA,CAAUC,GAAG,CAAC,iBAAA,CAAA;AAc7B;;IAGO,MAAMC,qBAAAA,GAAwB,CASjCC,MAAAA,GAAAA;AAEF,IAAA,OAAO,CAACC,UAAAA,EAA+CC,OAAAA,GAAAA;QACrDN,MAAAA,CAAOO,KAAK,CAAC,kCAAA,EAAoC;AAAEF,YAAAA,UAAAA;AAAYG,YAAAA,QAAAA,EAAUF,QAAQE,QAAQ;AAAEJ,YAAAA;AAAO,SAAA,CAAA;AAElG,QAAA,OAAOK,uBAAAA,CAAeH,OAAAA,CAAQE,QAAQ,EAAEH,UAAAA,EAAYD,MAAAA,CAAAA;AACtD,IAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"InstanceFactory.cjs","sources":["../src/InstanceFactory.ts"],"sourcesContent":["import { Item } from \"@fjell/core\";\nimport { ItemRouter } from \"./ItemRouter\";\nimport { InstanceFactory as BaseInstanceFactory, Registry, RegistryHub } from \"@fjell/registry\";\nimport { Operations, Options } from \"@fjell/lib\";\nimport { createInstance, Instance } from \"./Instance\";\nimport { Coordinate } from \"@fjell/registry\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"InstanceFactory\");\n\nexport type InstanceFactory<\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>\n) => BaseInstanceFactory<S, L1, L2, L3, L4, L5> & { readonly _itemType?: V };\n\n/**\n * Factory function for creating express-router instances\n */\nexport const createInstanceFactory = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>\n ): BaseInstanceFactory<S, L1, L2, L3, L4, L5> => {\n return (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: { registry: Registry, registryHub?: RegistryHub }) => {\n logger.debug(\"Creating express-router instance\", { coordinate, registry: context.registry, router, operations, options });\n\n return createInstance(context.registry, coordinate, router, operations, options) as Instance<V, S, L1, L2, L3, L4, L5>;\n };\n};\n"],"names":["logger","LibLogger","get","createInstanceFactory","router","operations","options","coordinate","context","debug","registry","createInstance"],"mappings":";;;;;;;AAQA,MAAMA,MAAAA,GAASC,gBAAAA,CAAUC,GAAG,CAAC,iBAAA,CAAA;AAgB7B;;AAEC,IACM,MAAMC,qBAAAA,GAAwB,CASjCC,QACAC,UAAAA,EACAC,OAAAA,GAAAA;AAEF,IAAA,OAAO,CAACC,UAAAA,EAA+CC,OAAAA,GAAAA;QACrDR,MAAAA,CAAOS,KAAK,CAAC,kCAAA,EAAoC;AAAEF,YAAAA,UAAAA;AAAYG,YAAAA,QAAAA,EAAUF,QAAQE,QAAQ;AAAEN,YAAAA,MAAAA;AAAQC,YAAAA,UAAAA;AAAYC,YAAAA;AAAQ,SAAA,CAAA;AAEvH,QAAA,OAAOK,wBAAeH,OAAAA,CAAQE,QAAQ,EAAEH,UAAAA,EAAYH,QAAQC,UAAAA,EAAYC,OAAAA,CAAAA;AAC1E,IAAA,CAAA;AACF;;;;"}
@@ -1,10 +1,11 @@
1
1
  import { Item } from '@fjell/core';
2
2
  import { ItemRouter } from './ItemRouter';
3
3
  import { InstanceFactory as BaseInstanceFactory } from '@fjell/registry';
4
- export type InstanceFactory<V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = (router: ItemRouter<S, L1, L2, L3, L4, L5>) => BaseInstanceFactory<S, L1, L2, L3, L4, L5> & {
4
+ import { Operations, Options } from '@fjell/lib';
5
+ export type InstanceFactory<V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = (router: ItemRouter<S, L1, L2, L3, L4, L5>, operations: Operations<V, S, L1, L2, L3, L4, L5>, options?: Options<V, S, L1, L2, L3, L4, L5>) => BaseInstanceFactory<S, L1, L2, L3, L4, L5> & {
5
6
  readonly _itemType?: V;
6
7
  };
7
8
  /**
8
9
  * Factory function for creating express-router instances
9
10
  */
10
- export declare const createInstanceFactory: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(router: ItemRouter<S, L1, L2, L3, L4, L5>) => BaseInstanceFactory<S, L1, L2, L3, L4, L5>;
11
+ export declare const createInstanceFactory: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(router: ItemRouter<S, L1, L2, L3, L4, L5>, operations: Operations<V, S, L1, L2, L3, L4, L5>, options?: Options<V, S, L1, L2, L3, L4, L5>) => BaseInstanceFactory<S, L1, L2, L3, L4, L5>;
@@ -4,14 +4,16 @@ import LibLogger from './logger.js';
4
4
  const logger = LibLogger.get("InstanceFactory");
5
5
  /**
6
6
  * Factory function for creating express-router instances
7
- */ const createInstanceFactory = (router)=>{
7
+ */ const createInstanceFactory = (router, operations, options)=>{
8
8
  return (coordinate, context)=>{
9
9
  logger.debug("Creating express-router instance", {
10
10
  coordinate,
11
11
  registry: context.registry,
12
- router
12
+ router,
13
+ operations,
14
+ options
13
15
  });
14
- return createInstance(context.registry, coordinate, router);
16
+ return createInstance(context.registry, coordinate, router, operations, options);
15
17
  };
16
18
  };
17
19
 
@@ -1 +1 @@
1
- {"version":3,"file":"InstanceFactory.js","sources":["../src/InstanceFactory.ts"],"sourcesContent":["import { Item } from \"@fjell/core\";\nimport { ItemRouter } from \"./ItemRouter\";\nimport { InstanceFactory as BaseInstanceFactory, Registry, RegistryHub } from \"@fjell/registry\";\nimport { createInstance, Instance } from \"./Instance\";\nimport { Coordinate } from \"@fjell/registry\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"InstanceFactory\");\n\nexport type InstanceFactory<\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>\n) => BaseInstanceFactory<S, L1, L2, L3, L4, L5> & { readonly _itemType?: V };\n\n/**\n * Factory function for creating express-router instances\n */\nexport const createInstanceFactory = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>\n ): BaseInstanceFactory<S, L1, L2, L3, L4, L5> => {\n return (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: { registry: Registry, registryHub?: RegistryHub }) => {\n logger.debug(\"Creating express-router instance\", { coordinate, registry: context.registry, router });\n\n return createInstance(context.registry, coordinate, router) as Instance<V, S, L1, L2, L3, L4, L5>;\n };\n};\n"],"names":["logger","LibLogger","get","createInstanceFactory","router","coordinate","context","debug","registry","createInstance"],"mappings":";;;AAOA,MAAMA,MAAAA,GAASC,SAAAA,CAAUC,GAAG,CAAC,iBAAA,CAAA;AAc7B;;IAGO,MAAMC,qBAAAA,GAAwB,CASjCC,MAAAA,GAAAA;AAEF,IAAA,OAAO,CAACC,UAAAA,EAA+CC,OAAAA,GAAAA;QACrDN,MAAAA,CAAOO,KAAK,CAAC,kCAAA,EAAoC;AAAEF,YAAAA,UAAAA;AAAYG,YAAAA,QAAAA,EAAUF,QAAQE,QAAQ;AAAEJ,YAAAA;AAAO,SAAA,CAAA;AAElG,QAAA,OAAOK,cAAAA,CAAeH,OAAAA,CAAQE,QAAQ,EAAEH,UAAAA,EAAYD,MAAAA,CAAAA;AACtD,IAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"InstanceFactory.js","sources":["../src/InstanceFactory.ts"],"sourcesContent":["import { Item } from \"@fjell/core\";\nimport { ItemRouter } from \"./ItemRouter\";\nimport { InstanceFactory as BaseInstanceFactory, Registry, RegistryHub } from \"@fjell/registry\";\nimport { Operations, Options } from \"@fjell/lib\";\nimport { createInstance, Instance } from \"./Instance\";\nimport { Coordinate } from \"@fjell/registry\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"InstanceFactory\");\n\nexport type InstanceFactory<\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>\n) => BaseInstanceFactory<S, L1, L2, L3, L4, L5> & { readonly _itemType?: V };\n\n/**\n * Factory function for creating express-router instances\n */\nexport const createInstanceFactory = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>\n ): BaseInstanceFactory<S, L1, L2, L3, L4, L5> => {\n return (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: { registry: Registry, registryHub?: RegistryHub }) => {\n logger.debug(\"Creating express-router instance\", { coordinate, registry: context.registry, router, operations, options });\n\n return createInstance(context.registry, coordinate, router, operations, options) as Instance<V, S, L1, L2, L3, L4, L5>;\n };\n};\n"],"names":["logger","LibLogger","get","createInstanceFactory","router","operations","options","coordinate","context","debug","registry","createInstance"],"mappings":";;;AAQA,MAAMA,MAAAA,GAASC,SAAAA,CAAUC,GAAG,CAAC,iBAAA,CAAA;AAgB7B;;AAEC,IACM,MAAMC,qBAAAA,GAAwB,CASjCC,QACAC,UAAAA,EACAC,OAAAA,GAAAA;AAEF,IAAA,OAAO,CAACC,UAAAA,EAA+CC,OAAAA,GAAAA;QACrDR,MAAAA,CAAOS,KAAK,CAAC,kCAAA,EAAoC;AAAEF,YAAAA,UAAAA;AAAYG,YAAAA,QAAAA,EAAUF,QAAQE,QAAQ;AAAEN,YAAAA,MAAAA;AAAQC,YAAAA,UAAAA;AAAYC,YAAAA;AAAQ,SAAA,CAAA;AAEvH,QAAA,OAAOK,eAAeH,OAAAA,CAAQE,QAAQ,EAAEH,UAAAA,EAAYH,QAAQC,UAAAA,EAAYC,OAAAA,CAAAA;AAC1E,IAAA,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ItemRouter.cjs","sources":["../src/ItemRouter.ts"],"sourcesContent":["import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { Instance, NotFoundError } from \"@fjell/lib\";\nimport deepmerge from \"deepmerge\";\nimport { Request, Response, Router } from \"express\";\nimport LibLogger from \"./logger\";\n\nexport type ItemRouterOptions = Record<string, never>;\n\nexport class ItemRouter<\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n protected lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;\n private keyType: S;\n protected options: ItemRouterOptions;\n private childRouters: Record<string, Router> = {};\n protected logger;\n\n constructor(\n lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>,\n keyType: S,\n options: ItemRouterOptions = {}\n ) {\n this.lib = lib;\n this.keyType = keyType;\n this.options = options;\n this.logger = LibLogger.get(\"ItemRouter\", keyType);\n }\n\n public getPkType = (): S => {\n return this.keyType;\n }\n\n protected getPkParam = (): string => {\n return `${this.getPkType()}Pk`;\n }\n\n protected getLk(res: Response): LocKey<S> {\n return { kt: this.keyType, lk: res.locals[this.getPkParam()] };\n }\n\n // this is meant to be consumed by children routers\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n return [this.getLk(res)] as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getPk(res: Response): PriKey<S> {\n return cPK<S>(res.locals[this.getPkParam()], this.getPkType());\n }\n\n // Unless this is a contained router, the locations will always be an empty array.\n /* eslint-disable */\n protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [] {\n throw new Error('Method not implemented in an abstract router');\n }\n /* eslint-enable */\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5> {\n throw new Error('Method not implemented in an abstract router');\n }\n\n protected postAllAction = async (req: Request, res: Response) => {\n const libOptions = this.lib.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
+ {"version":3,"file":"ItemRouter.cjs","sources":["../src/ItemRouter.ts"],"sourcesContent":["import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { NotFoundError } from \"@fjell/lib\";\nimport { Instance } from \"./Instance\";\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,5 +1,5 @@
1
1
  import { ComKey, Item, LocKey, LocKeyArray, PriKey } from '@fjell/core';
2
- import { Instance } from '@fjell/lib';
2
+ import { Instance } from './Instance';
3
3
  import { Request, Response, Router } from 'express';
4
4
  export type ItemRouterOptions = Record<string, never>;
5
5
  export declare class ItemRouter<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> {
@@ -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.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
+ {"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 { NotFoundError } from \"@fjell/lib\";\nimport { Instance } from \"./Instance\";\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 { 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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"}
1
+ {"version":3,"file":"PItemRouter.cjs","sources":["../src/PItemRouter.ts"],"sourcesContent":["import { Item, ItemQuery, paramsToQuery, PriKey, QueryParams, validatePK } from \"@fjell/core\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"./Instance\";\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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"}
@@ -1,6 +1,6 @@
1
1
  import { Item, PriKey } from '@fjell/core';
2
- import { Instance } from '@fjell/lib';
3
2
  import { ItemRouter, ItemRouterOptions } from './ItemRouter';
3
+ import { Instance } from './Instance';
4
4
  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: Instance<T, S>, keyType: S, options?: ItemRouterOptions);
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"PItemRouter.js","sources":["../src/PItemRouter.ts"],"sourcesContent":["import { Item, ItemQuery, paramsToQuery, PriKey, QueryParams, validatePK } from \"@fjell/core\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"./Instance\";\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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"}
package/dist/index.cjs CHANGED
@@ -584,33 +584,39 @@ class PItemRouter extends ItemRouter {
584
584
  }
585
585
 
586
586
  const logger$2 = LibLogger.get("Instance");
587
- const createInstance = (registry$1, coordinate, router)=>{
587
+ const createInstance = (registry$1, coordinate, router, operations, options)=>{
588
588
  logger$2.debug("createInstance", {
589
589
  coordinate,
590
590
  router,
591
- registry: registry$1
591
+ registry: registry$1,
592
+ operations,
593
+ options
592
594
  });
593
595
  const baseInstance = registry.createInstance(registry$1, coordinate);
594
596
  return {
595
597
  ...baseInstance,
596
- router
598
+ router,
599
+ operations,
600
+ options: options || {}
597
601
  };
598
602
  };
599
603
  const isInstance = (instance)=>{
600
- return instance != null && typeof instance === 'object' && instance.coordinate != null && instance.router != null && instance.registry != null;
604
+ return instance != null && typeof instance === 'object' && instance.coordinate != null && instance.router != null && instance.registry != null && instance.operations != null && instance.options != null;
601
605
  };
602
606
 
603
607
  const logger$1 = LibLogger.get("InstanceFactory");
604
608
  /**
605
609
  * Factory function for creating express-router instances
606
- */ const createInstanceFactory = (router)=>{
610
+ */ const createInstanceFactory = (router, operations, options)=>{
607
611
  return (coordinate, context)=>{
608
612
  logger$1.debug("Creating express-router instance", {
609
613
  coordinate,
610
614
  registry: context.registry,
611
- router
615
+ router,
616
+ operations,
617
+ options
612
618
  });
613
- return createInstance(context.registry, coordinate, router);
619
+ return createInstance(context.registry, coordinate, router, operations, options);
614
620
  };
615
621
  };
616
622
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/logger.ts","../src/ItemRouter.ts","../src/CItemRouter.ts","../src/PItemRouter.ts","../src/Instance.ts","../src/InstanceFactory.ts","../src/Registry.ts"],"sourcesContent":["import Logging from '@fjell/logging';\n\nconst LibLogger = Logging.getLogger('@fjell/express-router');\n\nexport default LibLogger;\n","import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { Instance, NotFoundError } from \"@fjell/lib\";\nimport deepmerge from \"deepmerge\";\nimport { Request, Response, Router } from \"express\";\nimport LibLogger from \"./logger\";\n\nexport type ItemRouterOptions = Record<string, never>;\n\nexport class ItemRouter<\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n protected lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;\n private keyType: S;\n protected options: ItemRouterOptions;\n private childRouters: Record<string, Router> = {};\n protected logger;\n\n constructor(\n lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>,\n keyType: S,\n options: ItemRouterOptions = {}\n ) {\n this.lib = lib;\n this.keyType = keyType;\n this.options = options;\n this.logger = LibLogger.get(\"ItemRouter\", keyType);\n }\n\n public getPkType = (): S => {\n return this.keyType;\n }\n\n protected getPkParam = (): string => {\n return `${this.getPkType()}Pk`;\n }\n\n protected getLk(res: Response): LocKey<S> {\n return { kt: this.keyType, lk: res.locals[this.getPkParam()] };\n }\n\n // this is meant to be consumed by children routers\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n return [this.getLk(res)] as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getPk(res: Response): PriKey<S> {\n return cPK<S>(res.locals[this.getPkParam()], this.getPkType());\n }\n\n // Unless this is a contained router, the locations will always be an empty array.\n /* eslint-disable */\n protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [] {\n throw new Error('Method not implemented in an abstract router');\n }\n /* eslint-enable */\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5> {\n throw new Error('Method not implemented in an abstract router');\n }\n\n protected postAllAction = async (req: Request, res: Response) => {\n const libOptions = this.lib.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","import {\n ComKey, Item, ItemQuery, LocKey, LocKeyArray, paramsToQuery, PriKey, QueryParams, validatePK\n} from \"@fjell/core\";\nimport { Request, Response } from \"express\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"@fjell/lib\";\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class CItemRouter<\n T extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends ItemRouter<S, L1, L2, L3, L4, L5> {\n\n private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;\n\n constructor(\n lib: Instance<T, S, L1, L2, L3, L4, L5>,\n type: S,\n parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,\n options: ItemRouterOptions = {},\n ) {\n super(lib as any, type, options);\n this.parentRoute = parentRoute;\n }\n\n public hasParent(): boolean {\n return !!this.parentRoute;\n }\n\n public getIk(res: Response): ComKey<S, L1, L2, L3, L4, L5> {\n const pri = this.getPk(res) as PriKey<S>;\n const loc = this.getLocations(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n return { kt: pri.kt, pk: pri.pk, loc }\n }\n\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n /**\n * A location key array is passed to a child router to provide contextfor the items it will\n * be working with. It is always a concatenation of \"My LKA\" + \"Parent LKA\" which will\n * bubble all the way up to the root Primary.\n */\n let lka: LocKey<S | L1 | L2 | L3 | L4>[] = [this.getLk(res)];\n lka = lka.concat(this.parentRoute.getLKA(res) as LocKey<S | L1 | L2 | L3 | L4>[]);\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> {\n return this.parentRoute.getLKA(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n }\n\n protected createItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Creating Item', { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);\n let item = validatePK(await libOperations.create(\n itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n item = await this.postCreateItem(item);\n this.logger.default('Created Item %j', item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n let items: Item<S, L1, L2, L3, L4, L5>[] = [];\n\n if (finder) {\n // If finder is defined? Call a finder.\n this.logger.default('Finding Items with Finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));\n items = item ? [item] : [];\n } else {\n items = await libOperations.find(finder, JSON.parse(finderParams), this.getLocations(res));\n }\n } else {\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n this.logger.default('Finding Items with Query: %j', itemQuery);\n items = await libOperations.all(itemQuery, this.getLocations(res));\n this.logger.default('Found %d Items with Query', items.length);\n }\n\n res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));\n };\n\n}\n","import { Item, ItemQuery, paramsToQuery, PriKey, QueryParams, validatePK } from \"@fjell/core\";\nimport { 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","import LibLogger from \"./logger\";\nimport { Item } from \"@fjell/core\";\nimport { Instance as BaseInstance, Coordinate, createInstance as createBaseInstance, Registry } from \"@fjell/registry\";\nimport { ItemRouter } from \"./ItemRouter\";\n\nconst logger = LibLogger.get(\"Instance\");\n\n/**\n * The Express Router Instance interface represents a router model instance that extends the base Instance\n * from @fjell/registry and adds express router operations for handling HTTP requests.\n *\n * The interface extends the base Instance (which provides coordinate and registry) with:\n * - router: Provides methods for routing HTTP requests and handling CRUD operations\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport interface Instance<\n V extends Item<S, L1, L2, L3, L4, L5>,\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> extends BaseInstance<S, L1, L2, L3, L4, L5> {\n /** The router object that provides methods for handling HTTP requests */\n router: ItemRouter<S, L1, L2, L3, L4, L5>;\n /** The data model item type (for type safety) */\n readonly itemType?: V;\n}\n\nexport const createInstance = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 registry: Registry,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n router: ItemRouter<S, L1, L2, L3, L4, L5>,\n ): Instance<V, S, L1, L2, L3, L4, L5> => {\n logger.debug(\"createInstance\", { coordinate, router, registry });\n const baseInstance = createBaseInstance(registry, coordinate);\n return { ...baseInstance, router };\n}\n\nexport const isInstance = (instance: any): instance is Instance<any, any, any, any, any, any, any> => {\n return instance != null &&\n typeof instance === 'object' &&\n instance.coordinate != null &&\n instance.router != null &&\n instance.registry != null;\n}\n","import { Item } from \"@fjell/core\";\nimport { ItemRouter } from \"./ItemRouter\";\nimport { InstanceFactory as BaseInstanceFactory, Registry, RegistryHub } from \"@fjell/registry\";\nimport { createInstance, Instance } from \"./Instance\";\nimport { Coordinate } from \"@fjell/registry\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"InstanceFactory\");\n\nexport type InstanceFactory<\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>\n) => BaseInstanceFactory<S, L1, L2, L3, L4, L5> & { readonly _itemType?: V };\n\n/**\n * Factory function for creating express-router instances\n */\nexport const createInstanceFactory = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>\n ): BaseInstanceFactory<S, L1, L2, L3, L4, L5> => {\n return (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: { registry: Registry, registryHub?: RegistryHub }) => {\n logger.debug(\"Creating express-router instance\", { coordinate, registry: context.registry, router });\n\n return createInstance(context.registry, coordinate, router) as Instance<V, S, L1, L2, L3, L4, L5>;\n };\n};\n","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":["LibLogger","Logging","getLogger","ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","_define_property","childRouters","logger","postAllAction","req","libOptions","libOperations","operations","debug","query","params","allActionKey","path","substring","lastIndexOf","allActions","error","status","json","allAction","body","err","message","stack","getAllFacet","facetKey","allFacets","facet","combinedQueryParams","allFacet","postItemAction","ik","actionKey","actions","action","getItemFacet","facets","pkType","get","findItems","post","createItem","default","Object","keys","forEach","itemRouter","getItem","put","updateItem","delete","deleteItem","itemActions","itemFacets","use","validatePrimaryKeyValue","configureChildRouters","next","pkParamValue","validatePKParam","originalUrl","addChildRouter","postCreateItem","item","removedItem","remove","validatePK","NotFoundError","itemToUpdate","convertDates","retItem","update","events","key","assign","deepmerge","at","Date","validPkParam","length","CItemRouter","hasParent","parentRoute","pri","loc","pk","lka","concat","type","itemToCreate","create","locations","finder","finderParams","one","items","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","map","PItemRouter","createInstance","registry","coordinate","baseInstance","createBaseInstance","isInstance","instance","createInstanceFactory","context","createRegistryFactory","registryHub","baseRegistry","createBaseRegistry","createRegistry"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/logger.ts","../src/ItemRouter.ts","../src/CItemRouter.ts","../src/PItemRouter.ts","../src/Instance.ts","../src/InstanceFactory.ts","../src/Registry.ts"],"sourcesContent":["import Logging from '@fjell/logging';\n\nconst LibLogger = Logging.getLogger('@fjell/express-router');\n\nexport default LibLogger;\n","import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { NotFoundError } from \"@fjell/lib\";\nimport { Instance } from \"./Instance\";\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","import {\n ComKey, Item, ItemQuery, LocKey, LocKeyArray, paramsToQuery, PriKey, QueryParams, validatePK\n} from \"@fjell/core\";\nimport { Request, Response } from \"express\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"./Instance\";\n\ninterface ParsedQuery {\n [key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];\n}\n\nexport class CItemRouter<\n T extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends ItemRouter<S, L1, L2, L3, L4, L5> {\n\n private parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>;\n\n constructor(\n lib: Instance<T, S, L1, L2, L3, L4, L5>,\n type: S,\n parentRoute: ItemRouter<L1, L2, L3, L4, L5, never>,\n options: ItemRouterOptions = {},\n ) {\n super(lib as any, type, options);\n this.parentRoute = parentRoute;\n }\n\n public hasParent(): boolean {\n return !!this.parentRoute;\n }\n\n public getIk(res: Response): ComKey<S, L1, L2, L3, L4, L5> {\n const pri = this.getPk(res) as PriKey<S>;\n const loc = this.getLocations(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n return { kt: pri.kt, pk: pri.pk, loc }\n }\n\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n /**\n * A location key array is passed to a child router to provide contextfor the items it will\n * be working with. It is always a concatenation of \"My LKA\" + \"Parent LKA\" which will\n * bubble all the way up to the root Primary.\n */\n let lka: LocKey<S | L1 | L2 | L3 | L4>[] = [this.getLk(res)];\n lka = lka.concat(this.parentRoute.getLKA(res) as LocKey<S | L1 | L2 | L3 | L4>[]);\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> {\n return this.parentRoute.getLKA(res) as LocKeyArray<L1, L2, L3, L4, L5>;\n }\n\n protected createItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.default('Creating Item', { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const itemToCreate = this.convertDates(req.body as Item<S, L1, L2, L3, L4, L5>);\n let item = validatePK(await libOperations.create(\n itemToCreate, { locations: this.getLocations(res) }), this.getPkType()) as Item<S, L1, L2, L3, L4, L5>;\n item = await this.postCreateItem(item);\n this.logger.default('Created Item %j', item);\n res.json(item);\n };\n\n protected findItems = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n const query: ParsedQuery = req.query as unknown as ParsedQuery;\n const finder = query['finder'] as string;\n const finderParams = query['finderParams'] as string;\n const one = query['one'] as string;\n\n let items: Item<S, L1, L2, L3, L4, L5>[] = [];\n\n if (finder) {\n // If finder is defined? Call a finder.\n this.logger.default('Finding Items with Finder', { finder, finderParams, one });\n\n if (one === 'true') {\n const item = await (this.lib as any).findOne(finder, JSON.parse(finderParams), this.getLocations(res));\n items = item ? [item] : [];\n } else {\n items = await libOperations.find(finder, JSON.parse(finderParams), this.getLocations(res));\n }\n } else {\n // TODO: This is once of the more important places to perform some validaation and feedback\n const itemQuery: ItemQuery = paramsToQuery(req.query as QueryParams);\n this.logger.default('Finding Items with Query: %j', itemQuery);\n items = await libOperations.all(itemQuery, this.getLocations(res));\n this.logger.default('Found %d Items with Query', items.length);\n }\n\n res.json(items.map((item: Item<S, L1, L2, L3, L4, L5>) => validatePK(item, this.getPkType())));\n };\n\n}\n","import { Item, ItemQuery, paramsToQuery, PriKey, QueryParams, validatePK } from \"@fjell/core\";\nimport { ItemRouter, ItemRouterOptions } from \"@/ItemRouter\";\nimport { Instance } from \"./Instance\";\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","import LibLogger from \"./logger\";\nimport { Item } from \"@fjell/core\";\nimport { Instance as BaseInstance, Coordinate, createInstance as createBaseInstance, Registry } from \"@fjell/registry\";\nimport { Operations, Options } from \"@fjell/lib\";\nimport { ItemRouter } from \"./ItemRouter\";\n\nconst logger = LibLogger.get(\"Instance\");\n\n/**\n * The Express Router Instance interface represents a router model instance that extends the base Instance\n * from @fjell/registry and adds express router operations for handling HTTP requests.\n *\n * The interface extends the base Instance (which provides coordinate and registry) with:\n * - router: Provides methods for routing HTTP requests and handling CRUD operations\n * - operations: Provides methods for interacting with the data model (get, find, all, etc.)\n * - options: Provides hooks, validators, finders, actions, and facets\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport interface Instance<\n V extends Item<S, L1, L2, L3, L4, L5>,\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> extends BaseInstance<S, L1, L2, L3, L4, L5> {\n /** The router object that provides methods for handling HTTP requests */\n router: ItemRouter<S, L1, L2, L3, L4, L5>;\n /** The operations object that provides methods for interacting with the data model */\n operations: Operations<V, S, L1, L2, L3, L4, L5>;\n /** The options object that provides hooks, validators, finders, actions, and facets */\n options: Options<V, S, L1, L2, L3, L4, L5>;\n /** The data model item type (for type safety) */\n readonly itemType?: V;\n}\n\nexport const createInstance = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 registry: Registry,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>,\n ): Instance<V, S, L1, L2, L3, L4, L5> => {\n logger.debug(\"createInstance\", { coordinate, router, registry, operations, options });\n const baseInstance = createBaseInstance(registry, coordinate);\n return { ...baseInstance, router, operations, options: options || {} as Options<V, S, L1, L2, L3, L4, L5> };\n}\n\nexport const isInstance = (instance: any): instance is Instance<any, any, any, any, any, any, any> => {\n return instance != null &&\n typeof instance === 'object' &&\n instance.coordinate != null &&\n instance.router != null &&\n instance.registry != null &&\n instance.operations != null &&\n instance.options != null;\n}\n","import { Item } from \"@fjell/core\";\nimport { ItemRouter } from \"./ItemRouter\";\nimport { InstanceFactory as BaseInstanceFactory, Registry, RegistryHub } from \"@fjell/registry\";\nimport { Operations, Options } from \"@fjell/lib\";\nimport { createInstance, Instance } from \"./Instance\";\nimport { Coordinate } from \"@fjell/registry\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"InstanceFactory\");\n\nexport type InstanceFactory<\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>\n) => BaseInstanceFactory<S, L1, L2, L3, L4, L5> & { readonly _itemType?: V };\n\n/**\n * Factory function for creating express-router instances\n */\nexport const createInstanceFactory = <\n V extends Item<S, L1, L2, L3, L4, L5>,\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 router: ItemRouter<S, L1, L2, L3, L4, L5>,\n operations: Operations<V, S, L1, L2, L3, L4, L5>,\n options?: Options<V, S, L1, L2, L3, L4, L5>\n ): BaseInstanceFactory<S, L1, L2, L3, L4, L5> => {\n return (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: { registry: Registry, registryHub?: RegistryHub }) => {\n logger.debug(\"Creating express-router instance\", { coordinate, registry: context.registry, router, operations, options });\n\n return createInstance(context.registry, coordinate, router, operations, options) as Instance<V, S, L1, L2, L3, L4, L5>;\n };\n};\n","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":["LibLogger","Logging","getLogger","ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","_define_property","childRouters","logger","postAllAction","req","libOptions","libOperations","operations","debug","query","params","allActionKey","path","substring","lastIndexOf","allActions","error","status","json","allAction","body","err","message","stack","getAllFacet","facetKey","allFacets","facet","combinedQueryParams","allFacet","postItemAction","ik","actionKey","actions","action","getItemFacet","facets","pkType","get","findItems","post","createItem","default","Object","keys","forEach","itemRouter","getItem","put","updateItem","delete","deleteItem","itemActions","itemFacets","use","validatePrimaryKeyValue","configureChildRouters","next","pkParamValue","validatePKParam","originalUrl","addChildRouter","postCreateItem","item","removedItem","remove","validatePK","NotFoundError","itemToUpdate","convertDates","retItem","update","events","key","assign","deepmerge","at","Date","validPkParam","length","CItemRouter","hasParent","parentRoute","pri","loc","pk","lka","concat","type","itemToCreate","create","locations","finder","finderParams","one","items","findOne","JSON","parse","find","itemQuery","paramsToQuery","all","map","PItemRouter","createInstance","registry","coordinate","baseInstance","createBaseInstance","isInstance","instance","createInstanceFactory","context","createRegistryFactory","registryHub","baseRegistry","createBaseRegistry","createRegistry"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjell/express-router",
3
- "version": "4.4.11",
3
+ "version": "4.4.12",
4
4
  "license": "Apache-2.0",
5
5
  "keywords": [
6
6
  "express",
@@ -23,9 +23,9 @@
23
23
  "type": "module",
24
24
  "dependencies": {
25
25
  "@fjell/core": "^4.4.7",
26
- "@fjell/lib": "^4.4.12",
26
+ "@fjell/lib": "^4.4.13",
27
27
  "@fjell/logging": "^4.4.7",
28
- "@fjell/registry": "^4.4.7",
28
+ "@fjell/registry": "^4.4.11",
29
29
  "deepmerge": "^4.3.1",
30
30
  "express": "^5.1.0"
31
31
  },