@galaxy-tool-util/core 1.10.0 → 1.12.0

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.
Files changed (80) hide show
  1. package/dist/cache/index.d.ts +1 -1
  2. package/dist/cache/index.d.ts.map +1 -1
  3. package/dist/cache/node.d.ts +5 -5
  4. package/dist/cache/node.d.ts.map +1 -1
  5. package/dist/cache/node.js +6 -1
  6. package/dist/cache/node.js.map +1 -1
  7. package/dist/cache/storage/filesystem.d.ts +6 -1
  8. package/dist/cache/storage/filesystem.d.ts.map +1 -1
  9. package/dist/cache/storage/filesystem.js +53 -15
  10. package/dist/cache/storage/filesystem.js.map +1 -1
  11. package/dist/cache/storage/indexeddb.d.ts +3 -0
  12. package/dist/cache/storage/indexeddb.d.ts.map +1 -1
  13. package/dist/cache/storage/indexeddb.js +20 -3
  14. package/dist/cache/storage/indexeddb.js.map +1 -1
  15. package/dist/cache/storage/interface.d.ts +4 -0
  16. package/dist/cache/storage/interface.d.ts.map +1 -1
  17. package/dist/cache/tool-cache.d.ts +13 -4
  18. package/dist/cache/tool-cache.d.ts.map +1 -1
  19. package/dist/cache/tool-cache.js +31 -4
  20. package/dist/cache/tool-cache.js.map +1 -1
  21. package/dist/cache-http/cache-to-trs.d.ts +36 -0
  22. package/dist/cache-http/cache-to-trs.d.ts.map +1 -0
  23. package/dist/cache-http/cache-to-trs.js +81 -0
  24. package/dist/cache-http/cache-to-trs.js.map +1 -0
  25. package/dist/cache-http/dto.d.ts +69 -0
  26. package/dist/cache-http/dto.d.ts.map +1 -0
  27. package/dist/cache-http/dto.js +8 -0
  28. package/dist/cache-http/dto.js.map +1 -0
  29. package/dist/cache-http/error.d.ts +10 -0
  30. package/dist/cache-http/error.d.ts.map +1 -0
  31. package/dist/cache-http/error.js +15 -0
  32. package/dist/cache-http/error.js.map +1 -0
  33. package/dist/cache-http/handlers.d.ts +41 -0
  34. package/dist/cache-http/handlers.d.ts.map +1 -0
  35. package/dist/cache-http/handlers.js +241 -0
  36. package/dist/cache-http/handlers.js.map +1 -0
  37. package/dist/cache-http/index.d.ts +13 -0
  38. package/dist/cache-http/index.d.ts.map +1 -0
  39. package/dist/cache-http/index.js +12 -0
  40. package/dist/cache-http/index.js.map +1 -0
  41. package/dist/cache-http/route-table.d.ts +67 -0
  42. package/dist/cache-http/route-table.d.ts.map +1 -0
  43. package/dist/cache-http/route-table.js +145 -0
  44. package/dist/cache-http/route-table.js.map +1 -0
  45. package/dist/client/index.d.ts +1 -0
  46. package/dist/client/index.d.ts.map +1 -1
  47. package/dist/client/index.js +1 -0
  48. package/dist/client/index.js.map +1 -1
  49. package/dist/client/tool-source.d.ts +6 -0
  50. package/dist/client/tool-source.d.ts.map +1 -0
  51. package/dist/client/tool-source.js +27 -0
  52. package/dist/client/tool-source.js.map +1 -0
  53. package/dist/client/toolshed.d.ts.map +1 -1
  54. package/dist/client/toolshed.js +24 -2
  55. package/dist/client/toolshed.js.map +1 -1
  56. package/dist/diagnostics.d.ts +5 -0
  57. package/dist/diagnostics.d.ts.map +1 -0
  58. package/dist/diagnostics.js +3 -0
  59. package/dist/diagnostics.js.map +1 -0
  60. package/dist/index.d.ts +8 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +4 -0
  63. package/dist/index.js.map +1 -1
  64. package/dist/node-http.d.ts +39 -0
  65. package/dist/node-http.d.ts.map +1 -0
  66. package/dist/node-http.js +114 -0
  67. package/dist/node-http.js.map +1 -0
  68. package/dist/node.d.ts +1 -0
  69. package/dist/node.d.ts.map +1 -1
  70. package/dist/node.js +1 -0
  71. package/dist/node.js.map +1 -1
  72. package/dist/tool-info.d.ts +7 -0
  73. package/dist/tool-info.d.ts.map +1 -1
  74. package/dist/tool-info.js +77 -19
  75. package/dist/tool-info.js.map +1 -1
  76. package/dist/tool-source.d.ts +9 -0
  77. package/dist/tool-source.d.ts.map +1 -0
  78. package/dist/tool-source.js +9 -0
  79. package/dist/tool-source.js.map +1 -0
  80. package/package.json +2 -2
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Convert cache index entries into GA4GH TRS Tool / ToolVersion shapes.
3
+ *
4
+ * Mapping (per merged plan §3):
5
+ * Tool.id ← tool_id (TRS form, ~-separated; we already store it that way)
6
+ * Tool.organization ← left of first `~`, falling back to tool_id when there is no separator
7
+ * Tool.url ← {baseUrl}/api/ga4gh/trs/v2/tools/{tool_id}
8
+ * Tool.toolclass ← GALAXY_TOOL_CLASS
9
+ * Tool.versions ← entries grouped by tool_id, mapped to ToolVersion
10
+ * ToolVersion.id ← tool_version
11
+ * ToolVersion.url ← {baseUrl}/api/ga4gh/trs/v2/tools/{tool_id}/versions/{tool_version}
12
+ * ToolVersion.descriptor_type ← ["GALAXY"]
13
+ */
14
+ import { GALAXY_TOOL_CLASS } from "@galaxy-tool-util/schema";
15
+ import { parseToolshedToolId } from "../cache/tool-id.js";
16
+ const TRS_BASE = "/api/ga4gh/trs/v2/tools";
17
+ function trsToolUrl(baseUrl, toolId) {
18
+ return `${baseUrl}${TRS_BASE}/${encodeURIComponent(toolId)}`;
19
+ }
20
+ function trsVersionUrl(baseUrl, toolId, toolVersion) {
21
+ return `${trsToolUrl(baseUrl, toolId)}/versions/${encodeURIComponent(toolVersion)}`;
22
+ }
23
+ /**
24
+ * Normalize a cache `tool_id` to TRS form (`owner~repo~tool_id`). The cache
25
+ * historically stores readable form (`shed/repos/owner/repo/tool_id`); newer
26
+ * entries may already be TRS-shaped. Callers reading off the cache index
27
+ * should always go through this.
28
+ */
29
+ export function toTrsToolId(rawToolId) {
30
+ const parsed = parseToolshedToolId(rawToolId);
31
+ return parsed === null ? rawToolId : parsed.trsToolId;
32
+ }
33
+ function organizationOf(trsToolId) {
34
+ const idx = trsToolId.indexOf("~");
35
+ return idx === -1 ? trsToolId : trsToolId.slice(0, idx);
36
+ }
37
+ export function entryToTrsVersion(entry, baseUrl) {
38
+ const trsToolId = toTrsToolId(entry.tool_id);
39
+ return {
40
+ id: entry.tool_version,
41
+ url: trsVersionUrl(baseUrl, trsToolId, entry.tool_version),
42
+ descriptor_type: ["GALAXY"],
43
+ };
44
+ }
45
+ /** Group entries by TRS tool_id and emit one TRS Tool per group. */
46
+ export function cacheToTrs(entries, baseUrl) {
47
+ const groups = new Map();
48
+ for (const entry of entries) {
49
+ const trsToolId = toTrsToolId(entry.tool_id);
50
+ const list = groups.get(trsToolId);
51
+ if (list === undefined)
52
+ groups.set(trsToolId, [entry]);
53
+ else
54
+ list.push(entry);
55
+ }
56
+ const tools = [];
57
+ for (const [trsToolId, group] of groups) {
58
+ tools.push({
59
+ id: trsToolId,
60
+ url: trsToolUrl(baseUrl, trsToolId),
61
+ organization: organizationOf(trsToolId),
62
+ toolclass: GALAXY_TOOL_CLASS,
63
+ versions: group.map((e) => entryToTrsVersion(e, baseUrl)),
64
+ });
65
+ }
66
+ return tools;
67
+ }
68
+ /** Build a single TRS Tool by TRS-form tool id, or null if no entries match. */
69
+ export function cacheToTrsOne(entries, trsToolId, baseUrl) {
70
+ const matching = entries.filter((e) => toTrsToolId(e.tool_id) === trsToolId);
71
+ if (matching.length === 0)
72
+ return null;
73
+ return {
74
+ id: trsToolId,
75
+ url: trsToolUrl(baseUrl, trsToolId),
76
+ organization: organizationOf(trsToolId),
77
+ toolclass: GALAXY_TOOL_CLASS,
78
+ versions: matching.map((e) => entryToTrsVersion(e, baseUrl)),
79
+ };
80
+ }
81
+ //# sourceMappingURL=cache-to-trs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-to-trs.js","sourceRoot":"","sources":["../../src/cache-http/cache-to-trs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAqC,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAY1D,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAE3C,SAAS,UAAU,CAAC,OAAe,EAAE,MAAc;IACjD,OAAO,GAAG,OAAO,GAAG,QAAQ,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,MAAc,EAAE,WAAmB;IACzE,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;AACtF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuB,EAAE,OAAe;IACxE,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,YAAY;QACtB,GAAG,EAAE,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;QAC1D,eAAe,EAAE,CAAC,QAAQ,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,OAA2B,EAAE,OAAe;IACrE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;;YAClD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,SAAS;YACb,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;YACnC,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC;YACvC,SAAS,EAAE,iBAAiB;YAC5B,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAC3B,OAA2B,EAC3B,SAAiB,EACjB,OAAe;IAEf,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO;QACL,EAAE,EAAE,SAAS;QACb,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QACnC,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC;QACvC,SAAS,EAAE,iBAAiB;QAC5B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;KAC7D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * DTOs for the shared cache HTTP surface — admin namespace.
3
+ *
4
+ * camelCase at the API boundary; snake_case stays internal to the on-disk
5
+ * cache index. See `decorate()` in handlers.ts for the mapping.
6
+ */
7
+ import type { CacheStats } from "../cache/tool-cache.js";
8
+ /** Cache entry decorated with admin metadata for inspector UIs. */
9
+ export interface CachedToolEntry {
10
+ cacheKey: string;
11
+ toolId: string;
12
+ toolVersion: string;
13
+ /** Cache request version when it differs from the displayed wrapper version (e.g. _default_). */
14
+ requestVersion?: string;
15
+ source: string;
16
+ sourceUrl: string;
17
+ cachedAt: string;
18
+ /** Omitted if storage backend lacks `stat()` support. */
19
+ sizeBytes?: number;
20
+ /** Probed only when the caller requests `decode=true`; defaults to true. */
21
+ decodable: boolean;
22
+ /** Deep link to the ToolShed repo page when the tool id is parseable. */
23
+ toolshedUrl?: string;
24
+ /** False for orphan reconstructions / unknown ids — they can't drive a refetch. */
25
+ refetchable: boolean;
26
+ }
27
+ export interface ListResponse {
28
+ entries: CachedToolEntry[];
29
+ stats: CacheStats;
30
+ }
31
+ export interface DeleteResponse {
32
+ removed: boolean;
33
+ }
34
+ export interface ClearResponse {
35
+ removed: number;
36
+ }
37
+ export interface RefetchRequest {
38
+ toolId: string;
39
+ toolVersion?: string;
40
+ }
41
+ export interface RefetchResponse {
42
+ cacheKey: string;
43
+ fetched: boolean;
44
+ alreadyCached: boolean;
45
+ }
46
+ export interface AddRequest {
47
+ toolId: string;
48
+ toolVersion?: string;
49
+ }
50
+ export interface AddResponse {
51
+ cacheKey: string;
52
+ alreadyCached: boolean;
53
+ }
54
+ /** Tool search results (substring match over id/name/description). */
55
+ export interface SearchResults {
56
+ q: string;
57
+ page: number;
58
+ pageSize: number;
59
+ total: number;
60
+ hits: Array<{
61
+ toolId: string;
62
+ toolVersion: string;
63
+ name?: string;
64
+ description?: string;
65
+ }>;
66
+ }
67
+ /** Schema kind for parameter_*_schema endpoints. */
68
+ export type ParameterSchemaKind = "request" | "landing_request" | "test_case_xml";
69
+ //# sourceMappingURL=dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/cache-http/dto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,iBAAiB,GAAG,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * DTOs for the shared cache HTTP surface — admin namespace.
3
+ *
4
+ * camelCase at the API boundary; snake_case stays internal to the on-disk
5
+ * cache index. See `decorate()` in handlers.ts for the mapping.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/cache-http/dto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Framework-agnostic HTTP error consumed by both gxwf-web and tool-cache-proxy
3
+ * adapters. Status + message + optional structured detail.
4
+ */
5
+ export declare class HttpError extends Error {
6
+ readonly status: number;
7
+ readonly detail?: unknown;
8
+ constructor(status: number, message: string, detail?: unknown);
9
+ }
10
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/cache-http/error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;gBACd,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;CAM9D"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Framework-agnostic HTTP error consumed by both gxwf-web and tool-cache-proxy
3
+ * adapters. Status + message + optional structured detail.
4
+ */
5
+ export class HttpError extends Error {
6
+ status;
7
+ detail;
8
+ constructor(status, message, detail) {
9
+ super(message);
10
+ this.name = "HttpError";
11
+ this.status = status;
12
+ this.detail = detail;
13
+ }
14
+ }
15
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/cache-http/error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,MAAM,CAAS;IACf,MAAM,CAAW;IAC1B,YAAY,MAAc,EAAE,OAAe,EAAE,MAAgB;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Framework-agnostic handler functions for the shared cache HTTP surface.
3
+ *
4
+ * Both gxwf-web (Route-union dispatch) and tool-cache-proxy (node:http switch)
5
+ * call these functions; their server-specific layer just parses URL/body and
6
+ * serializes the return value. HTTP failures throw `HttpError`.
7
+ */
8
+ import { type TrsTool, type TrsToolVersion } from "@galaxy-tool-util/schema";
9
+ import type { ToolInfoService } from "../tool-info.js";
10
+ import type { ToolSourceDocument } from "../tool-source.js";
11
+ import { type CacheStats } from "../cache/tool-cache.js";
12
+ import type { AddRequest, AddResponse, ClearResponse, DeleteResponse, ListResponse, ParameterSchemaKind, RefetchRequest, RefetchResponse, SearchResults } from "./dto.js";
13
+ /** Per-request context — the service implements both reads and admin ops. */
14
+ export interface HandlerCtx {
15
+ service: ToolInfoService;
16
+ /** Absolute base URL for self-referential links (TRS Tool.url etc.). May be empty. */
17
+ baseUrl: string;
18
+ }
19
+ export interface ListOptions {
20
+ /** Probe each entry to flag undecodable payloads. Adds N file reads. */
21
+ decode?: boolean;
22
+ }
23
+ export declare function listCache(ctx: HandlerCtx, opts?: ListOptions): Promise<ListResponse>;
24
+ export declare function cacheStats(ctx: HandlerCtx): Promise<CacheStats>;
25
+ export declare function deleteCacheEntry(ctx: HandlerCtx, cacheKey: string): Promise<DeleteResponse>;
26
+ export declare function clearCache(ctx: HandlerCtx, prefix?: string): Promise<ClearResponse>;
27
+ export declare function refetchTool(ctx: HandlerCtx, body: RefetchRequest): Promise<RefetchResponse>;
28
+ export declare function addTool(ctx: HandlerCtx, body: AddRequest): Promise<AddResponse>;
29
+ export interface SearchOptions {
30
+ q?: string;
31
+ page?: number;
32
+ pageSize?: number;
33
+ }
34
+ export declare function searchTools(ctx: HandlerCtx, opts: SearchOptions): Promise<SearchResults>;
35
+ export declare function trsListTools(ctx: HandlerCtx): Promise<TrsTool[]>;
36
+ export declare function trsGetTool(ctx: HandlerCtx, toolId: string): Promise<TrsTool>;
37
+ export declare function trsListVersions(ctx: HandlerCtx, toolId: string): Promise<TrsToolVersion[]>;
38
+ export declare function getParsedTool(ctx: HandlerCtx, toolId: string, toolVersion: string): Promise<unknown>;
39
+ export declare function getParameterSchema(ctx: HandlerCtx, toolId: string, toolVersion: string, kind: ParameterSchemaKind): Promise<unknown>;
40
+ export declare function getToolSource(ctx: HandlerCtx, toolId: string, toolVersion: string): Promise<ToolSourceDocument>;
41
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/cache-http/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAKL,KAAK,OAAO,EACZ,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAI/E,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,eAAe,CAAC;IACzB,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;CACjB;AAyDD,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAsB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAuB9F;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAErE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAIjG;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAGzF;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAOjG;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAQrF;AAID,MAAM,WAAW,aAAa;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA8C9F;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAGtE;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKlF;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAGhG;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAIlB;AAQD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAS7B"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Framework-agnostic handler functions for the shared cache HTTP surface.
3
+ *
4
+ * Both gxwf-web (Route-union dispatch) and tool-cache-proxy (node:http switch)
5
+ * call these functions; their server-specific layer just parses URL/body and
6
+ * serializes the return value. HTTP failures throw `HttpError`.
7
+ */
8
+ import * as S from "effect/Schema";
9
+ import * as JSONSchema from "effect/JSONSchema";
10
+ import { ParsedTool, createFieldModel, } from "@galaxy-tool-util/schema";
11
+ import { parseToolshedToolId, toolIdFromTrs } from "../cache/tool-id.js";
12
+ import { DEFAULT_TOOL_VERSION } from "../cache/tool-cache.js";
13
+ import { cacheKey } from "../cache/cache-key.js";
14
+ import { HttpError } from "./error.js";
15
+ import { cacheToTrs, cacheToTrsOne, toTrsToolId } from "./cache-to-trs.js";
16
+ const decodeParsedTool = S.decodeUnknownSync(ParsedTool);
17
+ function tryDecode(contents) {
18
+ try {
19
+ decodeParsedTool(contents);
20
+ return true;
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ async function decorate(ctx, entry, decode) {
27
+ // Older caches recorded stock IDs as <shed>/repos/<stock-id>.
28
+ const stockPrefix = toolIdFromTrs(ctx.service.cache.defaultToolshedUrl, "");
29
+ const suffix = entry.tool_id.startsWith(stockPrefix)
30
+ ? entry.tool_id.slice(stockPrefix.length)
31
+ : null;
32
+ const toolId = suffix !== null && suffix !== "" && !suffix.includes("/") ? suffix : entry.tool_id;
33
+ const parsed = parseToolshedToolId(toolId);
34
+ const refetchable = entry.source !== "orphan" && entry.tool_id !== "unknown" && entry.tool_id !== "";
35
+ const out = {
36
+ cacheKey: entry.cache_key,
37
+ toolId,
38
+ toolVersion: entry.tool_version,
39
+ source: entry.source,
40
+ sourceUrl: entry.source_url,
41
+ cachedAt: entry.cached_at,
42
+ // Optimistic when not probing — UI shouldn't flag-as-broken what we
43
+ // didn't actually check.
44
+ decodable: true,
45
+ refetchable,
46
+ };
47
+ if (entry.tool_version !== DEFAULT_TOOL_VERSION) {
48
+ const coords = ctx.service.cache.resolveToolCoordinates(toolId, DEFAULT_TOOL_VERSION);
49
+ const defaultKey = await cacheKey(coords.toolshedUrl, coords.trsToolId, DEFAULT_TOOL_VERSION);
50
+ if (defaultKey === entry.cache_key)
51
+ out.requestVersion = DEFAULT_TOOL_VERSION;
52
+ }
53
+ if (parsed !== null) {
54
+ const [owner, repo] = parsed.trsToolId.split("~");
55
+ out.toolshedUrl = `${parsed.toolshedUrl}/view/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`;
56
+ }
57
+ const stat = await ctx.service.cache.statCached(entry.cache_key);
58
+ if (stat !== null)
59
+ out.sizeBytes = stat.sizeBytes;
60
+ if (decode) {
61
+ const raw = await ctx.service.cache.loadCachedRaw(entry.cache_key);
62
+ out.decodable = raw !== null && tryDecode(raw);
63
+ }
64
+ return out;
65
+ }
66
+ // ── Admin namespace ────────────────────────────────────────────────────
67
+ export async function listCache(ctx, opts = {}) {
68
+ const raw = (await ctx.service.cache.listCached());
69
+ const entries = await Promise.all(raw.map((e) => decorate(ctx, e, opts.decode === true)));
70
+ const bySource = {};
71
+ let oldest;
72
+ let newest;
73
+ let totalBytes = 0;
74
+ let anySize = false;
75
+ for (const e of entries) {
76
+ bySource[e.source] = (bySource[e.source] ?? 0) + 1;
77
+ if (oldest === undefined || e.cachedAt < oldest)
78
+ oldest = e.cachedAt;
79
+ if (newest === undefined || e.cachedAt > newest)
80
+ newest = e.cachedAt;
81
+ if (e.sizeBytes !== undefined) {
82
+ totalBytes += e.sizeBytes;
83
+ anySize = true;
84
+ }
85
+ }
86
+ const stats = { count: entries.length, bySource };
87
+ if (oldest !== undefined)
88
+ stats.oldest = oldest;
89
+ if (newest !== undefined)
90
+ stats.newest = newest;
91
+ if (anySize)
92
+ stats.totalBytes = totalBytes;
93
+ return { entries, stats };
94
+ }
95
+ export async function cacheStats(ctx) {
96
+ return ctx.service.cache.getCacheStats();
97
+ }
98
+ export async function deleteCacheEntry(ctx, cacheKey) {
99
+ const removed = await ctx.service.cache.removeCached(cacheKey);
100
+ if (!removed)
101
+ throw new HttpError(404, `No cached entry: ${cacheKey}`);
102
+ return { removed };
103
+ }
104
+ export async function clearCache(ctx, prefix) {
105
+ const removed = await ctx.service.cache.clearCache(prefix);
106
+ return { removed };
107
+ }
108
+ export async function refetchTool(ctx, body) {
109
+ if (!body.toolId)
110
+ throw new HttpError(400, "toolId is required");
111
+ try {
112
+ return await ctx.service.refetch(body.toolId, body.toolVersion ?? null, { force: true });
113
+ }
114
+ catch (e) {
115
+ throw new HttpError(502, e instanceof Error ? e.message : String(e));
116
+ }
117
+ }
118
+ export async function addTool(ctx, body) {
119
+ if (!body.toolId)
120
+ throw new HttpError(400, "toolId is required");
121
+ try {
122
+ const r = await ctx.service.refetch(body.toolId, body.toolVersion ?? null);
123
+ return { cacheKey: r.cacheKey, alreadyCached: r.alreadyCached };
124
+ }
125
+ catch (e) {
126
+ throw new HttpError(502, e instanceof Error ? e.message : String(e));
127
+ }
128
+ }
129
+ const DEFAULT_PAGE_SIZE = 25;
130
+ export async function searchTools(ctx, opts) {
131
+ const q = (opts.q ?? "").trim().toLowerCase();
132
+ const page = Math.max(1, Math.floor(opts.page ?? 1));
133
+ const pageSize = Math.max(1, Math.min(200, Math.floor(opts.pageSize ?? DEFAULT_PAGE_SIZE)));
134
+ const entries = (await ctx.service.cache.listCached());
135
+ const enriched = await Promise.all(entries.map(async (entry) => {
136
+ let name;
137
+ let description;
138
+ const raw = await ctx.service.cache.loadCachedRaw(entry.cache_key);
139
+ if (raw !== null && typeof raw === "object") {
140
+ const r = raw;
141
+ if (typeof r.name === "string")
142
+ name = r.name;
143
+ if (typeof r.description === "string")
144
+ description = r.description;
145
+ }
146
+ return { entry, name, description };
147
+ }));
148
+ const filtered = q === ""
149
+ ? enriched
150
+ : enriched.filter(({ entry, name, description }) => {
151
+ if (entry.tool_id.toLowerCase().includes(q))
152
+ return true;
153
+ if (name !== undefined && name.toLowerCase().includes(q))
154
+ return true;
155
+ if (description !== undefined && description.toLowerCase().includes(q))
156
+ return true;
157
+ return false;
158
+ });
159
+ const total = filtered.length;
160
+ const start = (page - 1) * pageSize;
161
+ const slice = filtered.slice(start, start + pageSize);
162
+ return {
163
+ q,
164
+ page,
165
+ pageSize,
166
+ total,
167
+ hits: slice.map(({ entry, name, description }) => {
168
+ const hit = {
169
+ toolId: toTrsToolId(entry.tool_id),
170
+ toolVersion: entry.tool_version,
171
+ };
172
+ if (name !== undefined)
173
+ hit.name = name;
174
+ if (description !== undefined)
175
+ hit.description = description;
176
+ return hit;
177
+ }),
178
+ };
179
+ }
180
+ export async function trsListTools(ctx) {
181
+ const entries = (await ctx.service.cache.listCached());
182
+ return cacheToTrs(entries, ctx.baseUrl);
183
+ }
184
+ export async function trsGetTool(ctx, toolId) {
185
+ const entries = (await ctx.service.cache.listCached());
186
+ const tool = cacheToTrsOne(entries, toolId, ctx.baseUrl);
187
+ if (tool === null)
188
+ throw new HttpError(404, `Tool not found: ${toolId}`);
189
+ return tool;
190
+ }
191
+ export async function trsListVersions(ctx, toolId) {
192
+ const tool = await trsGetTool(ctx, toolId);
193
+ return [...tool.versions];
194
+ }
195
+ export async function getParsedTool(ctx, toolId, toolVersion) {
196
+ const tool = await ctx.service.getToolInfo(toolId, toolVersion);
197
+ if (tool === null)
198
+ throw new HttpError(404, `Tool not found: ${toolId}@${toolVersion}`);
199
+ return tool;
200
+ }
201
+ const SCHEMA_KIND_TO_REPRESENTATION = {
202
+ request: "request",
203
+ landing_request: "landing_request",
204
+ test_case_xml: "test_case_xml",
205
+ };
206
+ export async function getParameterSchema(ctx, toolId, toolVersion, kind) {
207
+ const representation = SCHEMA_KIND_TO_REPRESENTATION[kind];
208
+ if (representation === undefined) {
209
+ throw new HttpError(400, `Unknown parameter schema kind: ${kind}`);
210
+ }
211
+ const tool = await ctx.service.getToolInfo(toolId, toolVersion);
212
+ if (tool === null)
213
+ throw new HttpError(404, `Tool not found: ${toolId}@${toolVersion}`);
214
+ const bundle = {
215
+ parameters: tool.inputs,
216
+ };
217
+ const effectSchema = createFieldModel(bundle, representation);
218
+ if (!effectSchema) {
219
+ throw new HttpError(500, "Could not generate schema — unsupported parameter types");
220
+ }
221
+ try {
222
+ return JSONSchema.make(effectSchema);
223
+ }
224
+ catch (e) {
225
+ const msg = e instanceof Error ? e.message : String(e);
226
+ throw new HttpError(500, `JSON Schema generation failed: ${msg}`);
227
+ }
228
+ }
229
+ export async function getToolSource(ctx, toolId, toolVersion) {
230
+ let source;
231
+ try {
232
+ source = await ctx.service.fetchToolSource(toolId, toolVersion);
233
+ }
234
+ catch (err) {
235
+ throw new HttpError(502, err instanceof Error ? err.message : String(err));
236
+ }
237
+ if (source === null)
238
+ throw new HttpError(404, `Tool source not found: ${toolId}@${toolVersion}`);
239
+ return source;
240
+ }
241
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/cache-http/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @module @galaxy-tool-util/core/http
3
+ *
4
+ * Framework-agnostic HTTP-handler surface shared by `gxwf-web` and
5
+ * `tool-cache-proxy`. Server adapters parse URL/body and serialize the
6
+ * return value; failures throw `HttpError`.
7
+ */
8
+ export { HttpError } from "./error.js";
9
+ export { matchCacheRoute, dispatchCacheRoute, type CacheResult, type CacheRoute, } from "./route-table.js";
10
+ export { cacheToTrs, cacheToTrsOne, entryToTrsVersion, type CacheIndexRecord, } from "./cache-to-trs.js";
11
+ export { type HandlerCtx, type ListOptions, type SearchOptions, listCache, cacheStats, deleteCacheEntry, clearCache, refetchTool, addTool, searchTools, trsListTools, trsGetTool, trsListVersions, getParsedTool, getParameterSchema, getToolSource, } from "./handlers.js";
12
+ export type { AddRequest, AddResponse, CachedToolEntry, ClearResponse, DeleteResponse, ListResponse, ParameterSchemaKind, RefetchRequest, RefetchResponse, SearchResults, } from "./dto.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache-http/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,UAAU,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @module @galaxy-tool-util/core/http
3
+ *
4
+ * Framework-agnostic HTTP-handler surface shared by `gxwf-web` and
5
+ * `tool-cache-proxy`. Server adapters parse URL/body and serialize the
6
+ * return value; failures throw `HttpError`.
7
+ */
8
+ export { HttpError } from "./error.js";
9
+ export { matchCacheRoute, dispatchCacheRoute, } from "./route-table.js";
10
+ export { cacheToTrs, cacheToTrsOne, entryToTrsVersion, } from "./cache-to-trs.js";
11
+ export { listCache, cacheStats, deleteCacheEntry, clearCache, refetchTool, addTool, searchTools, trsListTools, trsGetTool, trsListVersions, getParsedTool, getParameterSchema, getToolSource, } from "./handlers.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache-http/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,eAAe,EACf,kBAAkB,GAGnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,eAAe,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * URL routing for the shared cache HTTP surface.
3
+ *
4
+ * `matchCacheRoute` returns a tagged-union route object given a method + url
5
+ * (or null if no cache route matches). `dispatchCacheRoute` invokes the
6
+ * matching handler. Both are framework-agnostic — server adapters (Node http,
7
+ * Effect HttpServer, …) compose them with their own non-cache routes.
8
+ */
9
+ import { type HandlerCtx } from "./handlers.js";
10
+ import type { ParameterSchemaKind } from "./dto.js";
11
+ export type CacheRoute = {
12
+ handler: "searchTools";
13
+ query: URLSearchParams;
14
+ } | {
15
+ handler: "trsListTools";
16
+ } | {
17
+ handler: "trsGetTool";
18
+ toolId: string;
19
+ } | {
20
+ handler: "trsListVersions";
21
+ toolId: string;
22
+ } | {
23
+ handler: "getParsedTool";
24
+ toolId: string;
25
+ toolVersion: string;
26
+ } | {
27
+ handler: "getParameterSchema";
28
+ toolId: string;
29
+ toolVersion: string;
30
+ kind: ParameterSchemaKind;
31
+ } | {
32
+ handler: "getToolSource";
33
+ toolId: string;
34
+ toolVersion: string;
35
+ } | {
36
+ handler: "listCache";
37
+ query: URLSearchParams;
38
+ } | {
39
+ handler: "cacheStats";
40
+ } | {
41
+ handler: "deleteCacheEntry";
42
+ cacheKey: string;
43
+ } | {
44
+ handler: "clearCache";
45
+ query: URLSearchParams;
46
+ } | {
47
+ handler: "refetchTool";
48
+ } | {
49
+ handler: "addTool";
50
+ };
51
+ /** Match a method + url against the shared cache HTTP surface. */
52
+ export declare function matchCacheRoute(method: string, url: string): CacheRoute | null;
53
+ /** Handler results carry either a JSON payload or source bytes and headers. */
54
+ export type CacheResult = {
55
+ kind: "json";
56
+ body: unknown;
57
+ } | {
58
+ kind: "bytes";
59
+ body: Uint8Array;
60
+ headers: Record<string, string>;
61
+ };
62
+ /**
63
+ * Run a matched route. Body-bearing routes call `readBody` for parsed JSON.
64
+ * Errors throw `HttpError`; adapters translate them.
65
+ */
66
+ export declare function dispatchCacheRoute(route: CacheRoute, ctx: HandlerCtx, readBody: <T>() => Promise<T>): Promise<CacheResult>;
67
+ //# sourceMappingURL=route-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-table.d.ts","sourceRoot":"","sources":["../../src/cache-http/route-table.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAcL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAc,mBAAmB,EAAkB,MAAM,UAAU,CAAC;AAEhF,MAAM,MAAM,UAAU,GAElB;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAClD;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACjE;IACE,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;CAC3B,GACD;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAEjE;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAChD;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,GACzB;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GACjD;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,CAAC;AAU3B,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAgE9E;AAED,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAEzE;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,CAetB"}