Sidecar Logo

middleware/dolater.ts

Configuration

/**
 * Sidecar Config for middleware/dolater.ts
 */
module.exports = {
  title: "dolater.ts",
  description: "Auto-generated draft",
};

Route Flow Map

--- title: "Route Flow: ssutil/src/middleware/dolater.ts" --- flowchart TD title["Route Flow: ssutil/src/middleware/dolater.ts"] style title fill:none,stroke:none,color:#B4976A,font-size:18px subgraph GET ["GET"] getJobRoute["GET /job/{uuid}"] style getJobRoute fill:#5E377B,color:#fff,stroke:#B4976A getQueueRoute["GET /queue"] style getQueueRoute fill:#5E377B,color:#fff,stroke:#B4976A processJobsRoute["GET /jobs"] style processJobsRoute fill:#5E377B,color:#fff,stroke:#B4976A hono_get__ui["GET /ui"] style hono_get__ui fill:#5E377B,color:#fff,stroke:#B4976A end subgraph POST ["POST"] createJobRoute["POST /job/{delay}"] style createJobRoute fill:#5E377B,color:#fff,stroke:#B4976A createJobsRoute["POST /jobs"] style createJobsRoute fill:#5E377B,color:#fff,stroke:#B4976A end subgraph DELETE ["DELETE"] deleteJobRoute["DELETE /job/{uuid}"] style deleteJobRoute fill:#5E377B,color:#fff,stroke:#B4976A deleteJobsRoute["DELETE /jobs"] style deleteJobsRoute fill:#5E377B,color:#fff,stroke:#B4976A end subgraph API ["API"] openapi_createJobRoute["API createJobRoute"] style openapi_createJobRoute fill:#5E377B,color:#fff,stroke:#B4976A openapi_createJobsRoute["API createJobsRoute"] style openapi_createJobsRoute fill:#5E377B,color:#fff,stroke:#B4976A openapi_getJobRoute["API getJobRoute"] style openapi_getJobRoute fill:#5E377B,color:#fff,stroke:#B4976A openapi_deleteJobRoute["API deleteJobRoute"] style openapi_deleteJobRoute fill:#5E377B,color:#fff,stroke:#B4976A openapi_deleteJobsRoute["API deleteJobsRoute"] style openapi_deleteJobsRoute fill:#5E377B,color:#fff,stroke:#B4976A openapi_getQueueRoute["API getQueueRoute"] style openapi_getQueueRoute fill:#5E377B,color:#fff,stroke:#B4976A openapi_processJobsRoute["API processJobsRoute"] style openapi_processJobsRoute fill:#5E377B,color:#fff,stroke:#B4976A end subgraph DOC ["DOC"] hono_doc__doc["DOC /doc"] style hono_doc__doc fill:#5E377B,color:#fff,stroke:#B4976A end subgraph ALL ["ALL"] hono_all_processingPromises["ALL processingPromises"] style hono_all_processingPromises fill:#5E377B,color:#fff,stroke:#B4976A end parseDelay{{"parseDelay"}} style parseDelay fill:#161b22,color:#fff,stroke:#c2a35d isUUID{{"isUUID"}} style isUUID fill:#161b22,color:#fff,stroke:#c2a35d createJobLogic{{"createJobLogic"}} style createJobLogic fill:#161b22,color:#fff,stroke:#c2a35d createJobRoute --> openapi_createJobRoute createJobsRoute --> openapi_createJobsRoute getJobRoute --> openapi_getJobRoute deleteJobRoute --> openapi_deleteJobRoute deleteJobsRoute --> openapi_deleteJobsRoute getQueueRoute --> openapi_getQueueRoute processJobsRoute --> openapi_processJobsRoute D1_Database[("D1 Database")] style D1_Database fill:#c2a35d,color:#0b0e14,stroke:#c2a35d createJobLogic --> parseDelay createJobLogic --> D1_Database linkStyle default stroke:#c2a35d,stroke-width:2px,color:#fff classDef default color:#fff

AST Code Structure

