apitally
Version:
Simple API monitoring & analytics for REST APIs built with Express, Fastify, Hono, H3, Koa, and NestJS.
1 lines • 4.91 kB
Source Map (JSON)
{"version":3,"sources":["../../src/h3/utils.ts","../../src/common/packageVersions.ts"],"sourcesContent":["import { H3, H3Route } from \"h3\";\n\nimport { getPackageVersion } from \"../common/packageVersions.js\";\n\nexport function getAppInfo(h3: H3, appVersion?: string) {\n const routes = h3._routes ? listAllRoutes<H3Route>(h3._routes.root) : [];\n\n const versions: Array<[string, string]> = [];\n if (process.versions.node) {\n versions.push([\"nodejs\", process.versions.node]);\n }\n if (process.versions.bun) {\n versions.push([\"bun\", process.versions.bun]);\n }\n const h3Version = getPackageVersion(\"h3\");\n const apitallyVersion = getPackageVersion(\"../..\");\n if (h3Version) {\n versions.push([\"h3\", h3Version]);\n }\n if (apitallyVersion) {\n versions.push([\"apitally\", apitallyVersion]);\n }\n if (appVersion) {\n versions.push([\"app\", appVersion]);\n }\n\n return {\n paths: routes\n .map((route) => ({\n method: route.method || \"\",\n path: route.route || \"\",\n }))\n .filter((route) => route.method && route.path),\n versions: Object.fromEntries(versions),\n client: \"js:h3\",\n };\n}\n\n// Types from rou3\ntype MethodData<T = unknown> = { data: T };\ninterface Node<T = unknown> {\n key: string;\n static?: Record<string, Node<T>>;\n param?: Node<T>;\n wildcard?: Node<T>;\n methods?: Record<string, MethodData<T>[] | undefined>;\n}\n\nfunction listAllRoutes<T>(node: Node<T>): T[] {\n const routes: T[] = [];\n _collectAllRoutes(node, routes);\n return routes;\n}\n\nfunction _collectAllRoutes<T>(node: Node<T>, routes: T[] = []): void {\n // Collect routes from current node methods\n if (node.methods) {\n for (const methodData of Object.values(node.methods)) {\n if (Array.isArray(methodData)) {\n for (const item of methodData) {\n if (item.data) {\n routes.push(item.data);\n }\n }\n }\n }\n }\n\n // Traverse static children\n if (node.static) {\n for (const staticChild of Object.values(node.static)) {\n _collectAllRoutes(staticChild, routes);\n }\n }\n\n // Traverse param child\n if (node.param) {\n _collectAllRoutes(node.param, routes);\n }\n\n // Traverse wildcard child\n if (node.wildcard) {\n _collectAllRoutes(node.wildcard, routes);\n }\n}\n","import { createRequire } from \"module\";\n\nexport function getPackageVersion(name: string): string | null {\n const packageJsonPath = `${name}/package.json`;\n try {\n return require(packageJsonPath).version || null;\n } catch (error) {\n try {\n const _require = createRequire(import.meta.url);\n return _require(packageJsonPath).version || null;\n } catch (error) {\n return null;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA;;;;;;;ACFA,oBAA8B;AAA9B;AAEO,SAASA,kBAAkBC,MAAY;AAC5C,QAAMC,kBAAkB,GAAGD,IAAAA;AAC3B,MAAI;AACF,WAAOE,QAAQD,eAAAA,EAAiBE,WAAW;EAC7C,SAASC,OAAO;AACd,QAAI;AACF,YAAMC,eAAWC,6BAAc,YAAYC,GAAG;AAC9C,aAAOF,SAASJ,eAAAA,EAAiBE,WAAW;IAC9C,SAASC,QAAO;AACd,aAAO;IACT;EACF;AACF;AAZgBL;;;ADET,SAASS,WAAWC,IAAQC,YAAmB;AACpD,QAAMC,SAASF,GAAGG,UAAUC,cAAuBJ,GAAGG,QAAQE,IAAI,IAAI,CAAA;AAEtE,QAAMC,WAAoC,CAAA;AAC1C,MAAIC,QAAQD,SAASE,MAAM;AACzBF,aAASG,KAAK;MAAC;MAAUF,QAAQD,SAASE;KAAK;EACjD;AACA,MAAID,QAAQD,SAASI,KAAK;AACxBJ,aAASG,KAAK;MAAC;MAAOF,QAAQD,SAASI;KAAI;EAC7C;AACA,QAAMC,YAAYC,kBAAkB,IAAA;AACpC,QAAMC,kBAAkBD,kBAAkB,OAAA;AAC1C,MAAID,WAAW;AACbL,aAASG,KAAK;MAAC;MAAME;KAAU;EACjC;AACA,MAAIE,iBAAiB;AACnBP,aAASG,KAAK;MAAC;MAAYI;KAAgB;EAC7C;AACA,MAAIZ,YAAY;AACdK,aAASG,KAAK;MAAC;MAAOR;KAAW;EACnC;AAEA,SAAO;IACLa,OAAOZ,OACJa,IAAI,CAACC,WAAW;MACfC,QAAQD,MAAMC,UAAU;MACxBC,MAAMF,MAAMA,SAAS;IACvB,EAAA,EACCG,OAAO,CAACH,UAAUA,MAAMC,UAAUD,MAAME,IAAI;IAC/CZ,UAAUc,OAAOC,YAAYf,QAAAA;IAC7BgB,QAAQ;EACV;AACF;AAhCgBvB;AA4ChB,SAASK,cAAiBI,MAAa;AACrC,QAAMN,SAAc,CAAA;AACpBqB,oBAAkBf,MAAMN,MAAAA;AACxB,SAAOA;AACT;AAJSE;AAMT,SAASmB,kBAAqBf,MAAeN,SAAc,CAAA,GAAE;AAE3D,MAAIM,KAAKgB,SAAS;AAChB,eAAWC,cAAcL,OAAOM,OAAOlB,KAAKgB,OAAO,GAAG;AACpD,UAAIG,MAAMC,QAAQH,UAAAA,GAAa;AAC7B,mBAAWI,QAAQJ,YAAY;AAC7B,cAAII,KAAKC,MAAM;AACb5B,mBAAOO,KAAKoB,KAAKC,IAAI;UACvB;QACF;MACF;IACF;EACF;AAGA,MAAItB,KAAKuB,QAAQ;AACf,eAAWC,eAAeZ,OAAOM,OAAOlB,KAAKuB,MAAM,GAAG;AACpDR,wBAAkBS,aAAa9B,MAAAA;IACjC;EACF;AAGA,MAAIM,KAAKyB,OAAO;AACdV,sBAAkBf,KAAKyB,OAAO/B,MAAAA;EAChC;AAGA,MAAIM,KAAK0B,UAAU;AACjBX,sBAAkBf,KAAK0B,UAAUhC,MAAAA;EACnC;AACF;AA9BSqB;","names":["getPackageVersion","name","packageJsonPath","require","version","error","_require","createRequire","url","getAppInfo","h3","appVersion","routes","_routes","listAllRoutes","root","versions","process","node","push","bun","h3Version","getPackageVersion","apitallyVersion","paths","map","route","method","path","filter","Object","fromEntries","client","_collectAllRoutes","methods","methodData","values","Array","isArray","item","data","static","staticChild","param","wildcard"]}