@autofleet/node-common 4.1.11 → 4.2.1

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.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`express`);c=s(c);let l=require(`node:stream`);l=s(l);const u=[`all`,`get`,`post`,`put`,`delete`,`patch`,`options`,`head`],d=(e,t)=>async(n,r,i)=>{try{await t(n,r,i)}catch(t){let n=t;if(e.error(n.message),n.statusCode&&n.statusCode<500){r.status(400).json({error:n.message,status:`ERROR`});return}i(n)}},f=({logger:e,...t})=>{let n=(0,c.Router)({mergeParams:!0,...t});return u.forEach(e=>{let t=n[e].bind(n);n[e]=(...e)=>t(...e.map(r))}),n;function r(t){return Array.isArray(t)?t.map(r):typeof t==`function`?d(e,t):t}};async function p(e,t,{concurrency:n,signal:r}={}){return n?l.Readable.from(e).map(t,{concurrency:n,signal:r}).toArray():Promise.all(Array.from(e,e=>t(e,r?{signal:r}:void 0)))}const m=Object.freeze({ok:`OK`,error:`ERROR`,fail:`FAIL`}),h=f;exports.AfRouter=f,exports.Router=h,exports.consts=m,exports.promiseMap=p;
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`express`);c=s(c);let l=require(`node:stream`);l=s(l);let u=require(`node:crypto`);u=s(u);let d=require(`@autofleet/lru-cache`);d=s(d);const f=[`all`,`get`,`post`,`put`,`delete`,`patch`,`options`,`head`],p=(e,t)=>async(n,r,i)=>{try{await t(n,r,i)}catch(t){let n=t;if(e.error(n.message),n.statusCode&&n.statusCode<500){r.status(400).json({error:n.message,status:`ERROR`});return}i(n)}},m=({logger:e,...t})=>{let n=(0,c.Router)({mergeParams:!0,...t});return f.forEach(e=>{let t=n[e].bind(n);n[e]=(...e)=>t(...e.map(r))}),n;function r(t){return Array.isArray(t)?t.map(r):typeof t==`function`?p(e,t):t}};async function h(e,t,{concurrency:n,signal:r}={}){return n?l.Readable.from(e).map(t,{concurrency:n,signal:r}).toArray():Promise.all(Array.from(e,e=>t(e,r?{signal:r}:void 0)))}const g=Object.freeze({ok:`OK`,error:`ERROR`,fail:`FAIL`}),_=Object.freeze({DNS:`6ba7b810-9dad-11d1-80b4-00c04fd430c8`,URL:`6ba7b811-9dad-11d1-80b4-00c04fd430c8`,OID:`6ba7b812-9dad-11d1-80b4-00c04fd430c8`,X500:`6ba7b814-9dad-11d1-80b4-00c04fd430c8`});function v(e){if(typeof e!=`string`)throw TypeError(`namespace must be a UUID string`);if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e))throw TypeError(`invalid namespace UUID`);let t=e.replace(/-/g,``).toLowerCase(),n=Buffer.allocUnsafe(16);for(let e=0;e<16;e++)n[e]=parseInt(t.slice(e*2,e*2+2),16);return n}function y(e){return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}function b(e,t){if(typeof e!=`string`)throw TypeError(`name must be a string`);let n=(0,u.createHash)(`sha1`).update(t).update(e,`utf8`).digest();return n[6]=n[6]&15|80,n[8]=n[8]&63|128,y(n.subarray(0,16).toString(`hex`))}function x(e,t){return b(e,v(t in _?_[t]:t))}function S(e){let t=v(e in _?_[e]:e);return e=>b(e,t)}const C=new d.LruCache(5);function w(e){return e.trim().toLowerCase().normalize(`NFC`)}function T(e){let{input:t,namespace:n,shouldNormalize:r=!0}=e,i=C.get(n);return i||(i=S(x(n,_.URL)),C.set(n,i)),i(r?w(t):t)}const E=m;exports.AfRouter=m,exports.NAMESPACE=_,exports.Router=E,exports.consts=g,exports.createV5=S,exports.promiseMap=h,exports.stringToConsistentUuid=T,exports.v5=x;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["newMethodHandler: IRouterMatcher<Router>","Readable","consts: Readonly<{ ok: 'OK'; error: 'ERROR'; fail: 'FAIL'; }>","Router: typeof AfRouter"],"sources":["../src/router/index.ts","../src/promise-utils/index.ts","../src/consts/index.ts","../src/index.ts"],"sourcesContent":["import {\n Router, type Request, type Response, type NextFunction, type Handler, type RouterOptions, type IRouterMatcher,\n} from 'express';\nimport type { LoggerInstanceManager } from '@autofleet/logger';\n\nexport const METHODS = [\n 'all',\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'options',\n 'head',\n] as const;\n\nconst AfEntryPoint = (logger: LoggerInstanceManager, func: (req: Request, res: Response, nextFn: NextFunction) => void | PromiseLike<void>): Handler => async (req, res, next) => {\n try {\n await func(req, res, next);\n } catch (err) {\n const e = err as Error & { statusCode?: number; };\n logger.error(e.message);\n if (e.statusCode && e.statusCode < 500) {\n res.status(400).json({ error: e.message, status: 'ERROR' });\n return;\n }\n next(e);\n }\n};\n\n/** @returns a monkey-patched express router that will handle async routes (and force a 400 status for codes <500) */\nexport const AfRouter = ({ logger, ...options }: RouterOptions & { logger: LoggerInstanceManager; }): Router => {\n const myRouter = Router({ mergeParams: true, ...options });\n METHODS.forEach((method) => {\n const internalMethod = myRouter[method].bind(myRouter);\n const newMethodHandler: IRouterMatcher<Router> = (...args: [...unknown[]]) => internalMethod(...args.map(argMapper) as [string]);\n myRouter[method] = newMethodHandler;\n });\n return myRouter;\n\n function argMapper(args: unknown): unknown {\n if (Array.isArray(args)) return args.map(argMapper);\n return typeof args === 'function' ? AfEntryPoint(logger, args as Handler) : args;\n }\n};\n","import { Readable } from 'node:stream';\n\nexport async function promiseMap<T, U>(\n iterable: T[] | Iterable<T>,\n handler: (item: T, options?: { signal?: AbortSignal; }) => PromiseLike<U>,\n { concurrency, signal }: Parameters<Readable['map']>[1] = {},\n): Promise<U[]> {\n if (!concurrency) {\n return Promise.all(Array.from(iterable, item => handler(item, signal ? { signal } : undefined)));\n }\n return Readable.from(iterable).map(handler, { concurrency, signal }).toArray();\n}\n","export const consts: Readonly<{ ok: 'OK'; error: 'ERROR'; fail: 'FAIL'; }> = Object.freeze({\n ok: 'OK',\n error: 'ERROR',\n fail: 'FAIL',\n});\n","import { AfRouter } from './router';\n\nexport { AfRouter } from './router';\nexport { promiseMap } from './promise-utils';\n\nexport { consts } from './consts';\n\nexport const Router: typeof AfRouter = AfRouter;\n"],"mappings":"kiBAKA,MAAa,EAAU,CACrB,MACA,MACA,OACA,MACA,SACA,QACA,UACA,OACD,CAEK,GAAgB,EAA+B,IAAmG,MAAO,EAAK,EAAK,IAAS,CAChL,GAAI,CACF,MAAM,EAAK,EAAK,EAAK,EAAK,OACnB,EAAK,CACZ,IAAM,EAAI,EAEV,GADA,EAAO,MAAM,EAAE,QAAQ,CACnB,EAAE,YAAc,EAAE,WAAa,IAAK,CACtC,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,MAAO,EAAE,QAAS,OAAQ,QAAS,CAAC,CAC3D,OAEF,EAAK,EAAE,GAKE,GAAY,CAAE,SAAQ,GAAG,KAA0E,CAC9G,IAAM,GAAA,EAAA,EAAA,QAAkB,CAAE,YAAa,GAAM,GAAG,EAAS,CAAC,CAM1D,OALA,EAAQ,QAAS,GAAW,CAC1B,IAAM,EAAiB,EAAS,GAAQ,KAAK,EAAS,CAEtD,EAAS,IADyC,GAAG,IAAyB,EAAe,GAAG,EAAK,IAAI,EAAU,CAAa,EAEhI,CACK,EAEP,SAAS,EAAU,EAAwB,CAEzC,OADI,MAAM,QAAQ,EAAK,CAAS,EAAK,IAAI,EAAU,CAC5C,OAAO,GAAS,WAAa,EAAa,EAAQ,EAAgB,CAAG,ICxChF,eAAsB,EACpB,EACA,EACA,CAAE,cAAa,UAA2C,EAAE,CAC9C,CAId,OAHK,EAGEC,EAAAA,SAAS,KAAK,EAAS,CAAC,IAAI,EAAS,CAAE,cAAa,SAAQ,CAAC,CAAC,SAAS,CAFrE,QAAQ,IAAI,MAAM,KAAK,EAAU,GAAQ,EAAQ,EAAM,EAAS,CAAE,SAAQ,CAAG,IAAA,GAAU,CAAC,CAAC,CCRpG,MAAaC,EAAgE,OAAO,OAAO,CACzF,GAAI,KACJ,MAAO,QACP,KAAM,OACP,CAAC,CCGWC,EAA0B"}
1
+ {"version":3,"file":"index.cjs","names":["newMethodHandler: IRouterMatcher<Router>","Readable","consts: Readonly<{ ok: 'OK'; error: 'ERROR'; fail: 'FAIL'; }>","NAMESPACE: {\n readonly DNS: '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n readonly URL: '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n readonly OID: '6ba7b812-9dad-11d1-80b4-00c04fd430c8';\n readonly X500: '6ba7b814-9dad-11d1-80b4-00c04fd430c8';\n}","LruCache","uuidv5","Router: typeof AfRouter"],"sources":["../src/router/index.ts","../src/promise-utils/index.ts","../src/consts/index.ts","../src/uuid-utils/uuidv5.ts","../src/uuid-utils/string-to-uuid.ts","../src/index.ts"],"sourcesContent":["import {\n Router, type Request, type Response, type NextFunction, type Handler, type RouterOptions, type IRouterMatcher,\n} from 'express';\nimport type { LoggerInstanceManager } from '@autofleet/logger';\n\nexport const METHODS = [\n 'all',\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'options',\n 'head',\n] as const;\n\nconst AfEntryPoint = (logger: LoggerInstanceManager, func: (req: Request, res: Response, nextFn: NextFunction) => void | PromiseLike<void>): Handler => async (req, res, next) => {\n try {\n await func(req, res, next);\n } catch (err) {\n const e = err as Error & { statusCode?: number; };\n logger.error(e.message);\n if (e.statusCode && e.statusCode < 500) {\n res.status(400).json({ error: e.message, status: 'ERROR' });\n return;\n }\n next(e);\n }\n};\n\n/** @returns a monkey-patched express router that will handle async routes (and force a 400 status for codes <500) */\nexport const AfRouter = ({ logger, ...options }: RouterOptions & { logger: LoggerInstanceManager; }): Router => {\n const myRouter = Router({ mergeParams: true, ...options });\n METHODS.forEach((method) => {\n const internalMethod = myRouter[method].bind(myRouter);\n const newMethodHandler: IRouterMatcher<Router> = (...args: [...unknown[]]) => internalMethod(...args.map(argMapper) as [string]);\n myRouter[method] = newMethodHandler;\n });\n return myRouter;\n\n function argMapper(args: unknown): unknown {\n if (Array.isArray(args)) return args.map(argMapper);\n return typeof args === 'function' ? AfEntryPoint(logger, args as Handler) : args;\n }\n};\n","import { Readable } from 'node:stream';\n\nexport async function promiseMap<T, U>(\n iterable: T[] | Iterable<T>,\n handler: (item: T, options?: { signal?: AbortSignal; }) => PromiseLike<U>,\n { concurrency, signal }: Parameters<Readable['map']>[1] = {},\n): Promise<U[]> {\n if (!concurrency) {\n return Promise.all(Array.from(iterable, item => handler(item, signal ? { signal } : undefined)));\n }\n return Readable.from(iterable).map(handler, { concurrency, signal }).toArray();\n}\n","export const consts: Readonly<{ ok: 'OK'; error: 'ERROR'; fail: 'FAIL'; }> = Object.freeze({\n ok: 'OK',\n error: 'ERROR',\n fail: 'FAIL',\n});\n","import { createHash } from 'node:crypto';\n\n// RFC 4122 well-known namespaces (as strings)\nexport const NAMESPACE: {\n readonly DNS: '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n readonly URL: '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n readonly OID: '6ba7b812-9dad-11d1-80b4-00c04fd430c8';\n readonly X500: '6ba7b814-9dad-11d1-80b4-00c04fd430c8';\n} = Object.freeze({\n DNS: '6ba7b810-9dad-11d1-80b4-00c04fd430c8',\n URL: '6ba7b811-9dad-11d1-80b4-00c04fd430c8',\n OID: '6ba7b812-9dad-11d1-80b4-00c04fd430c8',\n X500: '6ba7b814-9dad-11d1-80b4-00c04fd430c8',\n});\n\nfunction parseNs(nsStr: unknown): Buffer {\n if (typeof nsStr !== 'string') throw new TypeError('namespace must be a UUID string');\n\n // Check proper UUID format first (8-4-4-4-12 with hyphens)\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(nsStr)) {\n throw new TypeError('invalid namespace UUID');\n }\n\n const s = nsStr.replace(/-/g, '').toLowerCase();\n const out = Buffer.allocUnsafe(16);\n for (let i = 0; i < 16; i++) out[i] = parseInt(s.slice(i * 2, i * 2 + 2), 16);\n return out; // 16 bytes\n}\n\nfunction formatHexToUuid(hex32: string): string {\n // hex32 is 32 hex chars\n return `${hex32.slice(0, 8)}-${hex32.slice(8, 12)}-${hex32.slice(12, 16)}-${hex32.slice(16, 20)}-${hex32.slice(20)}`;\n}\n\nfunction v5WithParsed(name: string, nsBytes: Buffer): string {\n if (typeof name !== 'string') throw new TypeError('name must be a string');\n // sha1(namespace || name)\n const d = createHash('sha1').update(nsBytes).update(name, 'utf8').digest(); // 20 bytes\n // set version & variant on first 16 bytes (no extra allocs)\n d[6] = (d[6] & 0x0f) | 0x50; // version 5\n d[8] = (d[8] & 0x3f) | 0x80; // RFC 4122 variant\n const hex = d.subarray(0, 16).toString('hex');\n return formatHexToUuid(hex);\n}\n\n/** One-off generator: name + namespace (both strings) -> UUID v5 string */\nexport function v5(name: string, namespace: string | keyof typeof NAMESPACE): string {\n const nsStr = (namespace in NAMESPACE) ? NAMESPACE[namespace as keyof typeof NAMESPACE] : namespace;\n return v5WithParsed(name, parseNs(nsStr));\n}\n\n/** Hot path: bind namespace once; returns (name: string) => uuid string */\nexport function createV5(namespace: string): (name: string) => string {\n const nsStr = (namespace in NAMESPACE) ? NAMESPACE[namespace as keyof typeof NAMESPACE] : namespace;\n const nsBytes = parseNs(nsStr);\n return (name: string): string => v5WithParsed(name, nsBytes);\n}\n","import { v5 as uuidv5, NAMESPACE, createV5 } from './uuidv5';\nimport { LruCache } from '@autofleet/lru-cache';\n\nconst namespaceGenerators = new LruCache<string, (name: string) => string>(5);\n\nfunction normalize(input: string): string {\n return input.trim().toLowerCase().normalize('NFC');\n}\n\ninterface Args {\n /** The input string to convert to UUID */\n input: string;\n /** The namespace for UUIDv5 generation. Can be arbitrary string. */\n namespace: string;\n /** Whether to normalize the input string. @default true */\n shouldNormalize?: boolean;\n}\n\n/** Convert a string to a consistent UUIDv5 using a namespace */\nexport function stringToConsistentUuid(params: Args): string {\n const { input, namespace, shouldNormalize = true } = params;\n let generator = namespaceGenerators.get(namespace);\n\n if (!generator) {\n const namespaceUUID = uuidv5(namespace, NAMESPACE.URL); // Convert arbitrary string namespace to UUIDv5 using URL namespace\n generator = createV5(namespaceUUID);\n namespaceGenerators.set(namespace, generator);\n }\n\n return generator(shouldNormalize ? normalize(input) : input);\n}\n","import { AfRouter } from './router';\n\nexport { AfRouter } from './router';\nexport { promiseMap } from './promise-utils';\n\nexport { consts } from './consts';\n\nexport { stringToConsistentUuid } from './uuid-utils/string-to-uuid';\nexport { v5, createV5, NAMESPACE } from './uuid-utils/uuidv5';\n\nexport const Router: typeof AfRouter = AfRouter;\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -26,8 +26,32 @@ declare const consts: Readonly<{
26
26
  fail: "FAIL";
27
27
  }>;
28
28
  //#endregion
29
+ //#region src/uuid-utils/string-to-uuid.d.ts
30
+ interface Args {
31
+ /** The input string to convert to UUID */
32
+ input: string;
33
+ /** The namespace for UUIDv5 generation. Can be arbitrary string. */
34
+ namespace: string;
35
+ /** Whether to normalize the input string. @default true */
36
+ shouldNormalize?: boolean;
37
+ }
38
+ /** Convert a string to a consistent UUIDv5 using a namespace */
39
+ declare function stringToConsistentUuid(params: Args): string;
40
+ //#endregion
41
+ //#region src/uuid-utils/uuidv5.d.ts
42
+ declare const NAMESPACE: {
43
+ readonly DNS: "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
44
+ readonly URL: "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
45
+ readonly OID: "6ba7b812-9dad-11d1-80b4-00c04fd430c8";
46
+ readonly X500: "6ba7b814-9dad-11d1-80b4-00c04fd430c8";
47
+ };
48
+ /** One-off generator: name + namespace (both strings) -> UUID v5 string */
49
+ declare function v5(name: string, namespace: string | keyof typeof NAMESPACE): string;
50
+ /** Hot path: bind namespace once; returns (name: string) => uuid string */
51
+ declare function createV5(namespace: string): (name: string) => string;
52
+ //#endregion
29
53
  //#region src/index.d.ts
30
54
  declare const Router: typeof AfRouter;
31
55
  //#endregion
32
- export { AfRouter, Router, consts, promiseMap };
56
+ export { AfRouter, NAMESPACE, Router, consts, createV5, promiseMap, stringToConsistentUuid, v5 };
33
57
  //# sourceMappingURL=index.d.cts.map
package/dist/index.d.ts CHANGED
@@ -26,8 +26,32 @@ declare const consts: Readonly<{
26
26
  fail: "FAIL";
27
27
  }>;
28
28
  //#endregion
29
+ //#region src/uuid-utils/string-to-uuid.d.ts
30
+ interface Args {
31
+ /** The input string to convert to UUID */
32
+ input: string;
33
+ /** The namespace for UUIDv5 generation. Can be arbitrary string. */
34
+ namespace: string;
35
+ /** Whether to normalize the input string. @default true */
36
+ shouldNormalize?: boolean;
37
+ }
38
+ /** Convert a string to a consistent UUIDv5 using a namespace */
39
+ declare function stringToConsistentUuid(params: Args): string;
40
+ //#endregion
41
+ //#region src/uuid-utils/uuidv5.d.ts
42
+ declare const NAMESPACE: {
43
+ readonly DNS: "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
44
+ readonly URL: "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
45
+ readonly OID: "6ba7b812-9dad-11d1-80b4-00c04fd430c8";
46
+ readonly X500: "6ba7b814-9dad-11d1-80b4-00c04fd430c8";
47
+ };
48
+ /** One-off generator: name + namespace (both strings) -> UUID v5 string */
49
+ declare function v5(name: string, namespace: string | keyof typeof NAMESPACE): string;
50
+ /** Hot path: bind namespace once; returns (name: string) => uuid string */
51
+ declare function createV5(namespace: string): (name: string) => string;
52
+ //#endregion
29
53
  //#region src/index.d.ts
30
54
  declare const Router: typeof AfRouter;
31
55
  //#endregion
32
- export { AfRouter, Router, consts, promiseMap };
56
+ export { AfRouter, NAMESPACE, Router, consts, createV5, promiseMap, stringToConsistentUuid, v5 };
33
57
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{Router as e}from"express";import{Readable as t}from"node:stream";const n=[`all`,`get`,`post`,`put`,`delete`,`patch`,`options`,`head`],r=(e,t)=>async(n,r,i)=>{try{await t(n,r,i)}catch(t){let n=t;if(e.error(n.message),n.statusCode&&n.statusCode<500){r.status(400).json({error:n.message,status:`ERROR`});return}i(n)}},i=({logger:t,...i})=>{let a=e({mergeParams:!0,...i});return n.forEach(e=>{let t=a[e].bind(a);a[e]=(...e)=>t(...e.map(o))}),a;function o(e){return Array.isArray(e)?e.map(o):typeof e==`function`?r(t,e):e}};async function a(e,n,{concurrency:r,signal:i}={}){return r?t.from(e).map(n,{concurrency:r,signal:i}).toArray():Promise.all(Array.from(e,e=>n(e,i?{signal:i}:void 0)))}const o=Object.freeze({ok:`OK`,error:`ERROR`,fail:`FAIL`}),s=i;export{i as AfRouter,s as Router,o as consts,a as promiseMap};
1
+ import{Router as e}from"express";import{Readable as t}from"node:stream";import{createHash as n}from"node:crypto";import{LruCache as r}from"@autofleet/lru-cache";const i=[`all`,`get`,`post`,`put`,`delete`,`patch`,`options`,`head`],a=(e,t)=>async(n,r,i)=>{try{await t(n,r,i)}catch(t){let n=t;if(e.error(n.message),n.statusCode&&n.statusCode<500){r.status(400).json({error:n.message,status:`ERROR`});return}i(n)}},o=({logger:t,...n})=>{let r=e({mergeParams:!0,...n});return i.forEach(e=>{let t=r[e].bind(r);r[e]=(...e)=>t(...e.map(o))}),r;function o(e){return Array.isArray(e)?e.map(o):typeof e==`function`?a(t,e):e}};async function s(e,n,{concurrency:r,signal:i}={}){return r?t.from(e).map(n,{concurrency:r,signal:i}).toArray():Promise.all(Array.from(e,e=>n(e,i?{signal:i}:void 0)))}const c=Object.freeze({ok:`OK`,error:`ERROR`,fail:`FAIL`}),l=Object.freeze({DNS:`6ba7b810-9dad-11d1-80b4-00c04fd430c8`,URL:`6ba7b811-9dad-11d1-80b4-00c04fd430c8`,OID:`6ba7b812-9dad-11d1-80b4-00c04fd430c8`,X500:`6ba7b814-9dad-11d1-80b4-00c04fd430c8`});function u(e){if(typeof e!=`string`)throw TypeError(`namespace must be a UUID string`);if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e))throw TypeError(`invalid namespace UUID`);let t=e.replace(/-/g,``).toLowerCase(),n=Buffer.allocUnsafe(16);for(let e=0;e<16;e++)n[e]=parseInt(t.slice(e*2,e*2+2),16);return n}function d(e){return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}function f(e,t){if(typeof e!=`string`)throw TypeError(`name must be a string`);let r=n(`sha1`).update(t).update(e,`utf8`).digest();return r[6]=r[6]&15|80,r[8]=r[8]&63|128,d(r.subarray(0,16).toString(`hex`))}function p(e,t){return f(e,u(t in l?l[t]:t))}function m(e){let t=u(e in l?l[e]:e);return e=>f(e,t)}const h=new r(5);function g(e){return e.trim().toLowerCase().normalize(`NFC`)}function _(e){let{input:t,namespace:n,shouldNormalize:r=!0}=e,i=h.get(n);return i||(i=m(p(n,l.URL)),h.set(n,i)),i(r?g(t):t)}const v=o;export{o as AfRouter,l as NAMESPACE,v as Router,c as consts,m as createV5,s as promiseMap,_ as stringToConsistentUuid,p as v5};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Router","newMethodHandler: IRouterMatcher<Router>","consts: Readonly<{ ok: 'OK'; error: 'ERROR'; fail: 'FAIL'; }>","Router: typeof AfRouter"],"sources":["../src/router/index.ts","../src/promise-utils/index.ts","../src/consts/index.ts","../src/index.ts"],"sourcesContent":["import {\n Router, type Request, type Response, type NextFunction, type Handler, type RouterOptions, type IRouterMatcher,\n} from 'express';\nimport type { LoggerInstanceManager } from '@autofleet/logger';\n\nexport const METHODS = [\n 'all',\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'options',\n 'head',\n] as const;\n\nconst AfEntryPoint = (logger: LoggerInstanceManager, func: (req: Request, res: Response, nextFn: NextFunction) => void | PromiseLike<void>): Handler => async (req, res, next) => {\n try {\n await func(req, res, next);\n } catch (err) {\n const e = err as Error & { statusCode?: number; };\n logger.error(e.message);\n if (e.statusCode && e.statusCode < 500) {\n res.status(400).json({ error: e.message, status: 'ERROR' });\n return;\n }\n next(e);\n }\n};\n\n/** @returns a monkey-patched express router that will handle async routes (and force a 400 status for codes <500) */\nexport const AfRouter = ({ logger, ...options }: RouterOptions & { logger: LoggerInstanceManager; }): Router => {\n const myRouter = Router({ mergeParams: true, ...options });\n METHODS.forEach((method) => {\n const internalMethod = myRouter[method].bind(myRouter);\n const newMethodHandler: IRouterMatcher<Router> = (...args: [...unknown[]]) => internalMethod(...args.map(argMapper) as [string]);\n myRouter[method] = newMethodHandler;\n });\n return myRouter;\n\n function argMapper(args: unknown): unknown {\n if (Array.isArray(args)) return args.map(argMapper);\n return typeof args === 'function' ? AfEntryPoint(logger, args as Handler) : args;\n }\n};\n","import { Readable } from 'node:stream';\n\nexport async function promiseMap<T, U>(\n iterable: T[] | Iterable<T>,\n handler: (item: T, options?: { signal?: AbortSignal; }) => PromiseLike<U>,\n { concurrency, signal }: Parameters<Readable['map']>[1] = {},\n): Promise<U[]> {\n if (!concurrency) {\n return Promise.all(Array.from(iterable, item => handler(item, signal ? { signal } : undefined)));\n }\n return Readable.from(iterable).map(handler, { concurrency, signal }).toArray();\n}\n","export const consts: Readonly<{ ok: 'OK'; error: 'ERROR'; fail: 'FAIL'; }> = Object.freeze({\n ok: 'OK',\n error: 'ERROR',\n fail: 'FAIL',\n});\n","import { AfRouter } from './router';\n\nexport { AfRouter } from './router';\nexport { promiseMap } from './promise-utils';\n\nexport { consts } from './consts';\n\nexport const Router: typeof AfRouter = AfRouter;\n"],"mappings":"wEAKA,MAAa,EAAU,CACrB,MACA,MACA,OACA,MACA,SACA,QACA,UACA,OACD,CAEK,GAAgB,EAA+B,IAAmG,MAAO,EAAK,EAAK,IAAS,CAChL,GAAI,CACF,MAAM,EAAK,EAAK,EAAK,EAAK,OACnB,EAAK,CACZ,IAAM,EAAI,EAEV,GADA,EAAO,MAAM,EAAE,QAAQ,CACnB,EAAE,YAAc,EAAE,WAAa,IAAK,CACtC,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,MAAO,EAAE,QAAS,OAAQ,QAAS,CAAC,CAC3D,OAEF,EAAK,EAAE,GAKE,GAAY,CAAE,SAAQ,GAAG,KAA0E,CAC9G,IAAM,EAAWA,EAAO,CAAE,YAAa,GAAM,GAAG,EAAS,CAAC,CAM1D,OALA,EAAQ,QAAS,GAAW,CAC1B,IAAM,EAAiB,EAAS,GAAQ,KAAK,EAAS,CAEtD,EAAS,IADyC,GAAG,IAAyB,EAAe,GAAG,EAAK,IAAI,EAAU,CAAa,EAEhI,CACK,EAEP,SAAS,EAAU,EAAwB,CAEzC,OADI,MAAM,QAAQ,EAAK,CAAS,EAAK,IAAI,EAAU,CAC5C,OAAO,GAAS,WAAa,EAAa,EAAQ,EAAgB,CAAG,ICxChF,eAAsB,EACpB,EACA,EACA,CAAE,cAAa,UAA2C,EAAE,CAC9C,CAId,OAHK,EAGE,EAAS,KAAK,EAAS,CAAC,IAAI,EAAS,CAAE,cAAa,SAAQ,CAAC,CAAC,SAAS,CAFrE,QAAQ,IAAI,MAAM,KAAK,EAAU,GAAQ,EAAQ,EAAM,EAAS,CAAE,SAAQ,CAAG,IAAA,GAAU,CAAC,CAAC,CCRpG,MAAaE,EAAgE,OAAO,OAAO,CACzF,GAAI,KACJ,MAAO,QACP,KAAM,OACP,CAAC,CCGWC,EAA0B"}
1
+ {"version":3,"file":"index.js","names":["Router","newMethodHandler: IRouterMatcher<Router>","consts: Readonly<{ ok: 'OK'; error: 'ERROR'; fail: 'FAIL'; }>","NAMESPACE: {\n readonly DNS: '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n readonly URL: '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n readonly OID: '6ba7b812-9dad-11d1-80b4-00c04fd430c8';\n readonly X500: '6ba7b814-9dad-11d1-80b4-00c04fd430c8';\n}","uuidv5","Router: typeof AfRouter"],"sources":["../src/router/index.ts","../src/promise-utils/index.ts","../src/consts/index.ts","../src/uuid-utils/uuidv5.ts","../src/uuid-utils/string-to-uuid.ts","../src/index.ts"],"sourcesContent":["import {\n Router, type Request, type Response, type NextFunction, type Handler, type RouterOptions, type IRouterMatcher,\n} from 'express';\nimport type { LoggerInstanceManager } from '@autofleet/logger';\n\nexport const METHODS = [\n 'all',\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'options',\n 'head',\n] as const;\n\nconst AfEntryPoint = (logger: LoggerInstanceManager, func: (req: Request, res: Response, nextFn: NextFunction) => void | PromiseLike<void>): Handler => async (req, res, next) => {\n try {\n await func(req, res, next);\n } catch (err) {\n const e = err as Error & { statusCode?: number; };\n logger.error(e.message);\n if (e.statusCode && e.statusCode < 500) {\n res.status(400).json({ error: e.message, status: 'ERROR' });\n return;\n }\n next(e);\n }\n};\n\n/** @returns a monkey-patched express router that will handle async routes (and force a 400 status for codes <500) */\nexport const AfRouter = ({ logger, ...options }: RouterOptions & { logger: LoggerInstanceManager; }): Router => {\n const myRouter = Router({ mergeParams: true, ...options });\n METHODS.forEach((method) => {\n const internalMethod = myRouter[method].bind(myRouter);\n const newMethodHandler: IRouterMatcher<Router> = (...args: [...unknown[]]) => internalMethod(...args.map(argMapper) as [string]);\n myRouter[method] = newMethodHandler;\n });\n return myRouter;\n\n function argMapper(args: unknown): unknown {\n if (Array.isArray(args)) return args.map(argMapper);\n return typeof args === 'function' ? AfEntryPoint(logger, args as Handler) : args;\n }\n};\n","import { Readable } from 'node:stream';\n\nexport async function promiseMap<T, U>(\n iterable: T[] | Iterable<T>,\n handler: (item: T, options?: { signal?: AbortSignal; }) => PromiseLike<U>,\n { concurrency, signal }: Parameters<Readable['map']>[1] = {},\n): Promise<U[]> {\n if (!concurrency) {\n return Promise.all(Array.from(iterable, item => handler(item, signal ? { signal } : undefined)));\n }\n return Readable.from(iterable).map(handler, { concurrency, signal }).toArray();\n}\n","export const consts: Readonly<{ ok: 'OK'; error: 'ERROR'; fail: 'FAIL'; }> = Object.freeze({\n ok: 'OK',\n error: 'ERROR',\n fail: 'FAIL',\n});\n","import { createHash } from 'node:crypto';\n\n// RFC 4122 well-known namespaces (as strings)\nexport const NAMESPACE: {\n readonly DNS: '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n readonly URL: '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n readonly OID: '6ba7b812-9dad-11d1-80b4-00c04fd430c8';\n readonly X500: '6ba7b814-9dad-11d1-80b4-00c04fd430c8';\n} = Object.freeze({\n DNS: '6ba7b810-9dad-11d1-80b4-00c04fd430c8',\n URL: '6ba7b811-9dad-11d1-80b4-00c04fd430c8',\n OID: '6ba7b812-9dad-11d1-80b4-00c04fd430c8',\n X500: '6ba7b814-9dad-11d1-80b4-00c04fd430c8',\n});\n\nfunction parseNs(nsStr: unknown): Buffer {\n if (typeof nsStr !== 'string') throw new TypeError('namespace must be a UUID string');\n\n // Check proper UUID format first (8-4-4-4-12 with hyphens)\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(nsStr)) {\n throw new TypeError('invalid namespace UUID');\n }\n\n const s = nsStr.replace(/-/g, '').toLowerCase();\n const out = Buffer.allocUnsafe(16);\n for (let i = 0; i < 16; i++) out[i] = parseInt(s.slice(i * 2, i * 2 + 2), 16);\n return out; // 16 bytes\n}\n\nfunction formatHexToUuid(hex32: string): string {\n // hex32 is 32 hex chars\n return `${hex32.slice(0, 8)}-${hex32.slice(8, 12)}-${hex32.slice(12, 16)}-${hex32.slice(16, 20)}-${hex32.slice(20)}`;\n}\n\nfunction v5WithParsed(name: string, nsBytes: Buffer): string {\n if (typeof name !== 'string') throw new TypeError('name must be a string');\n // sha1(namespace || name)\n const d = createHash('sha1').update(nsBytes).update(name, 'utf8').digest(); // 20 bytes\n // set version & variant on first 16 bytes (no extra allocs)\n d[6] = (d[6] & 0x0f) | 0x50; // version 5\n d[8] = (d[8] & 0x3f) | 0x80; // RFC 4122 variant\n const hex = d.subarray(0, 16).toString('hex');\n return formatHexToUuid(hex);\n}\n\n/** One-off generator: name + namespace (both strings) -> UUID v5 string */\nexport function v5(name: string, namespace: string | keyof typeof NAMESPACE): string {\n const nsStr = (namespace in NAMESPACE) ? NAMESPACE[namespace as keyof typeof NAMESPACE] : namespace;\n return v5WithParsed(name, parseNs(nsStr));\n}\n\n/** Hot path: bind namespace once; returns (name: string) => uuid string */\nexport function createV5(namespace: string): (name: string) => string {\n const nsStr = (namespace in NAMESPACE) ? NAMESPACE[namespace as keyof typeof NAMESPACE] : namespace;\n const nsBytes = parseNs(nsStr);\n return (name: string): string => v5WithParsed(name, nsBytes);\n}\n","import { v5 as uuidv5, NAMESPACE, createV5 } from './uuidv5';\nimport { LruCache } from '@autofleet/lru-cache';\n\nconst namespaceGenerators = new LruCache<string, (name: string) => string>(5);\n\nfunction normalize(input: string): string {\n return input.trim().toLowerCase().normalize('NFC');\n}\n\ninterface Args {\n /** The input string to convert to UUID */\n input: string;\n /** The namespace for UUIDv5 generation. Can be arbitrary string. */\n namespace: string;\n /** Whether to normalize the input string. @default true */\n shouldNormalize?: boolean;\n}\n\n/** Convert a string to a consistent UUIDv5 using a namespace */\nexport function stringToConsistentUuid(params: Args): string {\n const { input, namespace, shouldNormalize = true } = params;\n let generator = namespaceGenerators.get(namespace);\n\n if (!generator) {\n const namespaceUUID = uuidv5(namespace, NAMESPACE.URL); // Convert arbitrary string namespace to UUIDv5 using URL namespace\n generator = createV5(namespaceUUID);\n namespaceGenerators.set(namespace, generator);\n }\n\n return generator(shouldNormalize ? normalize(input) : input);\n}\n","import { AfRouter } from './router';\n\nexport { AfRouter } from './router';\nexport { promiseMap } from './promise-utils';\n\nexport { consts } from './consts';\n\nexport { stringToConsistentUuid } from './uuid-utils/string-to-uuid';\nexport { v5, createV5, NAMESPACE } from './uuid-utils/uuidv5';\n\nexport const Router: typeof AfRouter = AfRouter;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/node-common",
3
- "version": "4.1.11",
3
+ "version": "4.2.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",