--- title: "AST Structure: ssutil/src/middleware/dolater.ts" --- graph TD n0["SF"] n1["ID"] n0 --> n1 n3["OpenAPIHono"] n1 --> n3 n3 --> n2 style n3 stroke-dasharray:5,stroke:#B4976A n4["createRoute"] n1 --> n4 n4 --> n2 style n4 stroke-dasharray:5,stroke:#B4976A n5["z"] n1 --> n5 n5 --> n2 style n5 stroke-dasharray:5,stroke:#B4976A n2["@hono/zod-openapi"] style n2 fill:#ffffff10,stroke:#ffffff33,color:#a1a1a1 n6["ID"] n0 --> n6 n8["swaggerUI"] n6 --> n8 n8 --> n7 style n8 stroke-dasharray:5,stroke:#B4976A n7["@hono/swagger-ui"] style n7 fill:#ffffff10,stroke:#ffffff33,color:#a1a1a1 n9["ID"] n0 --> n9 n11["Context"] n9 --> n11 n11 --> n10 style n11 stroke-dasharray:5,stroke:#B4976A n10["hono"] style n10 fill:#ffffff10,stroke:#ffffff33,color:#a1a1a1 n12["ID"] n0 --> n12 n14["canonAuthMiddleware"] n12 --> n14 n14 --> n13 style n14 stroke-dasharray:5,stroke:#B4976A n13["./canon"] style n13 fill:#ffffff10,stroke:#ffffff33,color:#a1a1a1 n15["ID"] n0 --> n15 n17["inspectToken"] n15 --> n17 n17 --> n16 style n17 stroke-dasharray:5,stroke:#B4976A n18["encryptToken"] n15 --> n18 n18 --> n16 style n18 stroke-dasharray:5,stroke:#B4976A n16["../utils/crypto.js"] style n16 fill:#ffffff10,stroke:#ffffff33,color:#a1a1a1 n38["VS"] n0 --> n38 n40["VD: TIME_UNITS"] n38 --> n40 n62["FD: parseDelay"] n0 --> n62 n69["IS"] n62 --> n69 n72["RS"] n69 --> n72 n74["RS"] n62 --> n74 n75["CE: Array.from(delay.matchAll(/(\d+)([wdhms])/g)) .reduce"] n74 --> n75 n77["CE: Array.from"] n75 --> n77 n81["CE: delay.matchAll"] n77 --> n81 n87["AF"] n75 --> n87 n98["BE"] n87 --> n98 n101["BE"] n98 --> n101 n103["FD: isUUID"] n0 --> n103 n110["VS"] n103 --> n110 n112["VD: uuidRegex"] n110 --> n112 n115["RS"] n103 --> n115 n116["CE: uuidRegex.test"] n115 --> n116 n121["FD: createJobLogic"] n0 --> n121 n135["VS"] n121 --> n135 n137["VD: delayMs"] n135 --> n137 n139["CE: parseDelay"] n137 --> n139 n143["CE: console.log"] n121 --> n143 n156["CE: console.log"] n121 --> n156 n163["CE: Date.now"] n156 --> n163 n168["VS"] n121 --> n168 n170["VD: scheduledAt"] n168 --> n170 n172["BE"] n170 --> n172 n173["CE: Date.now"] n172 --> n173 n180["CE: console.log"] n121 --> n180 n189["VS"] n121 --> n189 n191["VD: uuid"] n189 --> n191 n193["CE: crypto.randomUUID"] n191 --> n193 n197["VS"] n121 --> n197 n199["VD: clientID"] n197 --> n199 n201["BE"] n199 --> n201 n207["VS"] n121 --> n207 n209["VD: batchID"] n207 --> n209 n211["BE"] n209 --> n211 n217["VS"] n121 --> n217 n219["VD: title"] n217 --> n219 n221["BE"] n219 --> n221 n227["VS"] n121 --> n227 n229["VD: jobtype"] n227 --> n229 n231["BE"] n229 --> n231 n237["VS"] n121 --> n237 n239["VD: payload"] n237 --> n239 n264["VS"] n121 --> n264 n266["VD: { url, RequestInit }"] n264 --> n266 n273["IS"] n121 --> n273 n277["RS"] n273 --> n277 n285["VS"] n121 --> n285 n287["VD: method"] n285 --> n287 n289["BE"] n287 --> n289 n296["VS"] n121 --> n296 n298["VD: headers"] n296 --> n298 n300["CE: JSON.stringify"] n298 --> n300 n304["BE"] n300 --> n304 n311["VS"] n121 --> n311 n313["VD: reqBody"] n311 --> n313 n316["BE"] n313 --> n316 n325["CE: JSON.stringify"] n313 --> n325 n333["BE"] n313 --> n333 n342["CE: db.prepare( `INSERT INTO jobs (url, method, headers, body, scheduled_at, status, retries_remaining, client_id, batch_id, uuid, title, jobtype) VALUES (?, ?, ?, ?, ?, 'pending', 3, ?, ?, ?, ?, ?)` ).bind(url, method, headers, reqBody, scheduledAt, clientID, batchID, uuid, title, jobtype).run"] n121 --> n342 n344["CE: db.prepare( `INSERT INTO jobs (url, method, headers, body, scheduled_at, status, retries_remaining, client_id, batch_id, uuid, title, jobtype) VALUES (?, ?, ?, ?, ?, 'pending', 3, ?, ?, ?, ?, ?)` ).bind"] n342 --> n344 n346["CE: db.prepare"] n344 --> n346 n363["RS"] n121 --> n363 n373["CE: new Date(scheduledAt).toISOString"] n363 --> n373 n375["NE"] n373 --> n375 n379["VS"] n0 --> n379 n381["VD: JobResponseSchema"] n379 --> n381 n383["CE: z.object"] n381 --> n383 n390["CE: z.boolean().optional"] n383 --> n390 n392["CE: z.boolean"] n390 --> n392 n399["CE: z.string().openapi"] n383 --> n399 n401["CE: z.string"] n399 --> n401 n412["CE: z.string().optional"] n383 --> n412 n414["CE: z.string"] n412 --> n414 n421["CE: z.string().optional"] n383 --> n421 n423["CE: z.string"] n421 --> n423 n428["VS"] n0 --> n428 n430["VD: JobInputSchema"] n428 --> n430 n432["CE: z.object"] n430 --> n432 n439["CE: z.string().refine( (val) => { // Accept absolute URLs or relative paths starting with / try { if (val.startsWith('/')) return true new URL(val) return true } catch { return false } }, { message: 'Must be a valid URL (e.g., https://example.com/path) or a relative path (e.g., /email/v1/template)' } ).openapi"] n432 --> n439 n441["CE: z.string().refine"] n439 --> n441 n443["CE: z.string"] n441 --> n443 n445["AF"] n441 --> n445 n460["CE: z.string().optional().openapi"] n432 --> n460 n462["CE: z.string().optional"] n460 --> n462 n464["CE: z.string"] n462 --> n464 n473["CE: z.string().optional().openapi"] n432 --> n473 n475["CE: z.string().optional"] n473 --> n475 n477["CE: z.string"] n475 --> n477 n486["CE: z.string().optional().openapi"] n432 --> n486 n488["CE: z.string().optional"] n486 --> n488 n490["CE: z.string"] n488 --> n490 n499["CE: z.string().optional().openapi"] n432 --> n499 n501["CE: z.string().optional"] n499 --> n501 n503["CE: z.string"] n501 --> n503 n512["CE: z.object({ method: z.string().optional().default('POST'), headers: z.record(z.string(), z.string()).optional(), body: z.any().optional() }).optional"] n432 --> n512 n514["CE: z.object"] n512 --> n514 n521["CE: z.string().optional().default"] n514 --> n521 n524["CE: z.record(z.string(), z.string()).optional"] n514 --> n524 n527["CE: z.any().optional"] n514 --> n527 n529["VS"] n0 --> n529 n531["VD: BulkCreateInputSchema"] n529 --> n531 n533["CE: z.record(z.string(), JobInputSchema) .openapi"] n531 --> n533 n535["CE: z.record"] n533 --> n535 n539["CE: z.string"] n535 --> n539 n561["VS"] n0 --> n561 n563["VD: QueueJobSchema"] n561 --> n563 n565["CE: z.object"] n563 --> n565 n572["CE: z.number"] n565 --> n572 n578["CE: z.string"] n565 --> n578 n584["CE: z.string().nullable"] n565 --> n584 n586["CE: z.string"] n584 --> n586 n593["CE: z.string().nullable"] n565 --> n593 n595["CE: z.string"] n593 --> n595 n602["CE: z.number"] n565 --> n602 n608["CE: z.string().optional"] n565 --> n608 n610["CE: z.string"] n608 --> n610 n617["CE: z.string"] n565 --> n617 n623["CE: z.number().nullable"] n565 --> n623 n625["CE: z.number"] n623 --> n625 n632["CE: z.string().nullable"] n565 --> n632 n634["CE: z.string"] n632 --> n634 n641["CE: z.string().nullable"] n565 --> n641 n643["CE: z.string"] n641 --> n643 n650["CE: z.string().nullable"] n565 --> n650 n652["CE: z.string"] n650 --> n652 n657["VS"] n0 --> n657 n659["VD: QueueResponseSchema"] n657 --> n659 n661["CE: z.object"] n659 --> n661 n668["CE: z.number"] n661 --> n668 n674["CE: z.array"] n661 --> n674 n679["VS"] n0 --> n679 n681["VD: ProcessResponseSchema"] n679 --> n681 n683["CE: z.object"] n681 --> n683 n690["CE: z.number"] n683 --> n690 n696["CE: z.array(z.any()).optional"] n683 --> n696 n698["CE: z.array"] n696 --> n698 n702["CE: z.any"] n698 --> n702 n704["VS"] n0 --> n704 n706["VD: app"] n704 --> n706 n708["NE"] n706 --> n708 n716["CE: app.openAPIRegistry.registerComponent"] n0 --> n716 n737["VS"] n0 --> n737 n739["VD: createJobRoute"] n737 --> n739 n741["CE: createRoute"] n739 --> n741 n769["CE: z.object"] n741 --> n769 n776["CE: z.string().openapi"] n769 --> n776 n778["CE: z.string"] n776 --> n778 n836["CE: app.openapi"] n0 --> n836 n841["AF"] n836 --> n841 n847["TS"] n841 --> n847 n849["VS"] n847 --> n849 n851["VD: { delay }"] n849 --> n851 n855["CE: c.req.valid"] n851 --> n855 n856["VS"] n847 --> n856 n858["VD: body"] n856 --> n858 n860["CE: c.req.valid"] n858 --> n860 n861["VS"] n847 --> n861 n863["VD: result"] n861 --> n863 n866["CE: createJobLogic"] n863 --> n866 n867["IS"] n847 --> n867 n871["RS"] n867 --> n871 n872["CE: c.json"] n871 --> n872 n873["RS"] n847 --> n873 n874["CE: c.json"] n873 --> n874 n882["VD: error"] n847 --> n882 n887["CE: console.error"] n847 --> n887 n893["VS"] n847 --> n893 n895["VD: rawBody"] n893 --> n895 n898["CE: c.req.raw.clone().json().catch"] n895 --> n898 n900["CE: console.error"] n847 --> n900 n907["CE: console.error"] n847 --> n907 n912["CE: c.req.header"] n907 --> n912 n919["RS"] n847 --> n919 n920["CE: c.json"] n919 --> n920 n930["BE"] n920 --> n930 n933["BE"] n920 --> n933 n935["VS"] n0 --> n935 n937["VD: createJobsRoute"] n935 --> n937 n939["CE: createRoute"] n937 --> n939 n987["CE: app.openapi"] n0 --> n987 n992["AF"] n987 --> n992 n998["VS"] n992 --> n998 n1000["VD: body"] n998 --> n1000 n1002["CE: c.req.valid"] n1000 --> n1002 n1009["VS"] n992 --> n1009 n1011["VD: results"] n1009 --> n1011 n1016["VD: [delay, jobBody]"] n992 --> n1016 n1022["CE: Object.entries"] n992 --> n1022 n1028["VS"] n992 --> n1028 n1030["VD: res"] n1028 --> n1030 n1033["CE: createJobLogic"] n1030 --> n1033 n1043["CE: results.push"] n992 --> n1043 n1052["RS"] n992 --> n1052 n1053["CE: c.json"] n1052 --> n1053 n1066["VS"] n0 --> n1066 n1068["VD: getJobRoute"] n1066 --> n1068 n1070["CE: createRoute"] n1068 --> n1070 n1098["CE: z.object"] n1070 --> n1098 n1105["CE: z.string().uuid"] n1098 --> n1105 n1107["CE: z.string"] n1105 --> n1107 n1125["CE: app.openapi"] n0 --> n1125 n1130["AF"] n1125 --> n1130 n1136["VS"] n1130 --> n1136 n1138["VD: { uuid }"] n1136 --> n1138 n1142["CE: c.req.valid"] n1138 --> n1142 n1149["VS"] n1130 --> n1149 n1151["VD: job"] n1149 --> n1151 n1154["CE: c.env.JOBSDB.prepare('SELECT * FROM jobs WHERE uuid = ?').bind(uuid).first"] n1151 --> n1154 n1156["CE: c.env.JOBSDB.prepare('SELECT * FROM jobs WHERE uuid = ?').bind"] n1154 --> n1156 n1158["IS"] n1130 --> n1158 n1161["RS"] n1158 --> n1161 n1162["CE: c.json"] n1161 --> n1162 n1171["RS"] n1130 --> n1171 n1172["CE: c.json"] n1171 --> n1172 n1179["VS"] n0 --> n1179 n1181["VD: deleteJobRoute"] n1179 --> n1181 n1183["CE: createRoute"] n1181 --> n1183 n1211["CE: z.object"] n1183 --> n1211 n1218["CE: z.string().uuid"] n1211 --> n1218 n1220["CE: z.string"] n1218 --> n1220 n1232["CE: app.openapi"] n0 --> n1232 n1237["AF"] n1232 --> n1237 n1243["VS"] n1237 --> n1243 n1245["VD: { uuid }"] n1243 --> n1245 n1249["CE: c.req.valid"] n1245 --> n1249 n1256["VS"] n1237 --> n1256 n1258["VD: result"] n1256 --> n1258 n1261["CE: c.env.JOBSDB.prepare(`UPDATE jobs SET status = 'deleted' WHERE uuid = ?`).bind(uuid).run"] n1258 --> n1261 n1263["CE: c.env.JOBSDB.prepare(`UPDATE jobs SET status = 'deleted' WHERE uuid = ?`).bind"] n1261 --> n1263 n1265["RS"] n1237 --> n1265 n1266["CE: c.json"] n1265 --> n1266 n1281["VS"] n0 --> n1281 n1283["VD: deleteJobsRoute"] n1281 --> n1283 n1285["CE: createRoute"] n1283 --> n1285 n1313["CE: z.object"] n1285 --> n1313 n1320["CE: z.string().optional"] n1313 --> n1320 n1322["CE: z.string"] n1320 --> n1322 n1326["CE: z.string().optional"] n1313 --> n1326 n1328["CE: z.string"] n1326 --> n1328 n1332["CE: z.string().optional"] n1313 --> n1332 n1334["CE: z.string"] n1332 --> n1334 n1352["CE: app.openapi"] n0 --> n1352 n1357["AF"] n1352 --> n1357 n1363["VS"] n1357 --> n1363 n1365["VD: query"] n1363 --> n1365 n1367["CE: c.req.valid"] n1365 --> n1367 n1374["VS"] n1357 --> n1374 n1376["VD: keys"] n1374 --> n1376 n1378["CE: ['client_id', 'batch_id', 'jobtype'].filter"] n1376 --> n1378 n1385["AF"] n1378 --> n1385 n1386["IS"] n1357 --> n1386 n1387["BE"] n1386 --> n1387 n1394["RS"] n1386 --> n1394 n1395["CE: c.json"] n1394 --> n1395 n1406["VS"] n1357 --> n1406 n1408["VD: sql"] n1406 --> n1408 n1410["BE"] n1408 --> n1410 n1413["CE: keys.map(k => `${k} = ?`).join"] n1410 --> n1413 n1414["VS"] n1357 --> n1414 n1416["VD: params"] n1414 --> n1416 n1418["CE: keys.map"] n1416 --> n1418 n1422["AF"] n1418 --> n1422 n1423["VS"] n1357 --> n1423 n1425["VD: result"] n1423 --> n1425 n1428["CE: c.env.JOBSDB.prepare(sql).bind(...params).run"] n1425 --> n1428 n1430["CE: c.env.JOBSDB.prepare(sql).bind"] n1428 --> n1430 n1432["RS"] n1357 --> n1432 n1433["CE: c.json"] n1432 --> n1433 n1448["VS"] n0 --> n1448 n1450["VD: getQueueRoute"] n1448 --> n1450 n1452["CE: createRoute"] n1450 --> n1452 n1480["CE: z.object"] n1452 --> n1480 n1487["CE: z.string().optional"] n1480 --> n1487 n1489["CE: z.string"] n1487 --> n1489 n1493["CE: z.string().optional"] n1480 --> n1493 n1495["CE: z.string"] n1493 --> n1495 n1516["CE: app.openapi"] n0 --> n1516 n1521["AF"] n1516 --> n1521 n1527["VS"] n1521 --> n1527 n1529["VD: { client_id, batch_id }"] n1527 --> n1529 n1535["CE: c.req.valid"] n1529 --> n1535 n1542["VS"] n1521 --> n1542 n1544["VD: sql"] n1542 --> n1544 n1547["VS"] n1521 --> n1547 n1549["VD: params"] n1547 --> n1549 n1554["VS"] n1521 --> n1554 n1556["VD: conditions"] n1554 --> n1556 n1561["IS"] n1521 --> n1561 n1565["CE: conditions.push"] n1561 --> n1565 n1571["CE: params.push"] n1561 --> n1571 n1576["IS"] n1521 --> n1576 n1580["CE: conditions.push"] n1576 --> n1580 n1586["CE: params.push"] n1576 --> n1586 n1592["CE: conditions.push"] n1521 --> n1592 n1597["IS"] n1521 --> n1597 n1598["BE"] n1597 --> n1598 n1606["BE"] n1597 --> n1606 n1609["BE"] n1606 --> n1609 n1612["CE: conditions.join"] n1609 --> n1612 n1614["BE"] n1521 --> n1614 n1618["VS"] n1521 --> n1618 n1620["VD: { results }"] n1618 --> n1620 n1625["CE: c.env.JOBSDB.prepare(sql).bind(...params).all"] n1620 --> n1625 n1627["CE: c.env.JOBSDB.prepare(sql).bind"] n1625 --> n1627 n1629["VS"] n1521 --> n1629 n1631["VD: formattedResults"] n1629 --> n1631 n1633["CE: results.map"] n1631 --> n1633 n1637["AF"] n1633 --> n1637 n1638["RS"] n1521 --> n1638 n1639["CE: c.json"] n1638 --> n1639 n1654["VS"] n0 --> n1654 n1656["VD: processJobsRoute"] n1654 --> n1656 n1658["CE: createRoute"] n1656 --> n1658 n1686["CE: z.object"] n1658 --> n1686 n1693["CE: z.string().optional"] n1686 --> n1693 n1695["CE: z.string"] n1693 --> n1695 n1699["CE: z.string().optional"] n1686 --> n1699 n1701["CE: z.string"] n1699 --> n1701 n1722["CE: app.openapi"] n0 --> n1722 n1727["AF"] n1722 --> n1727 n1733["VS"] n1727 --> n1733 n1735["VD: { client_id, batch_id }"] n1733 --> n1735 n1741["CE: c.req.valid"] n1735 --> n1741 n1748["VS"] n1727 --> n1748 n1750["VD: db"] n1748 --> n1750 n1757["VS"] n1727 --> n1757 n1759["VD: now"] n1757 --> n1759 n1761["CE: Date.now"] n1759 --> n1761 n1765["VS"] n1727 --> n1765 n1767["VD: sql"] n1765 --> n1767 n1770["VS"] n1727 --> n1770 n1772["VD: params"] n1770 --> n1772 n1778["IS"] n1727 --> n1778 n1782["BE"] n1778 --> n1782 n1787["CE: params.push"] n1778 --> n1787 n1792["IS"] n1727 --> n1792 n1796["BE"] n1792 --> n1796 n1801["CE: params.push"] n1792 --> n1801 n1806["VS"] n1727 --> n1806 n1808["VD: { results }"] n1806 --> n1808 n1813["CE: db.prepare(sql).bind(...params).all"] n1808 --> n1813 n1815["CE: db.prepare(sql).bind"] n1813 --> n1815 n1817["IS"] n1727 --> n1817 n1818["BE"] n1817 --> n1818 n1822["BE"] n1818 --> n1822 n1829["RS"] n1817 --> n1829 n1830["CE: c.json"] n1829 --> n1830 n1838["VS"] n1727 --> n1838 n1840["VD: processingPromises"] n1838 --> n1840 n1842["CE: results.map"] n1840 --> n1842 n1846["AF"] n1842 --> n1846 n1847["VS"] n1727 --> n1847 n1849["VD: outcomes"] n1847 --> n1849 n1852["CE: Promise.all"] n1849 --> n1852 n1857["RS"] n1727 --> n1857 n1858["CE: c.json"] n1857 --> n1858 n1871["CE: app.doc"] n0 --> n1871 n1903["CE: app.get"] n0 --> n1903 n1908["CE: swaggerUI"] n1903 --> n1908 style n0 fill:#5E377B,color:#fff,stroke:#B4976A linkStyle default stroke:#c2a35d,stroke-width:1px,opacity:0.6
AF ArrowFunctionBE BinaryExpressionCE CallExpressionFD FunctionDeclarationIS IfStatementID ImportDeclarationNE NewExpressionRS ReturnStatementSF SourceFileTS TryStatementVD VariableDeclarationVS VariableStatement