@bluelibs/runner 3.2.0 → 3.3.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.
- package/README.md +482 -34
- package/dist/cli/extract-docs.d.ts +2 -0
- package/dist/cli/extract-docs.js +88 -0
- package/dist/cli/extract-docs.js.map +1 -0
- package/dist/define.d.ts +21 -1
- package/dist/define.js +71 -0
- package/dist/define.js.map +1 -1
- package/dist/defs.d.ts +163 -4
- package/dist/defs.js +30 -0
- package/dist/defs.js.map +1 -1
- package/dist/docs/introspect.d.ts +7 -0
- package/dist/docs/introspect.js +199 -0
- package/dist/docs/introspect.js.map +1 -0
- package/dist/docs/markdown.d.ts +2 -0
- package/dist/docs/markdown.js +148 -0
- package/dist/docs/markdown.js.map +1 -0
- package/dist/docs/model.d.ts +62 -0
- package/dist/docs/model.js +33 -0
- package/dist/docs/model.js.map +1 -0
- package/dist/express/docsRouter.d.ts +12 -0
- package/dist/express/docsRouter.js +54 -0
- package/dist/express/docsRouter.js.map +1 -0
- package/dist/globals/globalMiddleware.d.ts +1 -0
- package/dist/globals/globalMiddleware.js +2 -0
- package/dist/globals/globalMiddleware.js.map +1 -1
- package/dist/globals/middleware/timeout.middleware.d.ts +8 -0
- package/dist/globals/middleware/timeout.middleware.js +35 -0
- package/dist/globals/middleware/timeout.middleware.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/models/DependencyProcessor.js +2 -2
- package/dist/models/DependencyProcessor.js.map +1 -1
- package/dist/models/Store.d.ts +1 -1
- package/dist/models/StoreConstants.d.ts +1 -1
- package/dist/models/StoreConstants.js +2 -1
- package/dist/models/StoreConstants.js.map +1 -1
- package/dist/models/TaskRunner.d.ts +2 -3
- package/dist/models/TaskRunner.js +1 -2
- package/dist/models/TaskRunner.js.map +1 -1
- package/dist/testing.d.ts +24 -0
- package/dist/testing.js +41 -0
- package/dist/testing.js.map +1 -0
- package/package.json +4 -4
- package/src/__tests__/benchmark/task-benchmark.test.ts +132 -0
- package/src/__tests__/createTestResource.test.ts +139 -0
- package/src/__tests__/globals/timeout.middleware.test.ts +88 -0
- package/src/__tests__/models/Semaphore.test.ts +1 -1
- package/src/__tests__/override.test.ts +104 -0
- package/src/__tests__/run.overrides.test.ts +50 -21
- package/src/__tests__/run.test.ts +19 -0
- package/src/__tests__/tags.test.ts +396 -0
- package/src/__tests__/typesafety.test.ts +109 -1
- package/src/define.ts +97 -0
- package/src/defs.ts +168 -8
- package/src/globals/globalMiddleware.ts +2 -0
- package/src/globals/middleware/timeout.middleware.ts +46 -0
- package/src/index.ts +6 -0
- package/src/models/DependencyProcessor.ts +2 -10
- package/src/models/StoreConstants.ts +2 -1
- package/src/models/TaskRunner.ts +1 -3
- package/src/testing.ts +66 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.introspectResource = introspectResource;
|
|
4
|
+
const EventManager_1 = require("../models/EventManager");
|
|
5
|
+
const Logger_1 = require("../models/Logger");
|
|
6
|
+
const Store_1 = require("../models/Store");
|
|
7
|
+
const defs_1 = require("../defs");
|
|
8
|
+
const model_1 = require("./model");
|
|
9
|
+
async function introspectResource(root, config = {}, options = {}) {
|
|
10
|
+
const includeGlobals = options.includeGlobals ?? false;
|
|
11
|
+
// Build a Store but do not compute dependencies or initialize root.
|
|
12
|
+
const eventManager = new EventManager_1.EventManager();
|
|
13
|
+
const logger = new Logger_1.Logger(eventManager);
|
|
14
|
+
const store = new Store_1.Store(eventManager, logger);
|
|
15
|
+
// Only registration phase, with overrides processed, but no init.
|
|
16
|
+
store.initializeStore(root, config);
|
|
17
|
+
store.processOverrides();
|
|
18
|
+
const nodes = [];
|
|
19
|
+
const edges = [];
|
|
20
|
+
// Helpers
|
|
21
|
+
const shouldInclude = (id) => {
|
|
22
|
+
const str = (0, model_1.normalizeId)(id);
|
|
23
|
+
if (includeGlobals)
|
|
24
|
+
return true;
|
|
25
|
+
return !str.startsWith("globals.");
|
|
26
|
+
};
|
|
27
|
+
// Resources
|
|
28
|
+
for (const res of store.resources.values()) {
|
|
29
|
+
if (!shouldInclude(res.resource.id))
|
|
30
|
+
continue;
|
|
31
|
+
nodes.push({
|
|
32
|
+
...(0, model_1.buildBaseNode)("resource", res.resource.id, res.resource[defs_1.symbols.filePath], res.resource.meta),
|
|
33
|
+
});
|
|
34
|
+
const regItems = Array.isArray(res.resource.register)
|
|
35
|
+
? res.resource.register
|
|
36
|
+
: [];
|
|
37
|
+
for (const item of regItems) {
|
|
38
|
+
const targetId = item.id || item?.resource?.id;
|
|
39
|
+
if (!targetId || !shouldInclude(targetId))
|
|
40
|
+
continue;
|
|
41
|
+
edges.push({
|
|
42
|
+
type: "registers",
|
|
43
|
+
from: (0, model_1.normalizeId)(res.resource.id),
|
|
44
|
+
to: (0, model_1.normalizeId)(targetId),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// Resource dependencies
|
|
48
|
+
const deps = (res.resource.dependencies || {});
|
|
49
|
+
for (const depKey of Object.keys(deps)) {
|
|
50
|
+
const dep = deps[depKey];
|
|
51
|
+
const depId = dep?.id;
|
|
52
|
+
if (!depId || !shouldInclude(depId))
|
|
53
|
+
continue;
|
|
54
|
+
edges.push({
|
|
55
|
+
type: "dependsOn",
|
|
56
|
+
from: (0, model_1.normalizeId)(res.resource.id),
|
|
57
|
+
to: (0, model_1.normalizeId)(depId),
|
|
58
|
+
meta: { key: depKey },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Resource middleware
|
|
62
|
+
for (const mw of res.resource.middleware || []) {
|
|
63
|
+
const mwId = mw.id;
|
|
64
|
+
if (!mwId || !shouldInclude(mwId))
|
|
65
|
+
continue;
|
|
66
|
+
edges.push({
|
|
67
|
+
type: "middleware",
|
|
68
|
+
from: (0, model_1.normalizeId)(res.resource.id),
|
|
69
|
+
to: (0, model_1.normalizeId)(mwId),
|
|
70
|
+
meta: { scope: "resource" },
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Tasks
|
|
75
|
+
for (const t of store.tasks.values()) {
|
|
76
|
+
if (!shouldInclude(t.task.id))
|
|
77
|
+
continue;
|
|
78
|
+
nodes.push({
|
|
79
|
+
...(0, model_1.buildBaseNode)("task", t.task.id, t.task[defs_1.symbols.filePath], t.task.meta),
|
|
80
|
+
on: t.task.on
|
|
81
|
+
? t.task.on === "*"
|
|
82
|
+
? "*"
|
|
83
|
+
: (0, model_1.normalizeId)(t.task.on.id)
|
|
84
|
+
: undefined,
|
|
85
|
+
listenerOrder: t.task.listenerOrder,
|
|
86
|
+
});
|
|
87
|
+
// Dependencies
|
|
88
|
+
const deps = (t.task.dependencies || {});
|
|
89
|
+
for (const depKey of Object.keys(deps)) {
|
|
90
|
+
const dep = deps[depKey];
|
|
91
|
+
const depId = dep?.id;
|
|
92
|
+
if (!depId || !shouldInclude(depId))
|
|
93
|
+
continue;
|
|
94
|
+
edges.push({
|
|
95
|
+
type: "dependsOn",
|
|
96
|
+
from: (0, model_1.normalizeId)(t.task.id),
|
|
97
|
+
to: (0, model_1.normalizeId)(depId),
|
|
98
|
+
meta: { key: depKey },
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// Middleware
|
|
102
|
+
for (const mw of t.task.middleware || []) {
|
|
103
|
+
const mwId = mw.id;
|
|
104
|
+
if (!mwId || !shouldInclude(mwId))
|
|
105
|
+
continue;
|
|
106
|
+
edges.push({
|
|
107
|
+
type: "middleware",
|
|
108
|
+
from: (0, model_1.normalizeId)(t.task.id),
|
|
109
|
+
to: (0, model_1.normalizeId)(mwId),
|
|
110
|
+
meta: { scope: "task" },
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// Listeners
|
|
114
|
+
if (t.task.on && t.task.on !== "*") {
|
|
115
|
+
const eventId = t.task.on.id;
|
|
116
|
+
if (shouldInclude(eventId)) {
|
|
117
|
+
edges.push({
|
|
118
|
+
type: "listensTo",
|
|
119
|
+
from: (0, model_1.normalizeId)(t.task.id),
|
|
120
|
+
to: (0, model_1.normalizeId)(eventId),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Events (registered globally + lifecycle + custom)
|
|
126
|
+
for (const e of store.events.values()) {
|
|
127
|
+
const eventId = e.event.id;
|
|
128
|
+
if (!eventId)
|
|
129
|
+
continue;
|
|
130
|
+
if (!shouldInclude(eventId))
|
|
131
|
+
continue;
|
|
132
|
+
nodes.push({
|
|
133
|
+
...(0, model_1.buildBaseNode)("event", eventId, e.event[defs_1.symbols.filePath], e.event.meta),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Middleware nodes
|
|
137
|
+
for (const mw of store.middlewares.values()) {
|
|
138
|
+
if (!shouldInclude(mw.middleware.id))
|
|
139
|
+
continue;
|
|
140
|
+
nodes.push({
|
|
141
|
+
...(0, model_1.buildBaseNode)("middleware", mw.middleware.id, mw.middleware[defs_1.symbols.filePath], mw.middleware.meta),
|
|
142
|
+
everywhere: {
|
|
143
|
+
tasks: Boolean(mw.middleware[defs_1.symbols.middlewareEverywhereTasks]),
|
|
144
|
+
resources: Boolean(mw.middleware[defs_1.symbols.middlewareEverywhereResources]),
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
// Dependencies of middleware
|
|
148
|
+
const deps = (mw.middleware.dependencies || {});
|
|
149
|
+
for (const depKey of Object.keys(deps)) {
|
|
150
|
+
const dep = deps[depKey];
|
|
151
|
+
const depId = dep?.id;
|
|
152
|
+
if (!depId || !shouldInclude(depId))
|
|
153
|
+
continue;
|
|
154
|
+
edges.push({
|
|
155
|
+
type: "dependsOn",
|
|
156
|
+
from: (0, model_1.normalizeId)(mw.middleware.id),
|
|
157
|
+
to: (0, model_1.normalizeId)(depId),
|
|
158
|
+
meta: { key: depKey },
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Override requests and overrides mapping
|
|
163
|
+
for (const req of store.overrideRequests) {
|
|
164
|
+
const source = req.source;
|
|
165
|
+
const targetId = req.override?.id || req.override?.resource?.id;
|
|
166
|
+
if (targetId && shouldInclude(source) && shouldInclude(targetId)) {
|
|
167
|
+
edges.push({
|
|
168
|
+
type: "overrideRequest",
|
|
169
|
+
from: (0, model_1.normalizeId)(source),
|
|
170
|
+
to: (0, model_1.normalizeId)(targetId),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
for (const [id, ov] of store.overrides) {
|
|
175
|
+
if (!shouldInclude(id))
|
|
176
|
+
continue;
|
|
177
|
+
edges.push({
|
|
178
|
+
type: "overrides",
|
|
179
|
+
from: (0, model_1.normalizeId)(ov.id || ov?.resource?.id),
|
|
180
|
+
to: (0, model_1.normalizeId)(id),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
const graph = {
|
|
184
|
+
version: 1,
|
|
185
|
+
summary: {
|
|
186
|
+
counts: {
|
|
187
|
+
resources: nodes.filter((n) => n.kind === "resource").length,
|
|
188
|
+
tasks: nodes.filter((n) => n.kind === "task").length,
|
|
189
|
+
events: nodes.filter((n) => n.kind === "event").length,
|
|
190
|
+
middleware: nodes.filter((n) => n.kind === "middleware").length,
|
|
191
|
+
edges: edges.length,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
nodes,
|
|
195
|
+
edges,
|
|
196
|
+
};
|
|
197
|
+
return graph;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=introspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/docs/introspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderMarkdown = renderMarkdown;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
function ensureDir(dir) {
|
|
7
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
8
|
+
}
|
|
9
|
+
function escapeMd(s) {
|
|
10
|
+
if (!s)
|
|
11
|
+
return "";
|
|
12
|
+
return String(s).replace(/\|/g, "\\|");
|
|
13
|
+
}
|
|
14
|
+
function kinds(nodes) {
|
|
15
|
+
return {
|
|
16
|
+
resources: nodes.filter((n) => n.kind === "resource"),
|
|
17
|
+
tasks: nodes.filter((n) => n.kind === "task"),
|
|
18
|
+
events: nodes.filter((n) => n.kind === "event"),
|
|
19
|
+
middleware: nodes.filter((n) => n.kind === "middleware"),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function slugifyId(id) {
|
|
23
|
+
return id
|
|
24
|
+
.replace(/Symbol\(([^)]*)\)/g, "$1")
|
|
25
|
+
.replace(/[^a-zA-Z0-9._-]+/g, "-")
|
|
26
|
+
.replace(/-+/g, "-")
|
|
27
|
+
.replace(/^-|-$|\.$/g, "");
|
|
28
|
+
}
|
|
29
|
+
function kindDir(kind) {
|
|
30
|
+
if (kind === "resource")
|
|
31
|
+
return "resources";
|
|
32
|
+
if (kind === "task")
|
|
33
|
+
return "tasks";
|
|
34
|
+
if (kind === "event")
|
|
35
|
+
return "events";
|
|
36
|
+
return "middleware";
|
|
37
|
+
}
|
|
38
|
+
function renderTable(nodes) {
|
|
39
|
+
if (nodes.length === 0)
|
|
40
|
+
return "_None_\n";
|
|
41
|
+
let out = "| ID | Title | Description | File | Tags |\n| --- | --- | --- | --- | --- |\n";
|
|
42
|
+
for (const n of nodes) {
|
|
43
|
+
const tags = Array.isArray(n.tags)
|
|
44
|
+
? n.tags
|
|
45
|
+
.map((t) => (typeof t === "string" ? t : t?.id ?? "[tag]"))
|
|
46
|
+
.join(", ")
|
|
47
|
+
: "";
|
|
48
|
+
const link = `${kindDir(n.kind)}/${slugifyId(n.id)}.md`;
|
|
49
|
+
out += `| [${escapeMd(n.id)}](${link}) | ${escapeMd(n.title)} | ${escapeMd(n.description)} | ${escapeMd(n.file)} | ${escapeMd(tags)} |\n`;
|
|
50
|
+
}
|
|
51
|
+
return out + "\n";
|
|
52
|
+
}
|
|
53
|
+
function renderMarkdown(graph, outDir) {
|
|
54
|
+
ensureDir(outDir);
|
|
55
|
+
ensureDir(path.join(outDir, "resources"));
|
|
56
|
+
ensureDir(path.join(outDir, "tasks"));
|
|
57
|
+
ensureDir(path.join(outDir, "events"));
|
|
58
|
+
ensureDir(path.join(outDir, "middleware"));
|
|
59
|
+
const idx = [
|
|
60
|
+
`# Project Book`,
|
|
61
|
+
``,
|
|
62
|
+
`This document was generated from your Runner definitions.`,
|
|
63
|
+
``,
|
|
64
|
+
`## Summary`,
|
|
65
|
+
`- Resources: ${graph.summary.counts.resources}`,
|
|
66
|
+
`- Tasks: ${graph.summary.counts.tasks}`,
|
|
67
|
+
`- Events: ${graph.summary.counts.events}`,
|
|
68
|
+
`- Middleware: ${graph.summary.counts.middleware}`,
|
|
69
|
+
`- Edges: ${graph.summary.counts.edges}`,
|
|
70
|
+
``,
|
|
71
|
+
`## Table of Contents`,
|
|
72
|
+
`- [Resources](#resources)`,
|
|
73
|
+
`- [Tasks](#tasks)`,
|
|
74
|
+
`- [Events](#events)`,
|
|
75
|
+
`- [Middleware](#middleware)`,
|
|
76
|
+
`- [Namespaces](#namespaces)`,
|
|
77
|
+
``,
|
|
78
|
+
];
|
|
79
|
+
const grouped = kinds(graph.nodes);
|
|
80
|
+
idx.push("## Resources\n\n" + renderTable(grouped.resources));
|
|
81
|
+
idx.push("## Tasks\n\n" + renderTable(grouped.tasks));
|
|
82
|
+
idx.push("## Events\n\n" + renderTable(grouped.events));
|
|
83
|
+
idx.push("## Middleware\n\n" + renderTable(grouped.middleware));
|
|
84
|
+
// Namespaces section
|
|
85
|
+
const byNs = new Map();
|
|
86
|
+
for (const n of graph.nodes) {
|
|
87
|
+
const ns = n.namespace || "(none)";
|
|
88
|
+
const list = byNs.get(ns) || [];
|
|
89
|
+
list.push(n);
|
|
90
|
+
byNs.set(ns, list);
|
|
91
|
+
}
|
|
92
|
+
idx.push("## Namespaces\n");
|
|
93
|
+
for (const [ns, list] of Array.from(byNs.entries()).sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
94
|
+
const counts = kinds(list);
|
|
95
|
+
idx.push(`### ${ns}\n- resources: ${counts.resources.length}\n- tasks: ${counts.tasks.length}\n- events: ${counts.events.length}\n- middleware: ${counts.middleware.length}\n`);
|
|
96
|
+
}
|
|
97
|
+
const readme = idx.join("\n");
|
|
98
|
+
fs.writeFileSync(path.join(outDir, "index.md"), readme, "utf-8");
|
|
99
|
+
fs.writeFileSync(path.join(outDir, "README.md"), readme, "utf-8");
|
|
100
|
+
// Build reverse edge index for dependents
|
|
101
|
+
const incoming = new Map();
|
|
102
|
+
for (const e of graph.edges) {
|
|
103
|
+
const list = incoming.get(e.to) || [];
|
|
104
|
+
list.push({ type: e.type, from: e.from, meta: e.meta });
|
|
105
|
+
incoming.set(e.to, list);
|
|
106
|
+
}
|
|
107
|
+
// Detail pages
|
|
108
|
+
for (const n of graph.nodes) {
|
|
109
|
+
const header = [
|
|
110
|
+
`# ${n.id}`,
|
|
111
|
+
"",
|
|
112
|
+
n.title ? `> ${n.title}` : "",
|
|
113
|
+
n.description ? `\n${n.description}\n` : "",
|
|
114
|
+
];
|
|
115
|
+
const file = n.file
|
|
116
|
+
? `- File: \
|
|
117
|
+
\`${n.file}\``
|
|
118
|
+
: "";
|
|
119
|
+
const tags = Array.isArray(n.tags)
|
|
120
|
+
? n.tags
|
|
121
|
+
.map((t) => typeof t === "string" ? `\`${t}\`` : `\`${t?.id}\``)
|
|
122
|
+
.join(" ")
|
|
123
|
+
: "";
|
|
124
|
+
const edgesOut = graph.edges.filter((e) => e.from === n.id);
|
|
125
|
+
const edgesIn = incoming.get(n.id) || [];
|
|
126
|
+
const sect = [
|
|
127
|
+
...header,
|
|
128
|
+
"",
|
|
129
|
+
file,
|
|
130
|
+
tags ? `- Tags: ${tags}` : "",
|
|
131
|
+
"",
|
|
132
|
+
"## Outgoing",
|
|
133
|
+
edgesOut.length ? "" : "_None_",
|
|
134
|
+
...edgesOut.map((e) => `- ${e.type} → \
|
|
135
|
+
\`${e.to}\`${e.meta ? ` (${JSON.stringify(e.meta)})` : ""}`),
|
|
136
|
+
"",
|
|
137
|
+
"## Incoming",
|
|
138
|
+
edgesIn.length ? "" : "_None_",
|
|
139
|
+
...edgesIn.map((e) => `- ${e.type} ← \
|
|
140
|
+
\`${e.from}\`${e.meta ? ` (${JSON.stringify(e.meta)})` : ""}`),
|
|
141
|
+
"",
|
|
142
|
+
"[Back to index](../index.md)",
|
|
143
|
+
].filter(Boolean);
|
|
144
|
+
const dir = path.join(outDir, kindDir(n.kind));
|
|
145
|
+
fs.writeFileSync(path.join(dir, `${slugifyId(n.id)}.md`), sect.join("\n"), "utf-8");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/docs/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export type NormalizedId = string;
|
|
2
|
+
export type NodeKind = "resource" | "task" | "event" | "middleware";
|
|
3
|
+
export type BaseNode = {
|
|
4
|
+
id: NormalizedId;
|
|
5
|
+
kind: NodeKind;
|
|
6
|
+
file?: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
tags?: any[];
|
|
10
|
+
namespace?: string;
|
|
11
|
+
};
|
|
12
|
+
export type ResourceNode = BaseNode & {
|
|
13
|
+
kind: "resource";
|
|
14
|
+
};
|
|
15
|
+
export type TaskNode = BaseNode & {
|
|
16
|
+
kind: "task";
|
|
17
|
+
on?: NormalizedId | "*";
|
|
18
|
+
listenerOrder?: number;
|
|
19
|
+
};
|
|
20
|
+
export type EventNode = BaseNode & {
|
|
21
|
+
kind: "event";
|
|
22
|
+
};
|
|
23
|
+
export type MiddlewareNode = BaseNode & {
|
|
24
|
+
kind: "middleware";
|
|
25
|
+
everywhere?: {
|
|
26
|
+
tasks: boolean;
|
|
27
|
+
resources: boolean;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export type GraphNode = ResourceNode | TaskNode | EventNode | MiddlewareNode;
|
|
31
|
+
export type EdgeType = "registers" | "dependsOn" | "listensTo" | "middleware" | "overrideRequest" | "overrides";
|
|
32
|
+
export type GraphEdge = {
|
|
33
|
+
type: EdgeType;
|
|
34
|
+
from: NormalizedId;
|
|
35
|
+
to: NormalizedId;
|
|
36
|
+
meta?: Record<string, any>;
|
|
37
|
+
};
|
|
38
|
+
export type DocsGraph = {
|
|
39
|
+
version: 1;
|
|
40
|
+
summary: {
|
|
41
|
+
counts: {
|
|
42
|
+
resources: number;
|
|
43
|
+
tasks: number;
|
|
44
|
+
events: number;
|
|
45
|
+
middleware: number;
|
|
46
|
+
edges: number;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
nodes: GraphNode[];
|
|
50
|
+
edges: GraphEdge[];
|
|
51
|
+
packages?: {
|
|
52
|
+
name: string;
|
|
53
|
+
root?: string;
|
|
54
|
+
}[];
|
|
55
|
+
};
|
|
56
|
+
export declare function guessNamespaceFromId(id: string): string | undefined;
|
|
57
|
+
export declare function normalizeId(id: string | symbol): NormalizedId;
|
|
58
|
+
export declare function buildBaseNode(kind: NodeKind, id: string | symbol, file: string | undefined, meta: {
|
|
59
|
+
title?: string;
|
|
60
|
+
description?: string;
|
|
61
|
+
tags?: any[];
|
|
62
|
+
} | undefined): BaseNode;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.guessNamespaceFromId = guessNamespaceFromId;
|
|
4
|
+
exports.normalizeId = normalizeId;
|
|
5
|
+
exports.buildBaseNode = buildBaseNode;
|
|
6
|
+
function guessNamespaceFromId(id) {
|
|
7
|
+
if (!id)
|
|
8
|
+
return undefined;
|
|
9
|
+
const parts = id.split(".");
|
|
10
|
+
if (parts.length < 2)
|
|
11
|
+
return parts[0] || undefined;
|
|
12
|
+
// Heuristic: first two segments, eg: "app.tasks"
|
|
13
|
+
return parts.slice(0, 2).join(".");
|
|
14
|
+
}
|
|
15
|
+
function normalizeId(id) {
|
|
16
|
+
if (typeof id === "string")
|
|
17
|
+
return id;
|
|
18
|
+
const s = id.toString?.() || String(id);
|
|
19
|
+
return s;
|
|
20
|
+
}
|
|
21
|
+
function buildBaseNode(kind, id, file, meta) {
|
|
22
|
+
const normId = normalizeId(id);
|
|
23
|
+
return {
|
|
24
|
+
id: normId,
|
|
25
|
+
kind,
|
|
26
|
+
file,
|
|
27
|
+
title: meta?.title,
|
|
28
|
+
description: meta?.description,
|
|
29
|
+
tags: meta?.tags,
|
|
30
|
+
namespace: typeof id === "string" ? guessNamespaceFromId(id) : undefined,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/docs/model.ts"],"names":[],"mappings":";;AAuEA,oDAMC;AAED,kCAIC;AAED,sCAgBC;AA9BD,SAAgB,oBAAoB,CAAC,EAAU;IAC7C,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IACnD,iDAAiD;IACjD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,WAAW,CAAC,EAAmB;IAC7C,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,GAAI,EAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,aAAa,CAC3B,IAAc,EACd,EAAmB,EACnB,IAAwB,EACxB,IAAwE;IAExE,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO;QACL,EAAE,EAAE,MAAM;QACV,IAAI;QACJ,IAAI;QACJ,KAAK,EAAE,IAAI,EAAE,KAAK;QAClB,WAAW,EAAE,IAAI,EAAE,WAAW;QAC9B,IAAI,EAAE,IAAI,EAAE,IAAI;QAChB,SAAS,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KAC7D,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import type { IResource } from "../defs";
|
|
3
|
+
type DocsRouterOptions = {
|
|
4
|
+
getRoot: () => {
|
|
5
|
+
resource: IResource<any, any, any, any>;
|
|
6
|
+
config?: any;
|
|
7
|
+
};
|
|
8
|
+
includeGlobals?: boolean;
|
|
9
|
+
enabled?: boolean | (() => boolean);
|
|
10
|
+
};
|
|
11
|
+
export declare function createDocsRouter(options: DocsRouterOptions): Router;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDocsRouter = createDocsRouter;
|
|
4
|
+
const express_1 = require("express");
|
|
5
|
+
const introspect_1 = require("../docs/introspect");
|
|
6
|
+
function createDocsRouter(options) {
|
|
7
|
+
const router = express_1.default.Router();
|
|
8
|
+
const isEnabled = () => {
|
|
9
|
+
if (typeof options.enabled === "function")
|
|
10
|
+
return options.enabled();
|
|
11
|
+
if (typeof options.enabled === "boolean")
|
|
12
|
+
return options.enabled;
|
|
13
|
+
return process.env.RUNNER_DOCS === "1";
|
|
14
|
+
};
|
|
15
|
+
router.get("/docs.json", async (req, res) => {
|
|
16
|
+
if (!isEnabled())
|
|
17
|
+
return res.status(404).end();
|
|
18
|
+
const { resource, config } = options.getRoot();
|
|
19
|
+
const graph = await (0, introspect_1.introspectResource)(resource, config ?? {}, {
|
|
20
|
+
includeGlobals: options.includeGlobals,
|
|
21
|
+
});
|
|
22
|
+
res.json(graph);
|
|
23
|
+
});
|
|
24
|
+
router.get("/docs", (req, res) => {
|
|
25
|
+
if (!isEnabled())
|
|
26
|
+
return res.status(404).end();
|
|
27
|
+
res.setHeader("content-type", "text/html");
|
|
28
|
+
res.end(`<!doctype html>
|
|
29
|
+
<html>
|
|
30
|
+
<head>
|
|
31
|
+
<meta charset="utf-8" />
|
|
32
|
+
<title>Runner Docs</title>
|
|
33
|
+
<style>
|
|
34
|
+
body { font-family: -apple-system, Segoe UI, Roboto, sans-serif; margin: 2rem; }
|
|
35
|
+
pre { background: #f6f8fa; padding: 1rem; overflow: auto; }
|
|
36
|
+
</style>
|
|
37
|
+
</head>
|
|
38
|
+
<body>
|
|
39
|
+
<h1>Runner Docs</h1>
|
|
40
|
+
<p>This is a minimal viewer. Fetching <code>/docs.json</code> below:</p>
|
|
41
|
+
<pre id="out">Loading...</pre>
|
|
42
|
+
<script>
|
|
43
|
+
fetch('./docs.json').then(r=>r.json()).then(g=>{
|
|
44
|
+
document.getElementById('out').textContent = JSON.stringify(g, null, 2);
|
|
45
|
+
}).catch(e=>{
|
|
46
|
+
document.getElementById('out').textContent = String(e);
|
|
47
|
+
});
|
|
48
|
+
</script>
|
|
49
|
+
</body>
|
|
50
|
+
</html>`);
|
|
51
|
+
});
|
|
52
|
+
return router;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=docsRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docsRouter.js","sourceRoot":"","sources":["../../src/express/docsRouter.ts"],"names":[],"mappings":";;AAUA,4CA8CC;AAxDD,qCAA0C;AAC1C,mDAAwD;AASxD,SAAgB,gBAAgB,CAAC,OAA0B;IACzD,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,IAAA,+BAAkB,EAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE;YAC7D,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/C,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;UAsBF,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -20,4 +20,5 @@ export declare const globalMiddlewares: {
|
|
|
20
20
|
cacheFactoryTask: import("../defs").ITask<any, Promise<import("./middleware/cache.middleware").ICacheInstance>, any, undefined>;
|
|
21
21
|
}, any>;
|
|
22
22
|
}>;
|
|
23
|
+
timeout: import("../defs").IMiddleware<import("./middleware/timeout.middleware").TimeoutMiddlewareConfig, import("../defs").DependencyMapType>;
|
|
23
24
|
};
|
|
@@ -4,6 +4,7 @@ exports.globalMiddlewares = void 0;
|
|
|
4
4
|
const cache_middleware_1 = require("./middleware/cache.middleware");
|
|
5
5
|
const requireContext_middleware_1 = require("./middleware/requireContext.middleware");
|
|
6
6
|
const retry_middleware_1 = require("./middleware/retry.middleware");
|
|
7
|
+
const timeout_middleware_1 = require("./middleware/timeout.middleware");
|
|
7
8
|
/**
|
|
8
9
|
* Global middlewares
|
|
9
10
|
*/
|
|
@@ -11,5 +12,6 @@ exports.globalMiddlewares = {
|
|
|
11
12
|
requireContext: requireContext_middleware_1.requireContextMiddleware,
|
|
12
13
|
retry: retry_middleware_1.retryMiddleware,
|
|
13
14
|
cache: cache_middleware_1.cacheMiddleware,
|
|
15
|
+
timeout: timeout_middleware_1.timeoutMiddleware,
|
|
14
16
|
};
|
|
15
17
|
//# sourceMappingURL=globalMiddleware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalMiddleware.js","sourceRoot":"","sources":["../../src/globals/globalMiddleware.ts"],"names":[],"mappings":";;;AAEA,oEAAgE;AAChE,sFAAkF;AAClF,oEAAgE;
|
|
1
|
+
{"version":3,"file":"globalMiddleware.js","sourceRoot":"","sources":["../../src/globals/globalMiddleware.ts"],"names":[],"mappings":";;;AAEA,oEAAgE;AAChE,sFAAkF;AAClF,oEAAgE;AAChE,wEAAoE;AAEpE;;GAEG;AACU,QAAA,iBAAiB,GAAG;IAC/B,cAAc,EAAE,oDAAwB;IACxC,KAAK,EAAE,kCAAe;IACtB,KAAK,EAAE,kCAAe;IACtB,OAAO,EAAE,sCAAiB;CAC3B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface TimeoutMiddlewareConfig {
|
|
2
|
+
/**
|
|
3
|
+
* Maximum time in milliseconds before the wrapped operation is aborted
|
|
4
|
+
* and a timeout error is thrown. Defaults to 5000ms.
|
|
5
|
+
*/
|
|
6
|
+
ttl: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const timeoutMiddleware: import("../../defs").IMiddleware<TimeoutMiddlewareConfig, import("../../defs").DependencyMapType>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.timeoutMiddleware = void 0;
|
|
4
|
+
const define_1 = require("../../define");
|
|
5
|
+
exports.timeoutMiddleware = (0, define_1.defineMiddleware)({
|
|
6
|
+
id: "globals.middleware.timeout",
|
|
7
|
+
async run({ task, resource, next }, _deps, config) {
|
|
8
|
+
const input = task ? task.input : resource?.config;
|
|
9
|
+
const ttl = Math.max(0, config.ttl);
|
|
10
|
+
const message = `Operation timed out after ${ttl}ms`;
|
|
11
|
+
// Fast-path: immediate timeout
|
|
12
|
+
if (ttl === 0) {
|
|
13
|
+
const error = new Error(message);
|
|
14
|
+
error.name = "TimeoutError";
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
const controller = new AbortController();
|
|
18
|
+
// Create a timeout promise that rejects when aborted
|
|
19
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
20
|
+
const timeoutId = setTimeout(() => {
|
|
21
|
+
controller.abort();
|
|
22
|
+
const error = new Error(message);
|
|
23
|
+
error.name = "TimeoutError";
|
|
24
|
+
reject(error);
|
|
25
|
+
}, ttl);
|
|
26
|
+
// Clean up timeout if abort signal fires for other reasons
|
|
27
|
+
controller.signal.addEventListener("abort", () => {
|
|
28
|
+
clearTimeout(timeoutId);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
// Race between the actual operation and the timeout
|
|
32
|
+
return Promise.race([next(input), timeoutPromise]);
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=timeout.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout.middleware.js","sourceRoot":"","sources":["../../../src/globals/middleware/timeout.middleware.ts"],"names":[],"mappings":";;;AAAA,yCAAgD;AAUnC,QAAA,iBAAiB,GAAG,IAAA,yBAAgB,EAAC;IAChD,EAAE,EAAE,4BAA4B;IAChC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAA+B;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,6BAA6B,GAAG,IAAI,CAAC;QAErD,+BAA+B;QAC/B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,KAAa,CAAC,IAAI,GAAG,cAAc,CAAC;YACrC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,qDAAqD;QACrD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;gBAChC,KAAa,CAAC,IAAI,GAAG,cAAc,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,EAAE,GAAG,CAAC,CAAC;YAER,2DAA2D;YAC3D,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC/C,YAAY,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,oDAAoD;QACpD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IACrD,CAAC;CACF,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { defineTask, defineResource, defineEvent, defineMiddleware, defineIndex } from "./define";
|
|
1
|
+
import { defineTask, defineResource, defineEvent, defineMiddleware, defineIndex, defineTag, defineOverride } from "./define";
|
|
2
2
|
import { createContext } from "./context";
|
|
3
3
|
import { run } from "./run";
|
|
4
|
+
import { createTestResource } from "./testing";
|
|
4
5
|
declare const globals: {
|
|
5
6
|
events: {
|
|
6
7
|
beforeInit: import("./defs").IEvent<void>;
|
|
@@ -81,9 +82,10 @@ declare const globals: {
|
|
|
81
82
|
cacheFactoryTask: import("./defs").ITask<any, Promise<import("./defs").ICacheInstance>, any, undefined>;
|
|
82
83
|
}, any>;
|
|
83
84
|
}>;
|
|
85
|
+
timeout: import("./defs").IMiddleware<import("./globals/middleware/timeout.middleware").TimeoutMiddlewareConfig, import("./defs").DependencyMapType>;
|
|
84
86
|
};
|
|
85
87
|
};
|
|
86
88
|
export { globals };
|
|
87
|
-
export { defineTask as task, defineResource as resource, defineEvent as event, defineMiddleware as middleware, defineIndex as index, run, createContext, };
|
|
89
|
+
export { defineTask as task, defineResource as resource, defineEvent as event, defineMiddleware as middleware, defineIndex as index, defineTag as tag, defineOverride as override, run, createContext, createTestResource, };
|
|
88
90
|
export * as definitions from "./defs";
|
|
89
91
|
export { Semaphore, Store, EventManager, TaskRunner, Queue } from "./models";
|