@bluelibs/runner-dev 6.2.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.
Files changed (149) hide show
  1. package/README.md +131 -12
  2. package/dist/cli/generators/initUtils.js +1 -1
  3. package/dist/cli/generators/initUtils.js.map +1 -1
  4. package/dist/cli/generators/scaffold/templates/README.md.js +17 -4
  5. package/dist/cli/generators/scaffold/templates/README.md.js.map +1 -1
  6. package/dist/cli/generators/scaffold/templates/index.d.ts +2 -1
  7. package/dist/cli/generators/scaffold/templates/index.js +5 -3
  8. package/dist/cli/generators/scaffold/templates/index.js.map +1 -1
  9. package/dist/cli/generators/scaffold/templates/package.json.d.ts +7 -2
  10. package/dist/cli/generators/scaffold/templates/package.json.js +7 -2
  11. package/dist/cli/generators/scaffold/templates/package.json.js.map +1 -1
  12. package/dist/cli/generators/scaffold/templates/src/app.test.ts.d.ts +1 -0
  13. package/dist/cli/generators/scaffold/templates/src/app.test.ts.js +29 -0
  14. package/dist/cli/generators/scaffold/templates/src/app.test.ts.js.map +1 -0
  15. package/dist/cli/generators/scaffold/templates/src/app.ts.d.ts +1 -0
  16. package/dist/cli/generators/scaffold/templates/src/app.ts.js +15 -0
  17. package/dist/cli/generators/scaffold/templates/src/app.ts.js.map +1 -0
  18. package/dist/cli/generators/scaffold/templates/src/main.ts.js +3 -10
  19. package/dist/cli/generators/scaffold/templates/src/main.ts.js.map +1 -1
  20. package/dist/cli/generators/scaffold/templates/tsconfig.json.d.ts +2 -0
  21. package/dist/cli/generators/scaffold/templates/tsconfig.json.js +2 -0
  22. package/dist/cli/generators/scaffold/templates/tsconfig.json.js.map +1 -1
  23. package/dist/cli/generators/scaffold.js +2 -1
  24. package/dist/cli/generators/scaffold.js.map +1 -1
  25. package/dist/cli.js +0 -0
  26. package/dist/docs/packageDocs.d.ts +16 -0
  27. package/dist/docs/packageDocs.js +107 -0
  28. package/dist/docs/packageDocs.js.map +1 -0
  29. package/dist/exportDocs.d.ts +10 -0
  30. package/dist/exportDocs.js +98 -0
  31. package/dist/exportDocs.js.map +1 -0
  32. package/dist/generated/resolvers-types.d.ts +114 -29
  33. package/dist/index.d.ts +4 -1
  34. package/dist/index.js +3 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/mcp/env.d.ts +5 -0
  37. package/dist/mcp/env.js +30 -1
  38. package/dist/mcp/env.js.map +1 -1
  39. package/dist/mcp/help.d.ts +8 -1
  40. package/dist/mcp/help.js +30 -4
  41. package/dist/mcp/help.js.map +1 -1
  42. package/dist/mcp/http.js +10 -0
  43. package/dist/mcp/http.js.map +1 -1
  44. package/dist/mcp/projectOverview.js +13 -4
  45. package/dist/mcp/projectOverview.js.map +1 -1
  46. package/dist/mcp/snapshot.d.ts +22 -0
  47. package/dist/mcp/snapshot.js +347 -0
  48. package/dist/mcp/snapshot.js.map +1 -0
  49. package/dist/mcp/tools/graphql.mutation.js +4 -1
  50. package/dist/mcp/tools/graphql.mutation.js.map +1 -1
  51. package/dist/mcp/tools/graphql.ping.js +1 -1
  52. package/dist/mcp/tools/graphql.ping.js.map +1 -1
  53. package/dist/mcp/tools/graphql.query.js +1 -1
  54. package/dist/mcp/tools/graphql.query.js.map +1 -1
  55. package/dist/mcp/tools/help.read.js +7 -5
  56. package/dist/mcp/tools/help.read.js.map +1 -1
  57. package/dist/mcp/tools/help.runner.js +3 -1
  58. package/dist/mcp/tools/help.runner.js.map +1 -1
  59. package/dist/mcp/tools/help.runnerDev.js +4 -4
  60. package/dist/mcp/tools/help.runnerDev.js.map +1 -1
  61. package/dist/mcp.js +4 -9
  62. package/dist/mcp.js.map +1 -1
  63. package/dist/resources/docsPayload.d.ts +33 -0
  64. package/dist/resources/docsPayload.js +171 -0
  65. package/dist/resources/docsPayload.js.map +1 -0
  66. package/dist/resources/docsUiAssets.d.ts +27 -0
  67. package/dist/resources/docsUiAssets.js +150 -0
  68. package/dist/resources/docsUiAssets.js.map +1 -0
  69. package/dist/resources/graphql-accumulator.resource.d.ts +1 -0
  70. package/dist/resources/graphql-accumulator.resource.js +30 -26
  71. package/dist/resources/graphql-accumulator.resource.js.map +1 -1
  72. package/dist/resources/live.resource.js +1 -1
  73. package/dist/resources/live.resource.js.map +1 -1
  74. package/dist/resources/models/Introspector.d.ts +12 -0
  75. package/dist/resources/models/Introspector.js +51 -28
  76. package/dist/resources/models/Introspector.js.map +1 -1
  77. package/dist/resources/models/initializeFromStore.js +5 -5
  78. package/dist/resources/models/initializeFromStore.js.map +1 -1
  79. package/dist/resources/models/initializeFromStore.utils.d.ts +2 -2
  80. package/dist/resources/models/initializeFromStore.utils.js +395 -68
  81. package/dist/resources/models/initializeFromStore.utils.js.map +1 -1
  82. package/dist/resources/models/introspector.tools.js +88 -4
  83. package/dist/resources/models/introspector.tools.js.map +1 -1
  84. package/dist/resources/routeHandlers/createDocsServeHandler.js +13 -37
  85. package/dist/resources/routeHandlers/createDocsServeHandler.js.map +1 -1
  86. package/dist/resources/routeHandlers/getDocsData.d.ts +1 -6
  87. package/dist/resources/routeHandlers/getDocsData.js +10 -168
  88. package/dist/resources/routeHandlers/getDocsData.js.map +1 -1
  89. package/dist/resources/server.resource.js +0 -1
  90. package/dist/resources/server.resource.js.map +1 -1
  91. package/dist/resources/ui.static.js +4 -9
  92. package/dist/resources/ui.static.js.map +1 -1
  93. package/dist/schema/model.d.ts +18 -0
  94. package/dist/schema/model.js +14 -0
  95. package/dist/schema/model.js.map +1 -1
  96. package/dist/schema/query.js +3 -3
  97. package/dist/schema/query.js.map +1 -1
  98. package/dist/schema/types/AllType.js +2 -21
  99. package/dist/schema/types/AllType.js.map +1 -1
  100. package/dist/schema/types/ErrorType.js +1 -3
  101. package/dist/schema/types/ErrorType.js.map +1 -1
  102. package/dist/schema/types/EventType.js +6 -19
  103. package/dist/schema/types/EventType.js.map +1 -1
  104. package/dist/schema/types/HookType.js +4 -16
  105. package/dist/schema/types/HookType.js.map +1 -1
  106. package/dist/schema/types/ResourceType.js +50 -23
  107. package/dist/schema/types/ResourceType.js.map +1 -1
  108. package/dist/schema/types/TaskLikeCommon.js +2 -2
  109. package/dist/schema/types/TaskLikeCommon.js.map +1 -1
  110. package/dist/schema/types/TaskType.js +6 -19
  111. package/dist/schema/types/TaskType.js.map +1 -1
  112. package/dist/schema/types/middleware/UsageTypes.d.ts +1 -0
  113. package/dist/schema/types/middleware/UsageTypes.js +16 -5
  114. package/dist/schema/types/middleware/UsageTypes.js.map +1 -1
  115. package/dist/schema/types/middleware/common.js +2 -2
  116. package/dist/schema/types/middleware/common.js.map +1 -1
  117. package/dist/ui/.vite/manifest.json +2 -2
  118. package/dist/ui/assets/docs-Beb_xRuE.js +304 -0
  119. package/dist/ui/assets/docs-Beb_xRuE.js.map +1 -0
  120. package/dist/ui/assets/docs-lid1amCk.css +1 -0
  121. package/dist/ui/docs/favicon.ico +0 -0
  122. package/dist/utils/lane-resources.d.ts +69 -0
  123. package/dist/utils/lane-resources.js +145 -0
  124. package/dist/utils/lane-resources.js.map +1 -1
  125. package/dist/utils/runner-namespace.d.ts +1 -0
  126. package/dist/utils/runner-namespace.js +9 -0
  127. package/dist/utils/runner-namespace.js.map +1 -0
  128. package/dist/utils/schemaFormat.d.ts +6 -0
  129. package/dist/utils/schemaFormat.js +244 -0
  130. package/dist/utils/schemaFormat.js.map +1 -0
  131. package/dist/utils/system-namespace.d.ts +1 -0
  132. package/dist/utils/system-namespace.js +9 -0
  133. package/dist/utils/system-namespace.js.map +1 -0
  134. package/dist/version.d.ts +1 -1
  135. package/dist/version.js +1 -1
  136. package/package.json +21 -5
  137. package/readmes/API_REFERENCE.md +364 -0
  138. package/readmes/COMPACT_GUIDE.md +254 -0
  139. package/skills/core/SKILL.md +27 -0
  140. package/skills/core/references/readmes/API_REFERENCE.md +364 -0
  141. package/skills/core/references/readmes/COMPACT_GUIDE.md +254 -0
  142. package/AI.md +0 -630
  143. package/dist/ui/assets/docs-CWJO6emS.css +0 -1
  144. package/dist/ui/assets/docs-Zej7hPlV.js +0 -302
  145. package/dist/ui/assets/docs-Zej7hPlV.js.map +0 -1
  146. package/readmes/runner-AI.md +0 -917
  147. package/readmes/runner-durable-workflows.md +0 -2247
  148. package/readmes/runner-full-guide.md +0 -6010
  149. package/readmes/runner-remote-lanes.md +0 -910
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PackageDocNotFoundError = exports.RUNNER_FRAMEWORK_COMPLETE_DOC_PATHS = exports.RUNNER_FRAMEWORK_COMPACT_DOC_PATHS = void 0;
7
+ exports.readPackageDoc = readPackageDoc;
8
+ exports.readFirstAvailablePackageDoc = readFirstAvailablePackageDoc;
9
+ const promises_1 = __importDefault(require("node:fs/promises"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const path_1 = require("../utils/path");
12
+ exports.RUNNER_FRAMEWORK_COMPACT_DOC_PATHS = [
13
+ "readmes/COMPACT_GUIDE.md",
14
+ ];
15
+ exports.RUNNER_FRAMEWORK_COMPLETE_DOC_PATHS = [
16
+ "readmes/FULL_GUIDE.md",
17
+ ];
18
+ const PACKAGE_NAME_PATTERN = /^(?:@[a-z0-9_.-]+\/)?[a-z0-9_.-]+$/i;
19
+ const PACKAGE_DOC_ROOTS_BY_PACKAGE = {
20
+ "@bluelibs/runner": [
21
+ ".agents/skills/bluelibs-runner-core/references",
22
+ "node_modules/@bluelibs/runner",
23
+ ],
24
+ };
25
+ class PackageDocNotFoundError extends Error {
26
+ attemptedPaths;
27
+ constructor(packageName, docPaths, attemptedPaths) {
28
+ super(`Required package docs for ${packageName} were not found. Tried: ${docPaths.join(", ")}`);
29
+ this.attemptedPaths = attemptedPaths;
30
+ this.name = "PackageDocNotFoundError";
31
+ }
32
+ }
33
+ exports.PackageDocNotFoundError = PackageDocNotFoundError;
34
+ function isMissingFileError(error) {
35
+ return (typeof error === "object" &&
36
+ error !== null &&
37
+ "code" in error &&
38
+ error.code === "ENOENT");
39
+ }
40
+ function normalizeDocPath(docPath) {
41
+ const normalized = node_path_1.default.posix.normalize(docPath.replaceAll("\\", "/"));
42
+ if (!normalized ||
43
+ normalized === "." ||
44
+ normalized.startsWith("../") ||
45
+ normalized === ".." ||
46
+ node_path_1.default.posix.isAbsolute(normalized)) {
47
+ return "README.md";
48
+ }
49
+ return normalized;
50
+ }
51
+ function getPackageDocCandidatePaths(root, packageName, normalizedDocPath) {
52
+ const configuredRoots = PACKAGE_DOC_ROOTS_BY_PACKAGE[packageName];
53
+ if (configuredRoots?.length) {
54
+ return configuredRoots.map((configuredRoot) => node_path_1.default.join(root, configuredRoot, normalizedDocPath));
55
+ }
56
+ const packageRoot = node_path_1.default.join(root, "node_modules", packageName);
57
+ return [node_path_1.default.join(packageRoot, normalizedDocPath)];
58
+ }
59
+ async function readPackageDoc(packageName, docPath = "README.md") {
60
+ if (!PACKAGE_NAME_PATTERN.test(packageName)) {
61
+ return {
62
+ packageName,
63
+ filePath: packageName,
64
+ content: "",
65
+ };
66
+ }
67
+ const root = process.cwd();
68
+ const normalizedDocPath = normalizeDocPath(docPath);
69
+ const candidatePaths = getPackageDocCandidatePaths(root, packageName, normalizedDocPath);
70
+ let lastTriedPath = candidatePaths[0];
71
+ for (const candidatePath of candidatePaths) {
72
+ lastTriedPath = candidatePath;
73
+ try {
74
+ const content = await promises_1.default.readFile(candidatePath, "utf8");
75
+ return {
76
+ packageName,
77
+ filePath: (0, path_1.sanitizePath)(candidatePath) ?? candidatePath,
78
+ content,
79
+ };
80
+ }
81
+ catch (error) {
82
+ if (!isMissingFileError(error)) {
83
+ throw error;
84
+ }
85
+ }
86
+ }
87
+ return {
88
+ packageName,
89
+ filePath: (0, path_1.sanitizePath)(lastTriedPath) ?? lastTriedPath,
90
+ content: "",
91
+ };
92
+ }
93
+ async function readFirstAvailablePackageDoc(packageName, docPaths) {
94
+ const attemptedPaths = [];
95
+ for (const docPath of docPaths) {
96
+ if (!docPath) {
97
+ continue;
98
+ }
99
+ const doc = await readPackageDoc(packageName, docPath);
100
+ attemptedPaths.push(doc.filePath);
101
+ if (doc.content) {
102
+ return doc;
103
+ }
104
+ }
105
+ throw new PackageDocNotFoundError(packageName, docPaths, attemptedPaths);
106
+ }
107
+ //# sourceMappingURL=packageDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageDocs.js","sourceRoot":"","sources":["../../src/docs/packageDocs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type ExportDocsOptions = {
2
+ output?: string;
3
+ overwrite?: boolean;
4
+ };
5
+ export type ExportDocsResult = {
6
+ outputDir: string;
7
+ entryHtmlPath: string;
8
+ snapshotPath: string;
9
+ };
10
+ export declare function exportDocs(app: unknown, options?: ExportDocsOptions): Promise<ExportDocsResult>;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.exportDocs = exportDocs;
7
+ const runner_1 = require("@bluelibs/runner");
8
+ const promises_1 = __importDefault(require("node:fs/promises"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const printSchema_1 = require("graphql/utilities/printSchema");
11
+ const docsPayload_1 = require("./resources/docsPayload");
12
+ const graphql_accumulator_resource_1 = require("./resources/graphql-accumulator.resource");
13
+ const Introspector_1 = require("./resources/models/Introspector");
14
+ const docsUiAssets_1 = require("./resources/docsUiAssets");
15
+ function resolveOutputDir(output) {
16
+ const resolved = output ?? "./runner-dev-catalog";
17
+ return node_path_1.default.isAbsolute(resolved)
18
+ ? resolved
19
+ : node_path_1.default.resolve(process.cwd(), resolved);
20
+ }
21
+ function isDefaultOutputDir(outputDir) {
22
+ return outputDir === resolveOutputDir("./runner-dev-catalog");
23
+ }
24
+ function isDangerousOutputDir(outputDir) {
25
+ const cwd = node_path_1.default.resolve(process.cwd());
26
+ const parentDir = node_path_1.default.resolve(cwd, "..");
27
+ const homeDir = node_path_1.default.resolve(process.env.HOME || "~");
28
+ const rootDir = node_path_1.default.parse(outputDir).root;
29
+ return [cwd, parentDir, homeDir, rootDir].includes(outputDir);
30
+ }
31
+ async function assertOutputDirIsSafe(outputDir, options) {
32
+ if (isDangerousOutputDir(outputDir)) {
33
+ throw new Error(`Refusing to export Runner-Dev docs into '${outputDir}' because that path is too broad. Pick a dedicated directory instead.`);
34
+ }
35
+ let entries = null;
36
+ try {
37
+ entries = await promises_1.default.readdir(outputDir);
38
+ }
39
+ catch {
40
+ return;
41
+ }
42
+ if (entries.length === 0) {
43
+ return;
44
+ }
45
+ const canOverwrite = options.overwrite === true || isDefaultOutputDir(outputDir);
46
+ if (!canOverwrite) {
47
+ throw new Error(`Refusing to overwrite the non-empty export directory '${outputDir}'. Pass { overwrite: true } or choose a dedicated path.`);
48
+ }
49
+ }
50
+ async function exportDocs(app, options = {}) {
51
+ const outputDir = resolveOutputDir(options.output);
52
+ const entryHtmlPath = node_path_1.default.join(outputDir, "index.html");
53
+ const snapshotPath = node_path_1.default.join(outputDir, "snapshot.json");
54
+ const uiAssets = await (0, docsUiAssets_1.resolveDocsBuildAssets)();
55
+ const dryRuntime = await (0, runner_1.run)(app, {
56
+ dryRun: true,
57
+ logs: { printThreshold: null },
58
+ });
59
+ try {
60
+ const store = await dryRuntime.getResourceValue(runner_1.resources.store);
61
+ const runtime = await dryRuntime.getResourceValue(runner_1.resources.runtime);
62
+ const introspector = new Introspector_1.Introspector({ store, runtime });
63
+ const graphqlSdl = (0, printSchema_1.printSchema)((0, graphql_accumulator_resource_1.createRunnerDevGraphqlSchema)());
64
+ const payload = await (0, docsPayload_1.buildDocsPagePayload)({
65
+ store,
66
+ introspector,
67
+ mode: "catalog",
68
+ getGraphqlSdl: () => graphqlSdl,
69
+ });
70
+ if (!payload.graphqlSdl || payload.graphqlSdl.trim().length === 0) {
71
+ throw new Error("Runner-Dev export could not generate graphqlSdl for the snapshot payload.");
72
+ }
73
+ await assertOutputDirIsSafe(outputDir, options);
74
+ await promises_1.default.rm(outputDir, { recursive: true, force: true });
75
+ await promises_1.default.mkdir(node_path_1.default.dirname(outputDir), { recursive: true });
76
+ await promises_1.default.mkdir(outputDir, { recursive: true });
77
+ await promises_1.default.writeFile(snapshotPath, JSON.stringify(payload, null, 2), "utf8");
78
+ await promises_1.default.writeFile(entryHtmlPath, await (0, docsUiAssets_1.renderStandaloneDocsHtml)({
79
+ uiDir: uiAssets.uiDir,
80
+ entry: uiAssets.entry,
81
+ payload,
82
+ }), "utf8");
83
+ return {
84
+ outputDir,
85
+ entryHtmlPath,
86
+ snapshotPath,
87
+ };
88
+ }
89
+ finally {
90
+ try {
91
+ await dryRuntime.dispose();
92
+ }
93
+ catch {
94
+ /* best-effort cleanup */
95
+ }
96
+ }
97
+ }
98
+ //# sourceMappingURL=exportDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportDocs.js","sourceRoot":"","sources":["../src/exportDocs.ts"],"names":[],"mappings":"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"}
@@ -280,7 +280,7 @@ export type Event = BaseElement & {
280
280
  emittedBy: Array<Scalars['String']['output']>;
281
281
  /** Nodes that emit this event (resolved). Can be Task, Hook or Resource. */
282
282
  emittedByResolved: Array<BaseElement>;
283
- /** Event lane summary derived from globals.tags.eventLane when present. */
283
+ /** Event lane summary derived from Event Lane applyTo() assignments when present. */
284
284
  eventLane: Maybe<EventLaneSummary>;
285
285
  /** Contents of the file at filePath (if accessible). Optionally slice by 1-based inclusive line numbers via startLine/endLine. Caution: avoid querying this in bulk; prefer fetching one file at a time. */
286
286
  fileContents: Maybe<Scalars['String']['output']>;
@@ -327,7 +327,7 @@ export type EventFileContentsArgs = {
327
327
  export type EventFilterInput = {
328
328
  /** When true, only events without hooks are returned. */
329
329
  hasNoHooks: InputMaybe<Scalars['Boolean']['input']>;
330
- /** When true, hides internal/system events (runner-dev/globals). */
330
+ /** When true, hides system namespace events (`system` / `system.*`). */
331
331
  hideSystem: InputMaybe<Scalars['Boolean']['input']>;
332
332
  /** Return only events whose id contains this substring. */
333
333
  idIncludes: InputMaybe<Scalars['String']['input']>;
@@ -675,15 +675,17 @@ export type MiddlewareInterceptorOwnersSnapshot = {
675
675
  };
676
676
  export type MiddlewareResourceUsage = {
677
677
  __typename?: 'MiddlewareResourceUsage';
678
- config: Maybe<Scalars['ID']['output']>;
678
+ config: Maybe<Scalars['String']['output']>;
679
679
  id: Scalars['ID']['output'];
680
680
  node: Resource;
681
681
  };
682
682
  export type MiddlewareTaskUsage = {
683
683
  __typename?: 'MiddlewareTaskUsage';
684
- config: Maybe<Scalars['ID']['output']>;
684
+ config: Maybe<Scalars['String']['output']>;
685
685
  id: Scalars['ID']['output'];
686
- node: Task;
686
+ node: BaseElement;
687
+ origin: Maybe<Scalars['String']['output']>;
688
+ subtreeOwnerId: Maybe<Scalars['ID']['output']>;
687
689
  };
688
690
  /** Kinds of executable nodes */
689
691
  export type NodeKindEnum = 'HOOK' | 'TASK';
@@ -858,7 +860,7 @@ export type Resource = BaseElement & {
858
860
  /** Middlewares applied to this resource (resolved) */
859
861
  middlewareResolved: Array<ResourceMiddleware>;
860
862
  /** Middlewares applied to this resource with per-usage config */
861
- middlewareResolvedDetailed: Array<TaskMiddlewareUsage>;
863
+ middlewareResolvedDetailed: Array<ResourceMiddlewareUsage>;
862
864
  /** Ids of items this resource overrides */
863
865
  overrides: Array<Scalars['String']['output']>;
864
866
  /** The registerable items this resource overrides (resolved) */
@@ -968,20 +970,49 @@ export type ResourceMiddlewareFileContentsArgs = {
968
970
  endLine: InputMaybe<Scalars['Int']['input']>;
969
971
  startLine: InputMaybe<Scalars['Int']['input']>;
970
972
  };
971
- export type ResourceSubtreeBranch = {
972
- __typename?: 'ResourceSubtreeBranch';
973
- middleware: Array<Scalars['String']['output']>;
974
- validatorCount: Scalars['Int']['output'];
973
+ export type ResourceMiddlewareUsage = {
974
+ __typename?: 'ResourceMiddlewareUsage';
975
+ config: Maybe<Scalars['String']['output']>;
976
+ id: Scalars['ID']['output'];
977
+ node: ResourceMiddleware;
978
+ };
979
+ export type ResourceSubtreeIdentityRequirement = {
980
+ __typename?: 'ResourceSubtreeIdentityRequirement';
981
+ roles: Array<Scalars['String']['output']>;
982
+ tenant: Scalars['Boolean']['output'];
983
+ user: Scalars['Boolean']['output'];
984
+ };
985
+ export type ResourceSubtreeIdentityScope = {
986
+ __typename?: 'ResourceSubtreeIdentityScope';
987
+ required: Scalars['Boolean']['output'];
988
+ tenant: Scalars['Boolean']['output'];
989
+ user: Scalars['Boolean']['output'];
990
+ };
991
+ export type ResourceSubtreeMiddlewareScope = {
992
+ __typename?: 'ResourceSubtreeMiddlewareScope';
993
+ identityScope: Maybe<ResourceSubtreeIdentityScope>;
975
994
  };
976
995
  export type ResourceSubtreePolicy = {
977
996
  __typename?: 'ResourceSubtreePolicy';
978
997
  events: Maybe<ResourceSubtreeValidationBranch>;
979
998
  hooks: Maybe<ResourceSubtreeValidationBranch>;
999
+ middleware: Maybe<ResourceSubtreeMiddlewareScope>;
980
1000
  resourceMiddleware: Maybe<ResourceSubtreeValidationBranch>;
981
- resources: Maybe<ResourceSubtreeBranch>;
1001
+ resources: Maybe<ResourceSubtreeResourceBranch>;
982
1002
  tags: Maybe<ResourceSubtreeValidationBranch>;
983
1003
  taskMiddleware: Maybe<ResourceSubtreeValidationBranch>;
984
- tasks: Maybe<ResourceSubtreeBranch>;
1004
+ tasks: Maybe<ResourceSubtreeTaskBranch>;
1005
+ };
1006
+ export type ResourceSubtreeResourceBranch = {
1007
+ __typename?: 'ResourceSubtreeResourceBranch';
1008
+ middleware: Array<Scalars['String']['output']>;
1009
+ validatorCount: Scalars['Int']['output'];
1010
+ };
1011
+ export type ResourceSubtreeTaskBranch = {
1012
+ __typename?: 'ResourceSubtreeTaskBranch';
1013
+ identity: Array<ResourceSubtreeIdentityRequirement>;
1014
+ middleware: Array<Scalars['String']['output']>;
1015
+ validatorCount: Scalars['Int']['output'];
985
1016
  };
986
1017
  export type ResourceSubtreeValidationBranch = {
987
1018
  __typename?: 'ResourceSubtreeValidationBranch';
@@ -1288,6 +1319,8 @@ export type TaskMiddlewareUsage = {
1288
1319
  config: Maybe<Scalars['String']['output']>;
1289
1320
  id: Scalars['ID']['output'];
1290
1321
  node: TaskMiddleware;
1322
+ origin: Maybe<Scalars['String']['output']>;
1323
+ subtreeOwnerId: Maybe<Scalars['ID']['output']>;
1291
1324
  };
1292
1325
  export type WithIndex<TObject> = TObject & Record<string, any>;
1293
1326
  export type ResolversObject<TObject> = WithIndex<TObject>;
@@ -1359,7 +1392,7 @@ export type ResolversInterfaceTypes<_RefType extends Record<string, unknown>> =
1359
1392
  dependsOnResolved: Array<_RefType['Resource']>;
1360
1393
  emits: Array<_RefType['Event']>;
1361
1394
  middlewareResolved: Array<_RefType['ResourceMiddleware']>;
1362
- middlewareResolvedDetailed: Array<_RefType['TaskMiddlewareUsage']>;
1395
+ middlewareResolvedDetailed: Array<_RefType['ResourceMiddlewareUsage']>;
1363
1396
  overridesResolved: Array<_RefType['BaseElement']>;
1364
1397
  registeredByResolved: Maybe<_RefType['Resource']>;
1365
1398
  registersResolved: Array<_RefType['BaseElement']>;
@@ -1496,7 +1529,7 @@ export type ResolversTypes = ResolversObject<{
1496
1529
  node: ResolversTypes['Resource'];
1497
1530
  }>;
1498
1531
  MiddlewareTaskUsage: ResolverTypeWrapper<Omit<MiddlewareTaskUsage, 'node'> & {
1499
- node: ResolversTypes['Task'];
1532
+ node: ResolversTypes['BaseElement'];
1500
1533
  }>;
1501
1534
  NodeKindEnum: NodeKindEnum;
1502
1535
  Query: ResolverTypeWrapper<{}>;
@@ -1504,7 +1537,7 @@ export type ResolversTypes = ResolversObject<{
1504
1537
  dependsOnResolved: Array<ResolversTypes['Resource']>;
1505
1538
  emits: Array<ResolversTypes['Event']>;
1506
1539
  middlewareResolved: Array<ResolversTypes['ResourceMiddleware']>;
1507
- middlewareResolvedDetailed: Array<ResolversTypes['TaskMiddlewareUsage']>;
1540
+ middlewareResolvedDetailed: Array<ResolversTypes['ResourceMiddlewareUsage']>;
1508
1541
  overridesResolved: Array<ResolversTypes['BaseElement']>;
1509
1542
  registeredByResolved: Maybe<ResolversTypes['Resource']>;
1510
1543
  registersResolved: Array<ResolversTypes['BaseElement']>;
@@ -1524,8 +1557,15 @@ export type ResolversTypes = ResolversObject<{
1524
1557
  usedBy: Array<ResolversTypes['Resource']>;
1525
1558
  usedByDetailed: Array<ResolversTypes['MiddlewareResourceUsage']>;
1526
1559
  }>;
1527
- ResourceSubtreeBranch: ResolverTypeWrapper<ResourceSubtreeBranch>;
1560
+ ResourceMiddlewareUsage: ResolverTypeWrapper<Omit<ResourceMiddlewareUsage, 'node'> & {
1561
+ node: ResolversTypes['ResourceMiddleware'];
1562
+ }>;
1563
+ ResourceSubtreeIdentityRequirement: ResolverTypeWrapper<ResourceSubtreeIdentityRequirement>;
1564
+ ResourceSubtreeIdentityScope: ResolverTypeWrapper<ResourceSubtreeIdentityScope>;
1565
+ ResourceSubtreeMiddlewareScope: ResolverTypeWrapper<ResourceSubtreeMiddlewareScope>;
1528
1566
  ResourceSubtreePolicy: ResolverTypeWrapper<ResourceSubtreePolicy>;
1567
+ ResourceSubtreeResourceBranch: ResolverTypeWrapper<ResourceSubtreeResourceBranch>;
1568
+ ResourceSubtreeTaskBranch: ResolverTypeWrapper<ResourceSubtreeTaskBranch>;
1529
1569
  ResourceSubtreeValidationBranch: ResolverTypeWrapper<ResourceSubtreeValidationBranch>;
1530
1570
  RpcLaneSummary: ResolverTypeWrapper<RpcLaneSummary>;
1531
1571
  RunDisposeOptions: ResolverTypeWrapper<RunDisposeOptions>;
@@ -1674,14 +1714,14 @@ export type ResolversParentTypes = ResolversObject<{
1674
1714
  node: ResolversParentTypes['Resource'];
1675
1715
  };
1676
1716
  MiddlewareTaskUsage: Omit<MiddlewareTaskUsage, 'node'> & {
1677
- node: ResolversParentTypes['Task'];
1717
+ node: ResolversParentTypes['BaseElement'];
1678
1718
  };
1679
1719
  Query: {};
1680
1720
  Resource: Omit<Resource, 'dependsOnResolved' | 'emits' | 'middlewareResolved' | 'middlewareResolvedDetailed' | 'overridesResolved' | 'registeredByResolved' | 'registersResolved' | 'tags' | 'usedBy'> & {
1681
1721
  dependsOnResolved: Array<ResolversParentTypes['Resource']>;
1682
1722
  emits: Array<ResolversParentTypes['Event']>;
1683
1723
  middlewareResolved: Array<ResolversParentTypes['ResourceMiddleware']>;
1684
- middlewareResolvedDetailed: Array<ResolversParentTypes['TaskMiddlewareUsage']>;
1724
+ middlewareResolvedDetailed: Array<ResolversParentTypes['ResourceMiddlewareUsage']>;
1685
1725
  overridesResolved: Array<ResolversParentTypes['BaseElement']>;
1686
1726
  registeredByResolved: Maybe<ResolversParentTypes['Resource']>;
1687
1727
  registersResolved: Array<ResolversParentTypes['BaseElement']>;
@@ -1700,8 +1740,15 @@ export type ResolversParentTypes = ResolversObject<{
1700
1740
  usedBy: Array<ResolversParentTypes['Resource']>;
1701
1741
  usedByDetailed: Array<ResolversParentTypes['MiddlewareResourceUsage']>;
1702
1742
  };
1703
- ResourceSubtreeBranch: ResourceSubtreeBranch;
1743
+ ResourceMiddlewareUsage: Omit<ResourceMiddlewareUsage, 'node'> & {
1744
+ node: ResolversParentTypes['ResourceMiddleware'];
1745
+ };
1746
+ ResourceSubtreeIdentityRequirement: ResourceSubtreeIdentityRequirement;
1747
+ ResourceSubtreeIdentityScope: ResourceSubtreeIdentityScope;
1748
+ ResourceSubtreeMiddlewareScope: ResourceSubtreeMiddlewareScope;
1704
1749
  ResourceSubtreePolicy: ResourceSubtreePolicy;
1750
+ ResourceSubtreeResourceBranch: ResourceSubtreeResourceBranch;
1751
+ ResourceSubtreeTaskBranch: ResourceSubtreeTaskBranch;
1705
1752
  ResourceSubtreeValidationBranch: ResourceSubtreeValidationBranch;
1706
1753
  RpcLaneSummary: RpcLaneSummary;
1707
1754
  RunDisposeOptions: RunDisposeOptions;
@@ -2085,15 +2132,17 @@ export type MiddlewareInterceptorOwnersSnapshotResolvers<ContextType = CustomGra
2085
2132
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2086
2133
  }>;
2087
2134
  export type MiddlewareResourceUsageResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['MiddlewareResourceUsage'] = ResolversParentTypes['MiddlewareResourceUsage']> = ResolversObject<{
2088
- config: Resolver<Maybe<ResolversTypes['ID']>, ParentType, ContextType>;
2135
+ config: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2089
2136
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2090
2137
  node: Resolver<ResolversTypes['Resource'], ParentType, ContextType>;
2091
2138
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2092
2139
  }>;
2093
2140
  export type MiddlewareTaskUsageResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['MiddlewareTaskUsage'] = ResolversParentTypes['MiddlewareTaskUsage']> = ResolversObject<{
2094
- config: Resolver<Maybe<ResolversTypes['ID']>, ParentType, ContextType>;
2141
+ config: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2095
2142
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2096
- node: Resolver<ResolversTypes['Task'], ParentType, ContextType>;
2143
+ node: Resolver<ResolversTypes['BaseElement'], ParentType, ContextType>;
2144
+ origin: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2145
+ subtreeOwnerId: Resolver<Maybe<ResolversTypes['ID']>, ParentType, ContextType>;
2097
2146
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2098
2147
  }>;
2099
2148
  export type QueryResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = ResolversObject<{
@@ -2145,7 +2194,7 @@ export type ResourceResolvers<ContextType = CustomGraphQLContext, ParentType ext
2145
2194
  meta: Resolver<Maybe<ResolversTypes['Meta']>, ParentType, ContextType>;
2146
2195
  middleware: Resolver<Array<ResolversTypes['String']>, ParentType, ContextType>;
2147
2196
  middlewareResolved: Resolver<Array<ResolversTypes['ResourceMiddleware']>, ParentType, ContextType>;
2148
- middlewareResolvedDetailed: Resolver<Array<ResolversTypes['TaskMiddlewareUsage']>, ParentType, ContextType>;
2197
+ middlewareResolvedDetailed: Resolver<Array<ResolversTypes['ResourceMiddlewareUsage']>, ParentType, ContextType>;
2149
2198
  overrides: Resolver<Array<ResolversTypes['String']>, ParentType, ContextType>;
2150
2199
  overridesResolved: Resolver<Array<ResolversTypes['BaseElement']>, ParentType, ContextType>;
2151
2200
  registeredBy: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -2210,19 +2259,48 @@ export type ResourceMiddlewareResolvers<ContextType = CustomGraphQLContext, Pare
2210
2259
  visibilityReason: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2211
2260
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2212
2261
  }>;
2213
- export type ResourceSubtreeBranchResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceSubtreeBranch'] = ResolversParentTypes['ResourceSubtreeBranch']> = ResolversObject<{
2214
- middleware: Resolver<Array<ResolversTypes['String']>, ParentType, ContextType>;
2215
- validatorCount: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
2262
+ export type ResourceMiddlewareUsageResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceMiddlewareUsage'] = ResolversParentTypes['ResourceMiddlewareUsage']> = ResolversObject<{
2263
+ config: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2264
+ id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2265
+ node: Resolver<ResolversTypes['ResourceMiddleware'], ParentType, ContextType>;
2266
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2267
+ }>;
2268
+ export type ResourceSubtreeIdentityRequirementResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceSubtreeIdentityRequirement'] = ResolversParentTypes['ResourceSubtreeIdentityRequirement']> = ResolversObject<{
2269
+ roles: Resolver<Array<ResolversTypes['String']>, ParentType, ContextType>;
2270
+ tenant: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
2271
+ user: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
2272
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2273
+ }>;
2274
+ export type ResourceSubtreeIdentityScopeResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceSubtreeIdentityScope'] = ResolversParentTypes['ResourceSubtreeIdentityScope']> = ResolversObject<{
2275
+ required: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
2276
+ tenant: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
2277
+ user: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
2278
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2279
+ }>;
2280
+ export type ResourceSubtreeMiddlewareScopeResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceSubtreeMiddlewareScope'] = ResolversParentTypes['ResourceSubtreeMiddlewareScope']> = ResolversObject<{
2281
+ identityScope: Resolver<Maybe<ResolversTypes['ResourceSubtreeIdentityScope']>, ParentType, ContextType>;
2216
2282
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2217
2283
  }>;
2218
2284
  export type ResourceSubtreePolicyResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceSubtreePolicy'] = ResolversParentTypes['ResourceSubtreePolicy']> = ResolversObject<{
2219
2285
  events: Resolver<Maybe<ResolversTypes['ResourceSubtreeValidationBranch']>, ParentType, ContextType>;
2220
2286
  hooks: Resolver<Maybe<ResolversTypes['ResourceSubtreeValidationBranch']>, ParentType, ContextType>;
2287
+ middleware: Resolver<Maybe<ResolversTypes['ResourceSubtreeMiddlewareScope']>, ParentType, ContextType>;
2221
2288
  resourceMiddleware: Resolver<Maybe<ResolversTypes['ResourceSubtreeValidationBranch']>, ParentType, ContextType>;
2222
- resources: Resolver<Maybe<ResolversTypes['ResourceSubtreeBranch']>, ParentType, ContextType>;
2289
+ resources: Resolver<Maybe<ResolversTypes['ResourceSubtreeResourceBranch']>, ParentType, ContextType>;
2223
2290
  tags: Resolver<Maybe<ResolversTypes['ResourceSubtreeValidationBranch']>, ParentType, ContextType>;
2224
2291
  taskMiddleware: Resolver<Maybe<ResolversTypes['ResourceSubtreeValidationBranch']>, ParentType, ContextType>;
2225
- tasks: Resolver<Maybe<ResolversTypes['ResourceSubtreeBranch']>, ParentType, ContextType>;
2292
+ tasks: Resolver<Maybe<ResolversTypes['ResourceSubtreeTaskBranch']>, ParentType, ContextType>;
2293
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2294
+ }>;
2295
+ export type ResourceSubtreeResourceBranchResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceSubtreeResourceBranch'] = ResolversParentTypes['ResourceSubtreeResourceBranch']> = ResolversObject<{
2296
+ middleware: Resolver<Array<ResolversTypes['String']>, ParentType, ContextType>;
2297
+ validatorCount: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
2298
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2299
+ }>;
2300
+ export type ResourceSubtreeTaskBranchResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceSubtreeTaskBranch'] = ResolversParentTypes['ResourceSubtreeTaskBranch']> = ResolversObject<{
2301
+ identity: Resolver<Array<ResolversTypes['ResourceSubtreeIdentityRequirement']>, ParentType, ContextType>;
2302
+ middleware: Resolver<Array<ResolversTypes['String']>, ParentType, ContextType>;
2303
+ validatorCount: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
2226
2304
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2227
2305
  }>;
2228
2306
  export type ResourceSubtreeValidationBranchResolvers<ContextType = CustomGraphQLContext, ParentType extends ResolversParentTypes['ResourceSubtreeValidationBranch'] = ResolversParentTypes['ResourceSubtreeValidationBranch']> = ResolversObject<{
@@ -2402,6 +2480,8 @@ export type TaskMiddlewareUsageResolvers<ContextType = CustomGraphQLContext, Par
2402
2480
  config: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2403
2481
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2404
2482
  node: Resolver<ResolversTypes['TaskMiddleware'], ParentType, ContextType>;
2483
+ origin: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2484
+ subtreeOwnerId: Resolver<Maybe<ResolversTypes['ID']>, ParentType, ContextType>;
2405
2485
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2406
2486
  }>;
2407
2487
  export type Resolvers<ContextType = CustomGraphQLContext> = ResolversObject<{
@@ -2450,8 +2530,13 @@ export type Resolvers<ContextType = CustomGraphQLContext> = ResolversObject<{
2450
2530
  ResourceHealthTotals: ResourceHealthTotalsResolvers<ContextType>;
2451
2531
  ResourceIsolation: ResourceIsolationResolvers<ContextType>;
2452
2532
  ResourceMiddleware: ResourceMiddlewareResolvers<ContextType>;
2453
- ResourceSubtreeBranch: ResourceSubtreeBranchResolvers<ContextType>;
2533
+ ResourceMiddlewareUsage: ResourceMiddlewareUsageResolvers<ContextType>;
2534
+ ResourceSubtreeIdentityRequirement: ResourceSubtreeIdentityRequirementResolvers<ContextType>;
2535
+ ResourceSubtreeIdentityScope: ResourceSubtreeIdentityScopeResolvers<ContextType>;
2536
+ ResourceSubtreeMiddlewareScope: ResourceSubtreeMiddlewareScopeResolvers<ContextType>;
2454
2537
  ResourceSubtreePolicy: ResourceSubtreePolicyResolvers<ContextType>;
2538
+ ResourceSubtreeResourceBranch: ResourceSubtreeResourceBranchResolvers<ContextType>;
2539
+ ResourceSubtreeTaskBranch: ResourceSubtreeTaskBranchResolvers<ContextType>;
2455
2540
  ResourceSubtreeValidationBranch: ResourceSubtreeValidationBranchResolvers<ContextType>;
2456
2541
  RpcLaneSummary: RpcLaneSummaryResolvers<ContextType>;
2457
2542
  RunDisposeOptions: RunDisposeOptionsResolvers<ContextType>;
package/dist/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import { dev } from "./resources/dev.resource";
2
+ import { exportDocs } from "./exportDocs";
2
3
  export type { ServerConfig, ServerInstance } from "./resources/server.resource";
3
4
  export type { CustomGraphQLContext } from "./schema/context";
4
5
  export type { CoverageDetails, CoverageService, CoverageSummary, LineCoverage, } from "./resources/coverage.resource";
5
6
  export type { EmissionEntry, ErrorEntry, Live, LogEntry, LogLevel, RunRecord, } from "./resources/live.resource";
6
7
  export type { EvalResult, InvokeEventResult, InvokeResult, ISwapManager, SwapResult, SwappedTask, } from "./resources/swap.resource";
7
- export { Introspector, type SerializedIntrospector, } from "./resources/models/Introspector";
8
+ export { Introspector, type InterceptorOwnersSnapshot, type MiddlewareInterceptorOwnerSnapshot, type SerializedIntrospector, } from "./resources/models/Introspector";
9
+ export type { ExportDocsOptions, ExportDocsResult } from "./exportDocs";
8
10
  export * from "./schema/model";
9
11
  export declare const resources: {
10
12
  server: import("@bluelibs/runner").IResource<import("./resources/server.resource").ServerConfig, Promise<import("./resources/server.resource").ServerInstance>, {
@@ -128,3 +130,4 @@ export declare const resources: {
128
130
  }, import("@bluelibs/runner").ResourceTagType[], import("@bluelibs/runner").ResourceMiddlewareAttachmentType[]>;
129
131
  };
130
132
  export { dev };
133
+ export { exportDocs };
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.dev = exports.resources = exports.Introspector = void 0;
17
+ exports.exportDocs = exports.dev = exports.resources = exports.Introspector = void 0;
18
18
  const server_resource_1 = require("./resources/server.resource");
19
19
  const introspector_resource_1 = require("./resources/introspector.resource");
20
20
  const live_resource_1 = require("./resources/live.resource");
@@ -24,6 +24,8 @@ const graphql_accumulator_resource_1 = require("./resources/graphql-accumulator.
24
24
  const dev_resource_1 = require("./resources/dev.resource");
25
25
  Object.defineProperty(exports, "dev", { enumerable: true, get: function () { return dev_resource_1.dev; } });
26
26
  const coverage_resource_1 = require("./resources/coverage.resource");
27
+ const exportDocs_1 = require("./exportDocs");
28
+ Object.defineProperty(exports, "exportDocs", { enumerable: true, get: function () { return exportDocs_1.exportDocs; } });
27
29
  var Introspector_1 = require("./resources/models/Introspector");
28
30
  Object.defineProperty(exports, "Introspector", { enumerable: true, get: function () { return Introspector_1.Introspector; } });
29
31
  __exportStar(require("./schema/model"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iEAA6D;AAC7D,6EAAiE;AACjE,6DAAiD;AACjD,uEAA2D;AAC3D,6DAAwD;AACxD,2FAAmE;AACnE,2DAA+C;AAgDtC,oFAhDA,kBAAG,OAgDA;AA/CZ,qEAAyD;AA0BzD,gEAGyC;AAFvC,4GAAA,YAAY,OAAA;AAGd,iDAA+B;AAE/B,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;AAEjC,wEAAwE;AACxE,qEAAqE;AACxD,QAAA,SAAS,GAAG;IACvB,MAAM,EAAE,gCAAc;IACtB,YAAY,EAAZ,oCAAY;IACZ,IAAI,EAAJ,oBAAI;IACJ,SAAS,EAAT,8BAAS;IACT,WAAW,EAAX,2BAAW;IACX,OAAO,EAAP,sCAAO;IACP,GAAG,EAAH,kBAAG;IACH,QAAQ,EAAR,4BAAQ;CACT,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iEAA6D;AAC7D,6EAAiE;AACjE,6DAAiD;AACjD,uEAA2D;AAC3D,6DAAwD;AACxD,2FAAmE;AACnE,2DAA+C;AAoDtC,oFApDA,kBAAG,OAoDA;AAnDZ,qEAAyD;AACzD,6CAA0C;AAmDjC,2FAnDA,uBAAU,OAmDA;AAzBnB,gEAKyC;AAJvC,4GAAA,YAAY,OAAA;AAMd,iDAA+B;AAE/B,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;AAEjC,wEAAwE;AACxE,qEAAqE;AACxD,QAAA,SAAS,GAAG;IACvB,MAAM,EAAE,gCAAc;IACtB,YAAY,EAAZ,oCAAY;IACZ,IAAI,EAAJ,oBAAI;IACJ,SAAS,EAAT,8BAAS;IACT,WAAW,EAAX,2BAAW;IACX,OAAO,EAAP,sCAAO;IACP,GAAG,EAAH,kBAAG;IACH,QAAQ,EAAR,4BAAQ;CACT,CAAC"}
package/dist/mcp/env.d.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  export declare const ENDPOINT: string | undefined;
2
+ export declare const SNAPSHOT_FILE: string | undefined;
2
3
  export declare const ALLOW_MUTATIONS: boolean;
3
4
  export declare function parseHeadersFromEnv(): Record<string, string>;
4
5
  export declare function getEndpoint(): string | undefined;
6
+ export declare function getSnapshotFile(): string | undefined;
5
7
  export declare function assertEndpoint(): string;
8
+ export declare function assertSnapshotFile(): string;
9
+ export declare function getGraphqlSourceDescription(): string | undefined;
10
+ export declare function assertGraphqlSourceDescription(): string;
package/dist/mcp/env.js CHANGED
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ALLOW_MUTATIONS = exports.ENDPOINT = void 0;
3
+ exports.ALLOW_MUTATIONS = exports.SNAPSHOT_FILE = exports.ENDPOINT = void 0;
4
4
  exports.parseHeadersFromEnv = parseHeadersFromEnv;
5
5
  exports.getEndpoint = getEndpoint;
6
+ exports.getSnapshotFile = getSnapshotFile;
6
7
  exports.assertEndpoint = assertEndpoint;
8
+ exports.assertSnapshotFile = assertSnapshotFile;
9
+ exports.getGraphqlSourceDescription = getGraphqlSourceDescription;
10
+ exports.assertGraphqlSourceDescription = assertGraphqlSourceDescription;
7
11
  exports.ENDPOINT = process.env.ENDPOINT || process.env.GRAPHQL_ENDPOINT;
12
+ exports.SNAPSHOT_FILE = process.env.SNAPSHOT_FILE;
8
13
  exports.ALLOW_MUTATIONS = (process.env.ALLOW_MUTATIONS || "").toLowerCase() === "true";
9
14
  function parseHeadersFromEnv() {
10
15
  const headersEnv = process.env.HEADERS;
@@ -31,6 +36,9 @@ function parseHeadersFromEnv() {
31
36
  function getEndpoint() {
32
37
  return process.env.ENDPOINT || process.env.GRAPHQL_ENDPOINT;
33
38
  }
39
+ function getSnapshotFile() {
40
+ return process.env.SNAPSHOT_FILE;
41
+ }
34
42
  function assertEndpoint() {
35
43
  const endpoint = getEndpoint();
36
44
  if (!endpoint) {
@@ -38,4 +46,25 @@ function assertEndpoint() {
38
46
  }
39
47
  return endpoint;
40
48
  }
49
+ function assertSnapshotFile() {
50
+ const snapshotFile = getSnapshotFile();
51
+ if (!snapshotFile) {
52
+ throw new Error("SNAPSHOT_FILE env variable is required to use the snapshot-backed MCP server");
53
+ }
54
+ return snapshotFile;
55
+ }
56
+ function getGraphqlSourceDescription() {
57
+ const snapshotFile = getSnapshotFile();
58
+ if (snapshotFile) {
59
+ return `snapshot:${snapshotFile}`;
60
+ }
61
+ return getEndpoint();
62
+ }
63
+ function assertGraphqlSourceDescription() {
64
+ const source = getGraphqlSourceDescription();
65
+ if (!source) {
66
+ throw new Error("Set ENDPOINT/GRAPHQL_ENDPOINT for a live server or SNAPSHOT_FILE for an exported snapshot.");
67
+ }
68
+ return source;
69
+ }
41
70
  //# sourceMappingURL=env.js.map