@bluelibs/runner-dev 6.1.0 → 6.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 +143 -14
- package/dist/cli/generators/initUtils.js +1 -1
- package/dist/cli/generators/initUtils.js.map +1 -1
- package/dist/cli/generators/scaffold/templates/README.md.js +21 -5
- package/dist/cli/generators/scaffold/templates/README.md.js.map +1 -1
- package/dist/cli/generators/scaffold/templates/index.d.ts +2 -3
- package/dist/cli/generators/scaffold/templates/index.js +5 -7
- package/dist/cli/generators/scaffold/templates/index.js.map +1 -1
- package/dist/cli/generators/scaffold/templates/package.json.d.ts +11 -8
- package/dist/cli/generators/scaffold/templates/package.json.js +11 -8
- package/dist/cli/generators/scaffold/templates/package.json.js.map +1 -1
- package/dist/cli/generators/scaffold/templates/src/app.test.ts.d.ts +1 -0
- package/dist/cli/generators/scaffold/templates/src/app.test.ts.js +29 -0
- package/dist/cli/generators/scaffold/templates/src/app.test.ts.js.map +1 -0
- package/dist/cli/generators/scaffold/templates/src/app.ts.d.ts +1 -0
- package/dist/cli/generators/scaffold/templates/src/app.ts.js +15 -0
- package/dist/cli/generators/scaffold/templates/src/app.ts.js.map +1 -0
- package/dist/cli/generators/scaffold/templates/src/main.test.ts.js +3 -1
- package/dist/cli/generators/scaffold/templates/src/main.test.ts.js.map +1 -1
- package/dist/cli/generators/scaffold/templates/src/main.ts.js +3 -10
- package/dist/cli/generators/scaffold/templates/src/main.ts.js.map +1 -1
- package/dist/cli/generators/scaffold/templates/tsconfig.json.d.ts +2 -0
- package/dist/cli/generators/scaffold/templates/tsconfig.json.js +2 -0
- package/dist/cli/generators/scaffold/templates/tsconfig.json.js.map +1 -1
- package/dist/cli/generators/scaffold.js +2 -3
- package/dist/cli/generators/scaffold.js.map +1 -1
- package/dist/cli/init.js +1 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/docs/packageDocs.d.ts +16 -0
- package/dist/docs/packageDocs.js +107 -0
- package/dist/docs/packageDocs.js.map +1 -0
- package/dist/exportDocs.d.ts +10 -0
- package/dist/exportDocs.js +98 -0
- package/dist/exportDocs.js.map +1 -0
- package/dist/generated/resolvers-types.d.ts +127 -42
- package/dist/index.d.ts +5 -2
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/env.d.ts +5 -0
- package/dist/mcp/env.js +30 -1
- package/dist/mcp/env.js.map +1 -1
- package/dist/mcp/help.d.ts +8 -1
- package/dist/mcp/help.js +30 -4
- package/dist/mcp/help.js.map +1 -1
- package/dist/mcp/http.js +10 -0
- package/dist/mcp/http.js.map +1 -1
- package/dist/mcp/projectOverview.js +13 -4
- package/dist/mcp/projectOverview.js.map +1 -1
- package/dist/mcp/snapshot.d.ts +22 -0
- package/dist/mcp/snapshot.js +347 -0
- package/dist/mcp/snapshot.js.map +1 -0
- package/dist/mcp/tools/graphql.mutation.js +4 -1
- package/dist/mcp/tools/graphql.mutation.js.map +1 -1
- package/dist/mcp/tools/graphql.ping.js +1 -1
- package/dist/mcp/tools/graphql.ping.js.map +1 -1
- package/dist/mcp/tools/graphql.query.js +1 -1
- package/dist/mcp/tools/graphql.query.js.map +1 -1
- package/dist/mcp/tools/help.read.js +7 -5
- package/dist/mcp/tools/help.read.js.map +1 -1
- package/dist/mcp/tools/help.runner.js +3 -1
- package/dist/mcp/tools/help.runner.js.map +1 -1
- package/dist/mcp/tools/help.runnerDev.js +4 -4
- package/dist/mcp/tools/help.runnerDev.js.map +1 -1
- package/dist/mcp.js +4 -9
- package/dist/mcp.js.map +1 -1
- package/dist/resources/cli.config.resource.js +1 -1
- package/dist/resources/cli.config.resource.js.map +1 -1
- package/dist/resources/coverage.resource.js +1 -1
- package/dist/resources/coverage.resource.js.map +1 -1
- package/dist/resources/dev.resource.d.ts +1 -1
- package/dist/resources/dev.resource.js +1 -1
- package/dist/resources/dev.resource.js.map +1 -1
- package/dist/resources/docs.generator.resource.js +1 -1
- package/dist/resources/docs.generator.resource.js.map +1 -1
- package/dist/resources/docsPayload.d.ts +33 -0
- package/dist/resources/docsPayload.js +171 -0
- package/dist/resources/docsPayload.js.map +1 -0
- package/dist/resources/docsUiAssets.d.ts +27 -0
- package/dist/resources/docsUiAssets.js +150 -0
- package/dist/resources/docsUiAssets.js.map +1 -0
- package/dist/resources/graphql-accumulator.resource.d.ts +1 -0
- package/dist/resources/graphql-accumulator.resource.js +31 -27
- package/dist/resources/graphql-accumulator.resource.js.map +1 -1
- package/dist/resources/graphql.cli.resource.js +1 -1
- package/dist/resources/graphql.cli.resource.js.map +1 -1
- package/dist/resources/graphql.query.cli.task.d.ts +2 -4
- package/dist/resources/graphql.query.cli.task.js +1 -1
- package/dist/resources/graphql.query.cli.task.js.map +1 -1
- package/dist/resources/graphql.query.task.d.ts +2 -4
- package/dist/resources/graphql.query.task.js +1 -1
- package/dist/resources/graphql.query.task.js.map +1 -1
- package/dist/resources/http.tag.js +1 -1
- package/dist/resources/http.tag.js.map +1 -1
- package/dist/resources/introspector.cli.resource.js +1 -1
- package/dist/resources/introspector.cli.resource.js.map +1 -1
- package/dist/resources/introspector.resource.js +1 -1
- package/dist/resources/introspector.resource.js.map +1 -1
- package/dist/resources/live.resource.js +4 -4
- package/dist/resources/live.resource.js.map +1 -1
- package/dist/resources/models/Introspector.d.ts +16 -4
- package/dist/resources/models/Introspector.js +68 -39
- package/dist/resources/models/Introspector.js.map +1 -1
- package/dist/resources/models/durable.tools.js +3 -1
- package/dist/resources/models/durable.tools.js.map +1 -1
- package/dist/resources/models/initializeFromStore.js +5 -5
- package/dist/resources/models/initializeFromStore.js.map +1 -1
- package/dist/resources/models/initializeFromStore.utils.d.ts +2 -2
- package/dist/resources/models/initializeFromStore.utils.js +424 -78
- package/dist/resources/models/initializeFromStore.utils.js.map +1 -1
- package/dist/resources/models/introspector.tools.js +103 -19
- package/dist/resources/models/introspector.tools.js.map +1 -1
- package/dist/resources/routeHandlers/createDocsServeHandler.js +13 -37
- package/dist/resources/routeHandlers/createDocsServeHandler.js.map +1 -1
- package/dist/resources/routeHandlers/getDocsData.d.ts +1 -6
- package/dist/resources/routeHandlers/getDocsData.js +10 -168
- package/dist/resources/routeHandlers/getDocsData.js.map +1 -1
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js +1 -1
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js.map +1 -1
- package/dist/resources/server.resource.js +1 -2
- package/dist/resources/server.resource.js.map +1 -1
- package/dist/resources/swap.cli.resource.js +1 -1
- package/dist/resources/swap.cli.resource.js.map +1 -1
- package/dist/resources/swap.resource.js +1 -1
- package/dist/resources/swap.resource.js.map +1 -1
- package/dist/resources/telemetry.resource.js +27 -6
- package/dist/resources/telemetry.resource.js.map +1 -1
- package/dist/resources/ui.static.js +4 -9
- package/dist/resources/ui.static.js.map +1 -1
- package/dist/runtime/symbolMetadata.d.ts +1 -0
- package/dist/{architect/core/interfaces.js → runtime/symbolMetadata.js} +1 -1
- package/dist/runtime/symbolMetadata.js.map +1 -0
- package/dist/schema/model.d.ts +18 -0
- package/dist/schema/model.js +14 -0
- package/dist/schema/model.js.map +1 -1
- package/dist/schema/query.js +6 -4
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/types/AllType.js +2 -21
- package/dist/schema/types/AllType.js.map +1 -1
- package/dist/schema/types/AsyncContextType.js +21 -17
- package/dist/schema/types/AsyncContextType.js.map +1 -1
- package/dist/schema/types/ErrorType.js +1 -3
- package/dist/schema/types/ErrorType.js.map +1 -1
- package/dist/schema/types/EventType.js +6 -19
- package/dist/schema/types/EventType.js.map +1 -1
- package/dist/schema/types/HookType.js +4 -16
- package/dist/schema/types/HookType.js.map +1 -1
- package/dist/schema/types/ResourceType.js +50 -23
- package/dist/schema/types/ResourceType.js.map +1 -1
- package/dist/schema/types/TaskLikeCommon.js +2 -2
- package/dist/schema/types/TaskLikeCommon.js.map +1 -1
- package/dist/schema/types/TaskType.js +6 -19
- package/dist/schema/types/TaskType.js.map +1 -1
- package/dist/schema/types/middleware/UsageTypes.d.ts +1 -0
- package/dist/schema/types/middleware/UsageTypes.js +16 -5
- package/dist/schema/types/middleware/UsageTypes.js.map +1 -1
- package/dist/schema/types/middleware/common.js +2 -2
- package/dist/schema/types/middleware/common.js.map +1 -1
- package/dist/ui/.vite/manifest.json +2 -2
- package/dist/ui/assets/docs-Beb_xRuE.js +304 -0
- package/dist/ui/assets/docs-Beb_xRuE.js.map +1 -0
- package/dist/ui/assets/docs-lid1amCk.css +1 -0
- package/dist/ui/docs/favicon.ico +0 -0
- package/dist/utils/lane-resources.d.ts +69 -0
- package/dist/utils/lane-resources.js +154 -1
- package/dist/utils/lane-resources.js.map +1 -1
- package/dist/utils/runner-namespace.d.ts +1 -0
- package/dist/utils/runner-namespace.js +9 -0
- package/dist/utils/runner-namespace.js.map +1 -0
- package/dist/utils/schemaFormat.d.ts +6 -0
- package/dist/utils/schemaFormat.js +244 -0
- package/dist/utils/schemaFormat.js.map +1 -0
- package/dist/utils/system-namespace.d.ts +1 -0
- package/dist/utils/system-namespace.js +9 -0
- package/dist/utils/system-namespace.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +29 -11
- package/readmes/API_REFERENCE.md +364 -0
- package/readmes/COMPACT_GUIDE.md +254 -0
- package/skills/core/SKILL.md +27 -0
- package/skills/core/references/readmes/API_REFERENCE.md +364 -0
- package/skills/core/references/readmes/COMPACT_GUIDE.md +254 -0
- package/AI.md +0 -622
- package/dist/app/tasks/create-user.task.d.ts +0 -5
- package/dist/app/tasks/create-user.task.js +0 -20
- package/dist/app/tasks/create-user.task.js.map +0 -1
- package/dist/app/tasks/index.d.ts +0 -1
- package/dist/app/tasks/index.js +0 -18
- package/dist/app/tasks/index.js.map +0 -1
- package/dist/architect/core/errors.d.ts +0 -39
- package/dist/architect/core/errors.js +0 -143
- package/dist/architect/core/errors.js.map +0 -1
- package/dist/architect/core/index.d.ts +0 -3
- package/dist/architect/core/index.js +0 -21
- package/dist/architect/core/index.js.map +0 -1
- package/dist/architect/core/interfaces.d.ts +0 -158
- package/dist/architect/core/interfaces.js.map +0 -1
- package/dist/architect/core/types.d.ts +0 -544
- package/dist/architect/core/types.js +0 -49
- package/dist/architect/core/types.js.map +0 -1
- package/dist/architect/execution/executor.d.ts +0 -23
- package/dist/architect/execution/executor.js +0 -476
- package/dist/architect/execution/executor.js.map +0 -1
- package/dist/architect/execution/index.d.ts +0 -1
- package/dist/architect/execution/index.js +0 -19
- package/dist/architect/execution/index.js.map +0 -1
- package/dist/architect/executor.d.ts +0 -7
- package/dist/architect/executor.js +0 -150
- package/dist/architect/executor.js.map +0 -1
- package/dist/architect/index.d.ts +0 -45
- package/dist/architect/index.js +0 -76
- package/dist/architect/index.js.map +0 -1
- package/dist/architect/llmClient.d.ts +0 -10
- package/dist/architect/llmClient.js +0 -33
- package/dist/architect/llmClient.js.map +0 -1
- package/dist/architect/models/base.d.ts +0 -16
- package/dist/architect/models/base.js +0 -68
- package/dist/architect/models/base.js.map +0 -1
- package/dist/architect/models/factory.d.ts +0 -16
- package/dist/architect/models/factory.js +0 -73
- package/dist/architect/models/factory.js.map +0 -1
- package/dist/architect/models/index.d.ts +0 -3
- package/dist/architect/models/index.js +0 -21
- package/dist/architect/models/index.js.map +0 -1
- package/dist/architect/models/openai.d.ts +0 -7
- package/dist/architect/models/openai.js +0 -71
- package/dist/architect/models/openai.js.map +0 -1
- package/dist/architect/planner.d.ts +0 -9
- package/dist/architect/planner.js +0 -42
- package/dist/architect/planner.js.map +0 -1
- package/dist/architect/planning/index.d.ts +0 -4
- package/dist/architect/planning/index.js +0 -22
- package/dist/architect/planning/index.js.map +0 -1
- package/dist/architect/planning/optimizer.d.ts +0 -14
- package/dist/architect/planning/optimizer.js +0 -275
- package/dist/architect/planning/optimizer.js.map +0 -1
- package/dist/architect/planning/planner.d.ts +0 -15
- package/dist/architect/planning/planner.js +0 -124
- package/dist/architect/planning/planner.js.map +0 -1
- package/dist/architect/planning/prompts.d.ts +0 -6
- package/dist/architect/planning/prompts.js +0 -111
- package/dist/architect/planning/prompts.js.map +0 -1
- package/dist/architect/planning/validator.d.ts +0 -16
- package/dist/architect/planning/validator.js +0 -331
- package/dist/architect/planning/validator.js.map +0 -1
- package/dist/architect/prompt.d.ts +0 -1
- package/dist/architect/prompt.js +0 -13
- package/dist/architect/prompt.js.map +0 -1
- package/dist/architect/types.d.ts +0 -4
- package/dist/architect/types.js +0 -24
- package/dist/architect/types.js.map +0 -1
- package/dist/cli/generators/scaffold/templates/jest.config.cjs.d.ts +0 -1
- package/dist/cli/generators/scaffold/templates/jest.config.cjs.js +0 -24
- package/dist/cli/generators/scaffold/templates/jest.config.cjs.js.map +0 -1
- package/dist/cli/generators/scaffold/templates/tsconfig.jest.json.d.ts +0 -11
- package/dist/cli/generators/scaffold/templates/tsconfig.jest.json.js +0 -17
- package/dist/cli/generators/scaffold/templates/tsconfig.jest.json.js.map +0 -1
- package/dist/client/documentation.d.ts +0 -8
- package/dist/client/documentation.js +0 -144
- package/dist/client/documentation.js.map +0 -1
- package/dist/components/Documentation/Documentation.d.ts +0 -8
- package/dist/components/Documentation/Documentation.js +0 -283
- package/dist/components/Documentation/Documentation.js.map +0 -1
- package/dist/components/Documentation/components/DiagnosticsPanel.d.ts +0 -7
- package/dist/components/Documentation/components/DiagnosticsPanel.js +0 -189
- package/dist/components/Documentation/components/DiagnosticsPanel.js.map +0 -1
- package/dist/components/Documentation/components/EventCard.d.ts +0 -8
- package/dist/components/Documentation/components/EventCard.js +0 -290
- package/dist/components/Documentation/components/EventCard.js.map +0 -1
- package/dist/components/Documentation/components/HookCard.d.ts +0 -8
- package/dist/components/Documentation/components/HookCard.js +0 -282
- package/dist/components/Documentation/components/HookCard.js.map +0 -1
- package/dist/components/Documentation/components/MiddlewareCard.d.ts +0 -8
- package/dist/components/Documentation/components/MiddlewareCard.js +0 -314
- package/dist/components/Documentation/components/MiddlewareCard.js.map +0 -1
- package/dist/components/Documentation/components/ResourceCard.d.ts +0 -8
- package/dist/components/Documentation/components/ResourceCard.js +0 -228
- package/dist/components/Documentation/components/ResourceCard.js.map +0 -1
- package/dist/components/Documentation/components/Sidebar.d.ts +0 -13
- package/dist/components/Documentation/components/Sidebar.js +0 -165
- package/dist/components/Documentation/components/Sidebar.js.map +0 -1
- package/dist/components/Documentation/components/TagCard.d.ts +0 -7
- package/dist/components/Documentation/components/TagCard.js +0 -75
- package/dist/components/Documentation/components/TagCard.js.map +0 -1
- package/dist/components/Documentation/components/TaskCard.d.ts +0 -8
- package/dist/components/Documentation/components/TaskCard.js +0 -196
- package/dist/components/Documentation/components/TaskCard.js.map +0 -1
- package/dist/components/Documentation/index.d.ts +0 -2
- package/dist/components/Documentation/index.js +0 -6
- package/dist/components/Documentation/index.js.map +0 -1
- package/dist/components/Documentation/utils/formatting.d.ts +0 -8
- package/dist/components/Documentation/utils/formatting.js +0 -84
- package/dist/components/Documentation/utils/formatting.js.map +0 -1
- package/dist/components/ExampleComponent.d.ts +0 -10
- package/dist/components/ExampleComponent.js +0 -89
- package/dist/components/ExampleComponent.js.map +0 -1
- package/dist/mcp/z3.d.ts +0 -1
- package/dist/mcp/z3.js +0 -9
- package/dist/mcp/z3.js.map +0 -1
- package/dist/project-writer/AIModel.d.ts +0 -29
- package/dist/project-writer/AIModel.js +0 -48
- package/dist/project-writer/AIModel.js.map +0 -1
- package/dist/resources/docs.route.d.ts +0 -23
- package/dist/resources/docs.route.js +0 -73
- package/dist/resources/docs.route.js.map +0 -1
- package/dist/resources/durable.workflow.tag.d.ts +0 -2
- package/dist/resources/durable.workflow.tag.js +0 -28
- package/dist/resources/durable.workflow.tag.js.map +0 -1
- package/dist/resources/getFileContents.task.d.ts +0 -17
- package/dist/resources/getFileContents.task.js +0 -44
- package/dist/resources/getFileContents.task.js.map +0 -1
- package/dist/resources/introspector.tools.d.ts +0 -47
- package/dist/resources/introspector.tools.js +0 -505
- package/dist/resources/introspector.tools.js.map +0 -1
- package/dist/resources/models/extractTunnelInfo.d.ts +0 -8
- package/dist/resources/models/extractTunnelInfo.js +0 -85
- package/dist/resources/models/extractTunnelInfo.js.map +0 -1
- package/dist/resources/models/tunnel.tools.d.ts +0 -3
- package/dist/resources/models/tunnel.tools.js +0 -35
- package/dist/resources/models/tunnel.tools.js.map +0 -1
- package/dist/runner-compat.d.ts +0 -85
- package/dist/runner-compat.js +0 -178
- package/dist/runner-compat.js.map +0 -1
- package/dist/runner-node-compat.d.ts +0 -2
- package/dist/runner-node-compat.js +0 -28
- package/dist/runner-node-compat.js.map +0 -1
- package/dist/schema/types/TunnelInfoType.d.ts +0 -5
- package/dist/schema/types/TunnelInfoType.js +0 -86
- package/dist/schema/types/TunnelInfoType.js.map +0 -1
- package/dist/tasks/create-user.d.ts +0 -5
- package/dist/tasks/create-user.js +0 -20
- package/dist/tasks/create-user.js.map +0 -1
- package/dist/tasks/index.d.ts +0 -1
- package/dist/tasks/index.js +0 -18
- package/dist/tasks/index.js.map +0 -1
- package/dist/ui/assets/docs-CHvYnckk.js +0 -302
- package/dist/ui/assets/docs-CHvYnckk.js.map +0 -1
- package/dist/ui/assets/docs-CipvKUxZ.css +0 -1
- package/dist/ui-test/index.html +0 -1
- package/readmes/runner-AI.md +0 -740
- package/readmes/runner-durable-workflows.md +0 -2247
- package/readmes/runner-full-guide.md +0 -5869
- package/readmes/runner-remote-lanes.md +0 -909
|
@@ -25,7 +25,7 @@ exports.extractTaskIdsFromDependencies = extractTaskIdsFromDependencies;
|
|
|
25
25
|
exports.extractErrorIdsFromDependencies = extractErrorIdsFromDependencies;
|
|
26
26
|
const runner_1 = require("@bluelibs/runner");
|
|
27
27
|
const lane_resources_1 = require("../../utils/lane-resources");
|
|
28
|
-
const
|
|
28
|
+
const schemaFormat_1 = require("../../utils/schemaFormat");
|
|
29
29
|
const path_1 = require("../../utils/path");
|
|
30
30
|
const introspector_tools_1 = require("./introspector.tools");
|
|
31
31
|
function normalizeTags(tags) {
|
|
@@ -66,22 +66,169 @@ function findById(collection, id) {
|
|
|
66
66
|
Object.values(collection).find((x) => (0, introspector_tools_1.readId)(x) === id));
|
|
67
67
|
return undefined;
|
|
68
68
|
}
|
|
69
|
+
const taskMiddlewareScopeMarker = ".middleware.task.";
|
|
70
|
+
const resourceMiddlewareScopeMarker = ".middleware.resource.";
|
|
71
|
+
function getMiddlewareDuplicateKey(id) {
|
|
72
|
+
const taskScopeIndex = id.lastIndexOf(taskMiddlewareScopeMarker);
|
|
73
|
+
if (taskScopeIndex >= 0) {
|
|
74
|
+
return id.slice(taskScopeIndex + taskMiddlewareScopeMarker.length);
|
|
75
|
+
}
|
|
76
|
+
const resourceScopeIndex = id.lastIndexOf(resourceMiddlewareScopeMarker);
|
|
77
|
+
if (resourceScopeIndex >= 0) {
|
|
78
|
+
return id.slice(resourceScopeIndex + resourceMiddlewareScopeMarker.length);
|
|
79
|
+
}
|
|
80
|
+
return id;
|
|
81
|
+
}
|
|
82
|
+
function getTaskOwnerResourceChain(store, taskId) {
|
|
83
|
+
const chain = [];
|
|
84
|
+
const visited = new Set();
|
|
85
|
+
let currentOwnerId = store.getOwnerResourceId(taskId);
|
|
86
|
+
while (currentOwnerId && !visited.has(currentOwnerId)) {
|
|
87
|
+
visited.add(currentOwnerId);
|
|
88
|
+
chain.push(currentOwnerId);
|
|
89
|
+
currentOwnerId = store.getOwnerResourceId(currentOwnerId);
|
|
90
|
+
}
|
|
91
|
+
return chain;
|
|
92
|
+
}
|
|
93
|
+
function normalizeIdentityRequirementSummary(value) {
|
|
94
|
+
if (!value || typeof value !== "object")
|
|
95
|
+
return null;
|
|
96
|
+
const config = value;
|
|
97
|
+
return {
|
|
98
|
+
tenant: config.tenant ?? true,
|
|
99
|
+
user: config.user === true,
|
|
100
|
+
roles: Array.isArray(config.roles)
|
|
101
|
+
? config.roles.map((role) => String(role))
|
|
102
|
+
: [],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function normalizeIdentityRequirementSummaries(value) {
|
|
106
|
+
const entries = Array.isArray(value)
|
|
107
|
+
? value
|
|
108
|
+
: value && typeof value === "object"
|
|
109
|
+
? [value]
|
|
110
|
+
: [];
|
|
111
|
+
return entries
|
|
112
|
+
.map((entry) => normalizeIdentityRequirementSummary(entry))
|
|
113
|
+
.filter((entry) => Boolean(entry));
|
|
114
|
+
}
|
|
115
|
+
function normalizeIdentityScopeSummary(value) {
|
|
116
|
+
if (!value || typeof value !== "object")
|
|
117
|
+
return null;
|
|
118
|
+
const config = value;
|
|
119
|
+
return {
|
|
120
|
+
tenant: config.tenant ?? true,
|
|
121
|
+
user: config.user === true,
|
|
122
|
+
required: config.required ?? true,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function getSubtreePolicies(resource) {
|
|
126
|
+
const rawSubtree = resource?.subtree;
|
|
127
|
+
if (!rawSubtree || typeof rawSubtree !== "object")
|
|
128
|
+
return [];
|
|
129
|
+
return Array.isArray(rawSubtree)
|
|
130
|
+
? rawSubtree.filter((policy) => Boolean(policy) && typeof policy === "object")
|
|
131
|
+
: [rawSubtree];
|
|
132
|
+
}
|
|
133
|
+
function readSubtreeMiddlewareEntryId(entry) {
|
|
134
|
+
if (typeof entry === "string")
|
|
135
|
+
return entry;
|
|
136
|
+
if (!entry || typeof entry !== "object")
|
|
137
|
+
return null;
|
|
138
|
+
if ("use" in entry) {
|
|
139
|
+
return readSubtreeMiddlewareEntryId(entry.use ?? null);
|
|
140
|
+
}
|
|
141
|
+
const id = (0, introspector_tools_1.readId)(entry);
|
|
142
|
+
return id ? id : null;
|
|
143
|
+
}
|
|
144
|
+
function resolveTaskSubtreeMiddlewareEntry(entry, task) {
|
|
145
|
+
if (typeof entry === "string") {
|
|
146
|
+
return entry;
|
|
147
|
+
}
|
|
148
|
+
if (!entry || typeof entry !== "object") {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
if ("use" in entry) {
|
|
152
|
+
const conditionalEntry = entry;
|
|
153
|
+
if (typeof conditionalEntry.when === "function") {
|
|
154
|
+
try {
|
|
155
|
+
if (!conditionalEntry.when(task)) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return readSubtreeMiddlewareEntryId(conditionalEntry.use ?? null);
|
|
164
|
+
}
|
|
165
|
+
return readSubtreeMiddlewareEntryId(entry);
|
|
166
|
+
}
|
|
167
|
+
function collectSubtreeTaskMiddlewareOwnerIds(store, task) {
|
|
168
|
+
const ownerIds = new Map();
|
|
169
|
+
const chainRootToNearest = [
|
|
170
|
+
...getTaskOwnerResourceChain(store, task.id),
|
|
171
|
+
].reverse();
|
|
172
|
+
for (const ownerResourceId of chainRootToNearest) {
|
|
173
|
+
const ownerResource = store.resources.get(ownerResourceId)?.resource;
|
|
174
|
+
if (!ownerResource)
|
|
175
|
+
continue;
|
|
176
|
+
for (const policy of getSubtreePolicies(ownerResource)) {
|
|
177
|
+
const taskMiddlewares = Array.isArray(policy.tasks?.middleware)
|
|
178
|
+
? policy.tasks.middleware
|
|
179
|
+
: [];
|
|
180
|
+
for (const entry of taskMiddlewares) {
|
|
181
|
+
const middlewareId = resolveTaskSubtreeMiddlewareEntry(entry, task);
|
|
182
|
+
if (!middlewareId)
|
|
183
|
+
continue;
|
|
184
|
+
const duplicateKey = getMiddlewareDuplicateKey(middlewareId);
|
|
185
|
+
if (!ownerIds.has(duplicateKey)) {
|
|
186
|
+
ownerIds.set(duplicateKey, ownerResourceId);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return ownerIds;
|
|
192
|
+
}
|
|
193
|
+
function hasMiddlewareConfig(middleware) {
|
|
194
|
+
return (Boolean(middleware?.[runner_1.definitions.symbolMiddlewareConfigured]) ||
|
|
195
|
+
middleware?.config !== undefined);
|
|
196
|
+
}
|
|
197
|
+
function buildEffectiveTaskMiddlewareUsages(store, task) {
|
|
198
|
+
const resolver = store.getMiddlewareManager()?.middlewareResolver;
|
|
199
|
+
const effectiveMiddlewares = resolver
|
|
200
|
+
? resolver.getApplicableTaskMiddlewares(task)
|
|
201
|
+
: task.middleware;
|
|
202
|
+
const subtreeOwnersByKey = collectSubtreeTaskMiddlewareOwnerIds(store, task);
|
|
203
|
+
return effectiveMiddlewares.map((middleware) => {
|
|
204
|
+
const duplicateKey = getMiddlewareDuplicateKey(String(middleware.id));
|
|
205
|
+
const subtreeOwnerId = subtreeOwnersByKey.get(duplicateKey) ?? null;
|
|
206
|
+
return {
|
|
207
|
+
id: String(middleware.id),
|
|
208
|
+
config: hasMiddlewareConfig(middleware)
|
|
209
|
+
? (0, introspector_tools_1.stringifyIfObject)(middleware.config)
|
|
210
|
+
: null,
|
|
211
|
+
origin: subtreeOwnerId ? "subtree" : "local",
|
|
212
|
+
subtreeOwnerId,
|
|
213
|
+
};
|
|
214
|
+
});
|
|
215
|
+
}
|
|
69
216
|
// Mapping helpers
|
|
70
|
-
function mapStoreTaskToTaskModel(task, taskStoreElement) {
|
|
217
|
+
function mapStoreTaskToTaskModel(task, store, taskStoreElement) {
|
|
71
218
|
const depsObj = normalizeDependencies(task?.dependencies);
|
|
72
219
|
const eventIdsFromDeps = extractEventIdsFromDependencies(depsObj);
|
|
73
220
|
const resourceIdsFromDeps = extractResourceIdsFromDependencies(depsObj);
|
|
74
221
|
const taskIdsFromDeps = extractTaskIdsFromDependencies(depsObj);
|
|
75
222
|
const errorIdsFromDeps = extractErrorIdsFromDependencies(depsObj);
|
|
76
223
|
const tagIdsFromDeps = extractTagIdsFromDependencies(depsObj);
|
|
77
|
-
const middlewareDetailed =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
m
|
|
82
|
-
|
|
83
|
-
: null,
|
|
84
|
-
|
|
224
|
+
const middlewareDetailed = store
|
|
225
|
+
? buildEffectiveTaskMiddlewareUsages(store, task)
|
|
226
|
+
: (task.middleware || []).map((m) => ({
|
|
227
|
+
id: String(m.id),
|
|
228
|
+
config: hasMiddlewareConfig(m) ? (0, introspector_tools_1.stringifyIfObject)(m.config) : null,
|
|
229
|
+
origin: "local",
|
|
230
|
+
subtreeOwnerId: null,
|
|
231
|
+
}));
|
|
85
232
|
const { ids: tagIds, detailed: tagsDetailed } = normalizeTags(task?.tags);
|
|
86
233
|
const interceptorOwnerIds = Array.from(new Set(taskStoreElement?.interceptors
|
|
87
234
|
?.map((record) => record.ownerResourceId)
|
|
@@ -101,7 +248,7 @@ function mapStoreTaskToTaskModel(task, taskStoreElement) {
|
|
|
101
248
|
...errorIdsFromDeps,
|
|
102
249
|
...tagIdsFromDeps,
|
|
103
250
|
],
|
|
104
|
-
middleware:
|
|
251
|
+
middleware: middlewareDetailed.map((m) => m.id),
|
|
105
252
|
middlewareDetailed,
|
|
106
253
|
registeredBy: null,
|
|
107
254
|
kind: "TASK",
|
|
@@ -109,8 +256,8 @@ function mapStoreTaskToTaskModel(task, taskStoreElement) {
|
|
|
109
256
|
visibilityReason: null,
|
|
110
257
|
// Emits any events present in its dependencies
|
|
111
258
|
emits: eventIdsFromDeps,
|
|
112
|
-
inputSchema: (0,
|
|
113
|
-
resultSchema: (0,
|
|
259
|
+
inputSchema: (0, schemaFormat_1.formatSchemaIfZod)(task.inputSchema),
|
|
260
|
+
resultSchema: (0, schemaFormat_1.formatSchemaIfZod)(task.resultSchema),
|
|
114
261
|
rpcLane: extractRpcLaneSummary(tagsDetailed),
|
|
115
262
|
interceptorCount: taskStoreElement?.interceptors?.length ?? 0,
|
|
116
263
|
hasInterceptors: (taskStoreElement?.interceptors?.length ?? 0) > 0,
|
|
@@ -120,7 +267,7 @@ function mapStoreTaskToTaskModel(task, taskStoreElement) {
|
|
|
120
267
|
function mapStoreTaskToHookModel(_task) {
|
|
121
268
|
throw new Error("deprecated");
|
|
122
269
|
}
|
|
123
|
-
function mapStoreHookToHookModel(hkStoreElement) {
|
|
270
|
+
function mapStoreHookToHookModel(hkStoreElement, store) {
|
|
124
271
|
const hk = hkStoreElement.hook;
|
|
125
272
|
const depsObj = normalizeDependencies(hk?.dependencies);
|
|
126
273
|
const eventIdsFromDeps = extractEventIdsFromDependencies(depsObj);
|
|
@@ -129,9 +276,7 @@ function mapStoreHookToHookModel(hkStoreElement) {
|
|
|
129
276
|
const errorIdsFromDeps = extractErrorIdsFromDependencies(depsObj);
|
|
130
277
|
const tagIdsFromDeps = extractTagIdsFromDependencies(depsObj);
|
|
131
278
|
const { ids: tagIds, detailed: tagsDetailed } = normalizeTags(hk.tags);
|
|
132
|
-
const eventIds =
|
|
133
|
-
? hk.on.map((e) => String(e.id))
|
|
134
|
-
: [String(hk.on?.id ?? "*")];
|
|
279
|
+
const eventIds = resolveHookEventIds(hk, store);
|
|
135
280
|
return (0, introspector_tools_1.stampElementKind)({
|
|
136
281
|
id: String(hk?.id),
|
|
137
282
|
meta: buildMetaWithNormalizedTags(hk?.meta, hk),
|
|
@@ -160,10 +305,17 @@ function mapStoreHookToHookModel(hkStoreElement) {
|
|
|
160
305
|
}, "HOOK");
|
|
161
306
|
}
|
|
162
307
|
function mapStoreResourceToResourceModel(resource, resourceConfig) {
|
|
163
|
-
|
|
164
|
-
const register =
|
|
165
|
-
? resource.register
|
|
166
|
-
: resource.register
|
|
308
|
+
const introspectorMode = "dev";
|
|
309
|
+
const register = Array.isArray(resource.register)
|
|
310
|
+
? resource.register
|
|
311
|
+
: typeof resource.register === "function"
|
|
312
|
+
? resource.register(resourceConfig, introspectorMode)
|
|
313
|
+
: [];
|
|
314
|
+
const overrides = Array.isArray(resource.overrides)
|
|
315
|
+
? resource.overrides
|
|
316
|
+
: typeof resource.overrides === "function"
|
|
317
|
+
? resource.overrides(resourceConfig, introspectorMode)
|
|
318
|
+
: [];
|
|
167
319
|
const depsObj = normalizeDependencies(resource?.dependencies);
|
|
168
320
|
const eventIdsFromDeps = extractEventIdsFromDependencies(depsObj);
|
|
169
321
|
const resourceIdsFromDeps = extractResourceIdsFromDependencies(depsObj);
|
|
@@ -204,9 +356,7 @@ function mapStoreResourceToResourceModel(resource, resourceConfig) {
|
|
|
204
356
|
config,
|
|
205
357
|
middleware: resource.middleware.map((m) => m.id.toString()),
|
|
206
358
|
middlewareDetailed,
|
|
207
|
-
overrides:
|
|
208
|
-
.filter((o) => !!o)
|
|
209
|
-
.map((o) => o.id.toString()),
|
|
359
|
+
overrides: overrides.flatMap((override) => override ? [override.id.toString()] : []),
|
|
210
360
|
registers: register.map((r) => r.id.toString()),
|
|
211
361
|
isolation,
|
|
212
362
|
subtree,
|
|
@@ -215,7 +365,7 @@ function mapStoreResourceToResourceModel(resource, resourceConfig) {
|
|
|
215
365
|
hasHealthCheck,
|
|
216
366
|
context: (0, introspector_tools_1.stringifyIfObject)(resource.context),
|
|
217
367
|
registeredBy: null,
|
|
218
|
-
configSchema: (0,
|
|
368
|
+
configSchema: (0, schemaFormat_1.formatSchemaIfZod)(resource.configSchema),
|
|
219
369
|
isPrivate: false,
|
|
220
370
|
visibilityReason: null,
|
|
221
371
|
}, "RESOURCE");
|
|
@@ -233,25 +383,22 @@ function normalizeResourceConfig(config) {
|
|
|
233
383
|
function buildEvents(store) {
|
|
234
384
|
const eventsCollection = Array.from(store.events.values()).map((e) => e.event);
|
|
235
385
|
const allEventIds = eventsCollection.map((e) => e.id.toString());
|
|
236
|
-
const
|
|
386
|
+
const hookEntries = Array.from(store.hooks.values());
|
|
387
|
+
const hookTargetEventIdsByHookId = new Map();
|
|
388
|
+
const eventLaneByEventId = buildEventLaneSummaryByEventId(store);
|
|
389
|
+
for (const hookEntry of hookEntries) {
|
|
390
|
+
hookTargetEventIdsByHookId.set(hookEntry.hook.id, resolveHookEventIds(hookEntry.hook, store));
|
|
391
|
+
}
|
|
237
392
|
return allEventIds.map((eventId) => {
|
|
238
393
|
const e = findById(eventsCollection, eventId);
|
|
239
394
|
const { ids: tagIds, detailed: tagsDetailed } = normalizeTags(e.tags);
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
.
|
|
243
|
-
const on = h?.on;
|
|
244
|
-
if (on === "*")
|
|
395
|
+
const hooksListeningToEvent = hookEntries
|
|
396
|
+
.filter(({ hook }) => {
|
|
397
|
+
if (hook.on === "*")
|
|
245
398
|
return true;
|
|
246
|
-
|
|
247
|
-
return on === eventId;
|
|
248
|
-
if (on && typeof on === "object" && !Array.isArray(on))
|
|
249
|
-
return String(on.id) === eventId;
|
|
250
|
-
if (Array.isArray(on))
|
|
251
|
-
return on.some((v) => typeof v === "string" ? v === eventId : String(v?.id) === eventId);
|
|
252
|
-
return false;
|
|
399
|
+
return (hookTargetEventIdsByHookId.get(hook.id)?.includes(eventId) ?? false);
|
|
253
400
|
})
|
|
254
|
-
.map((
|
|
401
|
+
.map(({ hook }) => hook.id);
|
|
255
402
|
return (0, introspector_tools_1.stampElementKind)({
|
|
256
403
|
id: eventId,
|
|
257
404
|
meta: buildMetaWithNormalizedTags(e?.meta ?? null, e),
|
|
@@ -259,18 +406,179 @@ function buildEvents(store) {
|
|
|
259
406
|
tagsDetailed,
|
|
260
407
|
transactional: Boolean(e?.transactional),
|
|
261
408
|
parallel: Boolean(e?.parallel),
|
|
262
|
-
eventLane:
|
|
409
|
+
eventLane: eventLaneByEventId.get(eventId) ?? null,
|
|
263
410
|
rpcLane: extractRpcLaneSummary(tagsDetailed),
|
|
264
411
|
filePath: (0, path_1.sanitizePath)((e && e[runner_1.definitions.symbolFilePath]) ?? e?.filePath ?? null),
|
|
265
412
|
listenedToBy: hooksListeningToEvent,
|
|
266
413
|
registeredBy: null,
|
|
267
|
-
payloadSchema: (0,
|
|
414
|
+
payloadSchema: (0, schemaFormat_1.formatSchemaIfZod)(e.payloadSchema),
|
|
268
415
|
isPrivate: false,
|
|
269
416
|
visibilityReason: null,
|
|
270
417
|
}, "EVENT");
|
|
271
418
|
});
|
|
272
419
|
}
|
|
420
|
+
function resolveHookEventIds(hook, store) {
|
|
421
|
+
if (hook.on === "*") {
|
|
422
|
+
return ["*"];
|
|
423
|
+
}
|
|
424
|
+
if (store && hook.on) {
|
|
425
|
+
return store.resolveHookTargets(hook).map((entry) => entry.event.id);
|
|
426
|
+
}
|
|
427
|
+
if (Array.isArray(hook.on)) {
|
|
428
|
+
return hook.on.map((entry) => typeof entry === "string" ? entry : String(entry?.id));
|
|
429
|
+
}
|
|
430
|
+
return [String(hook.on?.id ?? "*")];
|
|
431
|
+
}
|
|
432
|
+
function buildEventLaneSummaryByEventId(store) {
|
|
433
|
+
const laneByEventId = new Map();
|
|
434
|
+
const buildLaneApplyTargetKey = (target) => {
|
|
435
|
+
if (typeof target === "string") {
|
|
436
|
+
return `id:${target}`;
|
|
437
|
+
}
|
|
438
|
+
const targetId = (0, lane_resources_1.extractLaneId)(target);
|
|
439
|
+
if (targetId) {
|
|
440
|
+
return `id:${targetId}`;
|
|
441
|
+
}
|
|
442
|
+
const serializedTarget = (0, introspector_tools_1.stringifyIfObject)(target);
|
|
443
|
+
if (serializedTarget) {
|
|
444
|
+
return `json:${serializedTarget}`;
|
|
445
|
+
}
|
|
446
|
+
return `raw:${String(target)}`;
|
|
447
|
+
};
|
|
448
|
+
const mergeLaneApplyTo = (existingApplyTo, incomingApplyTo) => {
|
|
449
|
+
if (incomingApplyTo === undefined) {
|
|
450
|
+
return existingApplyTo;
|
|
451
|
+
}
|
|
452
|
+
if (existingApplyTo === undefined) {
|
|
453
|
+
return incomingApplyTo;
|
|
454
|
+
}
|
|
455
|
+
if (Array.isArray(existingApplyTo) && Array.isArray(incomingApplyTo)) {
|
|
456
|
+
const mergedTargets = new Map();
|
|
457
|
+
for (const target of [...existingApplyTo, ...incomingApplyTo]) {
|
|
458
|
+
mergedTargets.set(buildLaneApplyTargetKey(target), target);
|
|
459
|
+
}
|
|
460
|
+
return Array.from(mergedTargets.values());
|
|
461
|
+
}
|
|
462
|
+
return incomingApplyTo;
|
|
463
|
+
};
|
|
464
|
+
const mergeTopologyLaneEntry = (existingEntry, incomingEntry) => {
|
|
465
|
+
if (!existingEntry) {
|
|
466
|
+
return incomingEntry;
|
|
467
|
+
}
|
|
468
|
+
return {
|
|
469
|
+
id: incomingEntry.id,
|
|
470
|
+
applyTo: mergeLaneApplyTo(existingEntry.applyTo, incomingEntry.applyTo),
|
|
471
|
+
orderingKey: incomingEntry.orderingKey ?? existingEntry.orderingKey,
|
|
472
|
+
metadata: incomingEntry.metadata ?? existingEntry.metadata,
|
|
473
|
+
};
|
|
474
|
+
};
|
|
475
|
+
const upsertTopologyLaneEntry = (entry) => {
|
|
476
|
+
topologyLanesById.set(entry.id, mergeTopologyLaneEntry(topologyLanesById.get(entry.id), entry));
|
|
477
|
+
};
|
|
478
|
+
const topologyLanesById = new Map();
|
|
479
|
+
for (const resourceEntry of store.resources.values()) {
|
|
480
|
+
const resource = resourceEntry.resource;
|
|
481
|
+
const normalizedTags = normalizeTags(resource?.tags).ids;
|
|
482
|
+
if (!(0, lane_resources_1.isEventLanesResource)({
|
|
483
|
+
id: String(resource.id),
|
|
484
|
+
tags: normalizedTags,
|
|
485
|
+
})) {
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
const topology = resourceEntry
|
|
489
|
+
.config?.topology;
|
|
490
|
+
if (Array.isArray(topology?.bindings)) {
|
|
491
|
+
for (const binding of topology.bindings) {
|
|
492
|
+
const laneId = (0, lane_resources_1.extractLaneId)(binding?.lane);
|
|
493
|
+
if (!laneId || !binding?.lane)
|
|
494
|
+
continue;
|
|
495
|
+
upsertTopologyLaneEntry({
|
|
496
|
+
id: laneId,
|
|
497
|
+
applyTo: normalizeEventLaneApplyTo(binding.lane.applyTo),
|
|
498
|
+
orderingKey: typeof binding.lane.orderingKey === "string"
|
|
499
|
+
? binding.lane.orderingKey
|
|
500
|
+
: null,
|
|
501
|
+
metadata: (0, introspector_tools_1.stringifyIfObject)(binding.lane.metadata),
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
if (topology?.profiles && typeof topology.profiles === "object") {
|
|
506
|
+
for (const profile of Object.values(topology.profiles)) {
|
|
507
|
+
if (!Array.isArray(profile?.consume))
|
|
508
|
+
continue;
|
|
509
|
+
for (const entry of profile.consume) {
|
|
510
|
+
const laneId = (0, lane_resources_1.extractLaneId)(entry?.lane);
|
|
511
|
+
if (!laneId || !entry?.lane)
|
|
512
|
+
continue;
|
|
513
|
+
upsertTopologyLaneEntry({
|
|
514
|
+
id: laneId,
|
|
515
|
+
applyTo: normalizeEventLaneApplyTo(entry.lane.applyTo),
|
|
516
|
+
orderingKey: typeof entry.lane.orderingKey === "string"
|
|
517
|
+
? entry.lane.orderingKey
|
|
518
|
+
: null,
|
|
519
|
+
metadata: (0, introspector_tools_1.stringifyIfObject)(entry.lane.metadata),
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
const registeredEvents = Array.from(store.events.values()).map((eventEntry) => eventEntry.event);
|
|
526
|
+
for (const lane of topologyLanesById.values()) {
|
|
527
|
+
if (typeof lane.applyTo === "function") {
|
|
528
|
+
for (const event of registeredEvents) {
|
|
529
|
+
if (laneByEventId.has(event.id))
|
|
530
|
+
continue;
|
|
531
|
+
let matchesEvent = false;
|
|
532
|
+
try {
|
|
533
|
+
matchesEvent = lane.applyTo(event);
|
|
534
|
+
}
|
|
535
|
+
catch {
|
|
536
|
+
matchesEvent = false;
|
|
537
|
+
}
|
|
538
|
+
if (!matchesEvent)
|
|
539
|
+
continue;
|
|
540
|
+
laneByEventId.set(event.id, {
|
|
541
|
+
laneId: lane.id,
|
|
542
|
+
orderingKey: lane.orderingKey,
|
|
543
|
+
metadata: lane.metadata,
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
continue;
|
|
547
|
+
}
|
|
548
|
+
if (!Array.isArray(lane.applyTo)) {
|
|
549
|
+
continue;
|
|
550
|
+
}
|
|
551
|
+
for (const target of lane.applyTo) {
|
|
552
|
+
const targetId = typeof target === "string"
|
|
553
|
+
? target
|
|
554
|
+
: store.findIdByDefinition(target) ?? (0, lane_resources_1.extractLaneId)(target);
|
|
555
|
+
if (!targetId)
|
|
556
|
+
continue;
|
|
557
|
+
const event = store.events.get(targetId)?.event;
|
|
558
|
+
if (!event || laneByEventId.has(event.id))
|
|
559
|
+
continue;
|
|
560
|
+
laneByEventId.set(event.id, {
|
|
561
|
+
laneId: lane.id,
|
|
562
|
+
orderingKey: lane.orderingKey,
|
|
563
|
+
metadata: lane.metadata,
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
return laneByEventId;
|
|
568
|
+
}
|
|
569
|
+
function normalizeEventLaneApplyTo(applyTo) {
|
|
570
|
+
if (Array.isArray(applyTo)) {
|
|
571
|
+
return applyTo;
|
|
572
|
+
}
|
|
573
|
+
if (typeof applyTo === "function") {
|
|
574
|
+
return applyTo;
|
|
575
|
+
}
|
|
576
|
+
return undefined;
|
|
577
|
+
}
|
|
273
578
|
function buildMiddlewaresGeneric(middlewaresCollection, tasks, resources, kind) {
|
|
579
|
+
const matchesMiddlewareId = (candidateIds, middlewareId) => (candidateIds ?? []).some((candidateId) => candidateId === middlewareId ||
|
|
580
|
+
candidateId.endsWith(`.${middlewareId}`) ||
|
|
581
|
+
middlewareId.endsWith(`.${candidateId}`));
|
|
274
582
|
return (0, introspector_tools_1.toArray)(middlewaresCollection).map((entry) => {
|
|
275
583
|
const mw = entry?.middleware ?? entry;
|
|
276
584
|
const id = (0, introspector_tools_1.readId)(mw);
|
|
@@ -284,12 +592,12 @@ function buildMiddlewaresGeneric(middlewaresCollection, tasks, resources, kind)
|
|
|
284
592
|
const autoApply = normalizeMiddlewareAutoApply(mw);
|
|
285
593
|
const usedByTasks = kind === "task"
|
|
286
594
|
? tasks
|
|
287
|
-
.filter((t) => (t.middleware
|
|
595
|
+
.filter((t) => matchesMiddlewareId(t.middleware, id))
|
|
288
596
|
.map((t) => t.id)
|
|
289
597
|
: [];
|
|
290
598
|
const usedByResources = kind === "resource"
|
|
291
599
|
? resources
|
|
292
|
-
.filter((r) => (r.middleware
|
|
600
|
+
.filter((r) => matchesMiddlewareId(r.middleware, id))
|
|
293
601
|
.map((r) => r.id)
|
|
294
602
|
: [];
|
|
295
603
|
return (0, introspector_tools_1.stampElementKind)({
|
|
@@ -310,7 +618,7 @@ function buildMiddlewaresGeneric(middlewaresCollection, tasks, resources, kind)
|
|
|
310
618
|
usedByResources,
|
|
311
619
|
overriddenBy: mw?.overriddenBy ?? null,
|
|
312
620
|
registeredBy: null,
|
|
313
|
-
configSchema: (0,
|
|
621
|
+
configSchema: (0, schemaFormat_1.formatSchemaIfZod)(mw.configSchema),
|
|
314
622
|
type: kind,
|
|
315
623
|
isPrivate: false,
|
|
316
624
|
visibilityReason: null,
|
|
@@ -324,6 +632,20 @@ function buildResourceMiddlewares(middlewaresCollection, tasks, resources) {
|
|
|
324
632
|
return buildMiddlewaresGeneric(middlewaresCollection, tasks, resources, "resource");
|
|
325
633
|
}
|
|
326
634
|
function attachRegisteredBy(resources, tasks, hooks, middlewares, events) {
|
|
635
|
+
const matchesRegisteredElement = (candidateId, referenceId) => candidateId === referenceId ||
|
|
636
|
+
candidateId.endsWith(`.${referenceId}`) ||
|
|
637
|
+
referenceId.endsWith(`.${candidateId}`);
|
|
638
|
+
const resolveRegisteredElement = (map, referenceId) => {
|
|
639
|
+
const direct = map.get(referenceId);
|
|
640
|
+
if (direct)
|
|
641
|
+
return direct;
|
|
642
|
+
for (const element of map.values()) {
|
|
643
|
+
if (matchesRegisteredElement(element.id, referenceId)) {
|
|
644
|
+
return element;
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
return null;
|
|
648
|
+
};
|
|
327
649
|
const taskMap = (0, introspector_tools_1.buildIdMap)(tasks);
|
|
328
650
|
const hookMap = (0, introspector_tools_1.buildIdMap)(hooks);
|
|
329
651
|
const resourceMap = (0, introspector_tools_1.buildIdMap)(resources);
|
|
@@ -331,16 +653,30 @@ function attachRegisteredBy(resources, tasks, hooks, middlewares, events) {
|
|
|
331
653
|
const eventMap = (0, introspector_tools_1.buildIdMap)(events);
|
|
332
654
|
for (const r of resources) {
|
|
333
655
|
for (const id of r.registers ?? []) {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
656
|
+
const task = resolveRegisteredElement(taskMap, id);
|
|
657
|
+
if (task) {
|
|
658
|
+
task.registeredBy = r.id;
|
|
659
|
+
continue;
|
|
660
|
+
}
|
|
661
|
+
const hook = resolveRegisteredElement(hookMap, id);
|
|
662
|
+
if (hook) {
|
|
663
|
+
hook.registeredBy = r.id;
|
|
664
|
+
continue;
|
|
665
|
+
}
|
|
666
|
+
const resource = resolveRegisteredElement(resourceMap, id);
|
|
667
|
+
if (resource) {
|
|
668
|
+
resource.registeredBy = r.id;
|
|
669
|
+
continue;
|
|
670
|
+
}
|
|
671
|
+
const middleware = resolveRegisteredElement(middlewareMap, id);
|
|
672
|
+
if (middleware) {
|
|
673
|
+
middleware.registeredBy = r.id;
|
|
674
|
+
continue;
|
|
675
|
+
}
|
|
676
|
+
const event = resolveRegisteredElement(eventMap, id);
|
|
677
|
+
if (event) {
|
|
678
|
+
event.registeredBy = r.id;
|
|
679
|
+
}
|
|
344
680
|
}
|
|
345
681
|
}
|
|
346
682
|
}
|
|
@@ -420,10 +756,21 @@ function extractAsyncContextIdsFromDependencies(deps) {
|
|
|
420
756
|
exports.REQUIRE_CONTEXT_MIDDLEWARE_ID = "runner.middleware.task.requireContext";
|
|
421
757
|
const REQUIRE_CONTEXT_MIDDLEWARE_IDS = [
|
|
422
758
|
exports.REQUIRE_CONTEXT_MIDDLEWARE_ID,
|
|
759
|
+
"requireContext",
|
|
423
760
|
// Legacy ids used by older Runner versions
|
|
424
761
|
"globals.middleware.task.requireContext",
|
|
425
762
|
"globals.middleware.requireContext",
|
|
426
763
|
];
|
|
764
|
+
function matchesTagId(candidateId, expectedId) {
|
|
765
|
+
const candidateLocalId = candidateId.split(".").pop();
|
|
766
|
+
const expectedLocalId = expectedId.split(".").pop();
|
|
767
|
+
return (candidateId === expectedId ||
|
|
768
|
+
candidateId.endsWith(`.${expectedId}`) ||
|
|
769
|
+
expectedId.endsWith(`.${candidateId}`) ||
|
|
770
|
+
(candidateLocalId !== undefined &&
|
|
771
|
+
expectedLocalId !== undefined &&
|
|
772
|
+
candidateLocalId === expectedLocalId));
|
|
773
|
+
}
|
|
427
774
|
function extractRequiredContextIds(middleware) {
|
|
428
775
|
const result = [];
|
|
429
776
|
for (const m of middleware || []) {
|
|
@@ -573,8 +920,8 @@ function toSubtreeMiddlewareIds(entries) {
|
|
|
573
920
|
if (!Array.isArray(entries))
|
|
574
921
|
return [];
|
|
575
922
|
const ids = entries
|
|
576
|
-
.map((entry) =>
|
|
577
|
-
.filter(Boolean);
|
|
923
|
+
.map((entry) => typeof entry === "string" ? entry : readSubtreeMiddlewareEntryId(entry))
|
|
924
|
+
.filter((id) => Boolean(id));
|
|
578
925
|
return Array.from(new Set(ids));
|
|
579
926
|
}
|
|
580
927
|
function appendSubtreeMiddlewareIds(target, entries) {
|
|
@@ -583,16 +930,12 @@ function appendSubtreeMiddlewareIds(target, entries) {
|
|
|
583
930
|
}
|
|
584
931
|
}
|
|
585
932
|
function normalizeSubtreePolicy(resource) {
|
|
586
|
-
const
|
|
587
|
-
if (!rawSubtree || typeof rawSubtree !== "object")
|
|
588
|
-
return null;
|
|
589
|
-
const subtreePolicies = Array.isArray(rawSubtree)
|
|
590
|
-
? rawSubtree.filter((policy) => Boolean(policy) && typeof policy === "object")
|
|
591
|
-
: [rawSubtree];
|
|
933
|
+
const subtreePolicies = getSubtreePolicies(resource);
|
|
592
934
|
if (subtreePolicies.length === 0)
|
|
593
935
|
return null;
|
|
594
936
|
const taskMiddlewareIds = new Set();
|
|
595
937
|
const resourceMiddlewareIds = new Set();
|
|
938
|
+
const taskIdentityRequirements = [];
|
|
596
939
|
let tasksValidatorCount = 0;
|
|
597
940
|
let resourcesValidatorCount = 0;
|
|
598
941
|
let hooksValidatorCount = 0;
|
|
@@ -600,11 +943,16 @@ function normalizeSubtreePolicy(resource) {
|
|
|
600
943
|
let resourceMiddlewareValidatorCount = 0;
|
|
601
944
|
let eventsValidatorCount = 0;
|
|
602
945
|
let tagsValidatorCount = 0;
|
|
946
|
+
let subtreeMiddlewareIdentityScope = null;
|
|
603
947
|
for (const subtree of subtreePolicies) {
|
|
604
948
|
if (subtree.tasks) {
|
|
605
949
|
appendSubtreeMiddlewareIds(taskMiddlewareIds, subtree.tasks.middleware);
|
|
950
|
+
taskIdentityRequirements.push(...normalizeIdentityRequirementSummaries(subtree.tasks.identity));
|
|
606
951
|
tasksValidatorCount += normalizeSubtreeValidatorCount(subtree.tasks.validate);
|
|
607
952
|
}
|
|
953
|
+
if (subtree.middleware && "identityScope" in subtree.middleware) {
|
|
954
|
+
subtreeMiddlewareIdentityScope = normalizeIdentityScopeSummary(subtree.middleware.identityScope);
|
|
955
|
+
}
|
|
608
956
|
if (subtree.resources) {
|
|
609
957
|
appendSubtreeMiddlewareIds(resourceMiddlewareIds, subtree.resources.middleware);
|
|
610
958
|
resourcesValidatorCount += normalizeSubtreeValidatorCount(subtree.resources.validate);
|
|
@@ -625,10 +973,20 @@ function normalizeSubtreePolicy(resource) {
|
|
|
625
973
|
tagsValidatorCount += normalizeSubtreeValidatorCount(subtree.tags.validate);
|
|
626
974
|
}
|
|
627
975
|
}
|
|
628
|
-
const tasks = taskMiddlewareIds.size > 0 ||
|
|
976
|
+
const tasks = taskMiddlewareIds.size > 0 ||
|
|
977
|
+
tasksValidatorCount > 0 ||
|
|
978
|
+
taskIdentityRequirements.length > 0
|
|
629
979
|
? {
|
|
630
980
|
middleware: Array.from(taskMiddlewareIds),
|
|
631
981
|
validatorCount: tasksValidatorCount,
|
|
982
|
+
...(taskIdentityRequirements.length > 0
|
|
983
|
+
? { identity: taskIdentityRequirements }
|
|
984
|
+
: {}),
|
|
985
|
+
}
|
|
986
|
+
: null;
|
|
987
|
+
const middleware = subtreeMiddlewareIdentityScope !== null
|
|
988
|
+
? {
|
|
989
|
+
identityScope: subtreeMiddlewareIdentityScope,
|
|
632
990
|
}
|
|
633
991
|
: null;
|
|
634
992
|
const resources = resourceMiddlewareIds.size > 0 || resourcesValidatorCount > 0
|
|
@@ -663,6 +1021,7 @@ function normalizeSubtreePolicy(resource) {
|
|
|
663
1021
|
}
|
|
664
1022
|
: null;
|
|
665
1023
|
if (!tasks &&
|
|
1024
|
+
!middleware &&
|
|
666
1025
|
!resources &&
|
|
667
1026
|
!hooks &&
|
|
668
1027
|
!taskMiddleware &&
|
|
@@ -673,6 +1032,7 @@ function normalizeSubtreePolicy(resource) {
|
|
|
673
1032
|
}
|
|
674
1033
|
return {
|
|
675
1034
|
tasks,
|
|
1035
|
+
middleware,
|
|
676
1036
|
resources,
|
|
677
1037
|
hooks,
|
|
678
1038
|
taskMiddleware,
|
|
@@ -691,22 +1051,8 @@ function parseTagConfigJson(config) {
|
|
|
691
1051
|
return null;
|
|
692
1052
|
}
|
|
693
1053
|
}
|
|
694
|
-
function extractEventLaneSummary(tagsDetailed) {
|
|
695
|
-
const laneTag = tagsDetailed.find((tag) => tag.id === lane_resources_1.EVENT_LANE_TAG_ID);
|
|
696
|
-
if (!laneTag)
|
|
697
|
-
return null;
|
|
698
|
-
const parsed = parseTagConfigJson(laneTag.config);
|
|
699
|
-
const laneId = (0, lane_resources_1.extractLaneId)(parsed?.lane);
|
|
700
|
-
if (!laneId)
|
|
701
|
-
return null;
|
|
702
|
-
return {
|
|
703
|
-
laneId,
|
|
704
|
-
orderingKey: parsed?.orderingKey != null ? String(parsed.orderingKey) : null,
|
|
705
|
-
metadata: parsed?.metadata != null ? (0, introspector_tools_1.stringifyIfObject)(parsed.metadata) : null,
|
|
706
|
-
};
|
|
707
|
-
}
|
|
708
1054
|
function extractRpcLaneSummary(tagsDetailed) {
|
|
709
|
-
const laneTag = tagsDetailed.find((tag) => tag.id
|
|
1055
|
+
const laneTag = tagsDetailed.find((tag) => matchesTagId(tag.id, lane_resources_1.RPC_LANE_TAG_ID));
|
|
710
1056
|
if (!laneTag)
|
|
711
1057
|
return null;
|
|
712
1058
|
const parsed = parseTagConfigJson(laneTag.config);
|