@glubean/scanner 0.1.35 → 0.2.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.
@@ -2,12 +2,18 @@
2
2
  * Runtime contract extraction — dynamically imports .contract.ts modules
3
3
  * and extracts metadata from exported contract objects.
4
4
  *
5
- * This is the shared extraction layer used by scanner, CLI, and MCP.
6
- * Produces NormalizedContractMeta a protocol-agnostic contract model.
5
+ * Scanner is duck-typing-only (no @glubean/sdk dependency). We recognize
6
+ * shapes without importing types.
7
7
  *
8
- * Supports:
9
- * - HttpContract (from contract.http.with())
10
- * - ProtocolContract (from contract.register() with adapter v2)
8
+ * Output:
9
+ * - NormalizedContractMeta — JSON-safe contract projection (mirrors
10
+ * ExtractedContractProjection from sdk, plus `exportName`)
11
+ * - NormalizedFlowMeta — JSON-safe flow projection (mirrors
12
+ * ExtractedFlowProjection, plus `exportName`)
13
+ *
14
+ * Schema conversion: anywhere scanner sees a value with `.toJSONSchema()`
15
+ * it invokes that method. This handles Zod schemas embedded inside
16
+ * adapter-defined `schemas` opaque blobs without knowing the protocol.
11
17
  */
12
18
  /** Case lifecycle. */
13
19
  export type CaseLifecycle = "active" | "deferred" | "deprecated";
@@ -30,7 +36,11 @@ export interface NormalizedParamMeta {
30
36
  required?: boolean;
31
37
  deprecated?: boolean;
32
38
  }
33
- /** Normalized case metadata. Protocol-agnostic. */
39
+ /**
40
+ * Protocol-agnostic case metadata. Mirrors sdk's `ExtractedCaseMeta`.
41
+ * `schemas` and `meta` are adapter-defined JSON-safe blobs; scanner treats
42
+ * them as opaque but converts any embedded `.toJSONSchema()` methods.
43
+ */
34
44
  export interface NormalizedCaseMeta {
35
45
  key: string;
36
46
  description?: string;
@@ -40,129 +50,106 @@ export interface NormalizedCaseMeta {
40
50
  deprecatedReason?: string;
41
51
  requires?: CaseRequires;
42
52
  defaultRun?: CaseDefaultRun;
43
- schemaMount?: string;
44
- /** Protocol-specific expectations. HTTP: { status: 200 }, gRPC: { code: 0 } */
45
- protocolExpect?: Record<string, unknown>;
46
- responseSchema: unknown | null;
47
- /** Response headers schema (OpenAPI + runtime validation) */
48
- responseHeaders?: unknown | null;
49
- /** Response content-type (HTTP-specific) */
50
- responseContentType?: string;
51
- /** Named response examples for OpenAPI docs */
52
- examples?: Record<string, NormalizedExample>;
53
- /** Per-path-param metadata */
54
- paramSchemas?: Record<string, NormalizedParamMeta>;
55
- /** Per-query-param metadata */
56
- querySchemas?: Record<string, NormalizedParamMeta>;
57
- /** Fully merged extensions (defaults < contract < case). Keys are x-* OpenAPI extensions. */
53
+ tags?: string[];
58
54
  extensions?: Record<string, unknown>;
55
+ /** Adapter-defined payload shape (opaque to scanner). */
56
+ schemas?: unknown;
57
+ /** Adapter-defined free-form meta (opaque). */
58
+ meta?: unknown;
59
59
  }
60
- /** Normalized contract metadata. Protocol-agnostic. Evolved from ExtractedContract. */
60
+ /**
61
+ * Protocol-agnostic contract metadata. Mirrors `ExtractedContractProjection`.
62
+ */
61
63
  export interface NormalizedContractMeta {
62
64
  id: string;
63
65
  exportName: string;
64
66
  protocol: string;
65
- /** Protocol-agnostic target. HTTP: "GET /users", gRPC: "Greeter/SayHello" */
67
+ /** Protocol-agnostic target (HTTP: "POST /users"). */
66
68
  target: string;
67
69
  description?: string;
68
70
  feature?: string;
69
71
  instanceName?: string;
70
- security?: unknown;
71
- schemaMount?: string;
72
- requestSchema: unknown | null;
73
- /** Request content type (HTTP-specific; default application/json) */
74
- requestContentType?: string;
75
- /** Contract-level deprecation reason (propagates to all cases) */
72
+ tags?: string[];
76
73
  deprecated?: string;
77
- /** Contract-level merged extensions (defaults < contract). Keys are x-* OpenAPI extensions. */
78
74
  extensions?: Record<string, unknown>;
79
- protocolMeta?: Record<string, unknown>;
75
+ schemas?: unknown;
76
+ meta?: unknown;
80
77
  cases: NormalizedCaseMeta[];
81
78
  }
82
79
  /**
83
- * @deprecated Alias for NormalizedContractMeta. Use NormalizedContractMeta directly.
80
+ * @deprecated Alias for NormalizedContractMeta. Use directly.
84
81
  */
85
82
  export type ExtractedContract = NormalizedContractMeta;
86
- /** Result of extracting contracts from one or more files. */
87
- export interface ExtractionResult {
88
- contracts: NormalizedContractMeta[];
89
- errors: Array<{
90
- file: string;
91
- error: string;
92
- }>;
83
+ /**
84
+ * Single step in a flow projection. Discriminated by `kind`.
85
+ */
86
+ export type NormalizedFlowStep = {
87
+ kind: "contract-call";
88
+ name?: string;
89
+ contractId: string;
90
+ caseKey: string;
91
+ protocol: string;
92
+ target: string;
93
+ inputs?: NormalizedFieldMapping[];
94
+ outputs?: NormalizedFieldMapping[];
95
+ } | {
96
+ kind: "compute";
97
+ name?: string;
98
+ reads: string[];
99
+ writes: string[];
100
+ };
101
+ export interface NormalizedFieldMapping {
102
+ target: string;
103
+ source: {
104
+ kind: "path";
105
+ path: string;
106
+ } | {
107
+ kind: "literal";
108
+ value: unknown;
109
+ } | {
110
+ kind: "pass-through";
111
+ };
93
112
  }
94
113
  /**
95
- * Check if a value looks like an HttpContract (duck-typing).
96
- * HttpContract extends Array<Test> and has id + endpoint.
114
+ * Protocol-agnostic flow metadata. Mirrors `ExtractedFlowProjection`.
97
115
  */
98
- export declare function isHttpContract(val: unknown): val is {
116
+ export interface NormalizedFlowMeta {
99
117
  id: string;
100
- endpoint: string;
118
+ exportName: string;
119
+ protocol: "flow";
101
120
  description?: string;
102
- feature?: string;
103
- instanceName?: string;
104
- security?: unknown;
105
- deprecated?: string;
121
+ tags?: string[];
106
122
  extensions?: Record<string, unknown>;
107
- requestContentType?: string;
108
- request?: {
109
- toJSONSchema?: () => unknown;
110
- };
111
- _caseSchemas?: Record<string, {
112
- expectStatus?: number;
113
- responseSchema?: {
114
- toJSONSchema?: () => unknown;
115
- };
116
- responseHeaders?: {
117
- toJSONSchema?: () => unknown;
118
- };
119
- responseContentType?: string;
120
- example?: unknown;
121
- examples?: Record<string, {
122
- value: unknown;
123
- summary?: string;
124
- description?: string;
125
- }>;
126
- paramSchemas?: Record<string, {
127
- schema?: {
128
- toJSONSchema?: () => unknown;
129
- };
130
- description?: string;
131
- required?: boolean;
132
- deprecated?: boolean;
133
- }>;
134
- querySchemas?: Record<string, {
135
- schema?: {
136
- toJSONSchema?: () => unknown;
137
- };
138
- description?: string;
139
- required?: boolean;
140
- deprecated?: boolean;
141
- }>;
142
- description?: string;
143
- deferred?: string;
144
- deprecated?: string;
145
- severity?: string;
146
- lifecycle?: string;
147
- requires?: string;
148
- defaultRun?: string;
149
- extensions?: Record<string, unknown>;
123
+ setupDynamic?: true;
124
+ steps: NormalizedFlowStep[];
125
+ }
126
+ /** Result of extracting contracts/flows from one or more files. */
127
+ export interface ExtractionResult {
128
+ contracts: NormalizedContractMeta[];
129
+ flows?: NormalizedFlowMeta[];
130
+ errors: Array<{
131
+ file: string;
132
+ error: string;
150
133
  }>;
151
- };
134
+ }
152
135
  /**
153
- * Check if a value looks like a ProtocolContract (duck-typing).
154
- * ProtocolContract extends Array<Test> and has _projection with protocol + target.
136
+ * Check if a value looks like a ProtocolContract.
137
+ * ProtocolContract extends Array<Test> and has `_projection` with protocol + target.
138
+ * (HTTP contracts now go through the same shape since the rewrite.)
155
139
  */
156
140
  export declare function isProtocolContract(val: unknown): val is {
157
141
  _projection: {
142
+ id?: string;
158
143
  protocol: string;
159
144
  target: string;
160
145
  description?: string;
161
146
  feature?: string;
162
147
  instanceName?: string;
163
- security?: unknown;
164
- schemaMount?: string;
165
- requestSchema?: unknown;
148
+ tags?: string[];
149
+ deprecated?: string;
150
+ extensions?: Record<string, unknown>;
151
+ schemas?: unknown;
152
+ meta?: unknown;
166
153
  cases: Array<{
167
154
  key: string;
168
155
  description?: string;
@@ -172,28 +159,68 @@ export declare function isProtocolContract(val: unknown): val is {
172
159
  deprecatedReason?: string;
173
160
  requires?: string;
174
161
  defaultRun?: string;
175
- schemaMount?: string;
176
- protocolExpect?: Record<string, unknown>;
177
- responseSchema?: unknown;
178
- protocolMeta?: Record<string, unknown>;
162
+ tags?: string[];
163
+ extensions?: Record<string, unknown>;
164
+ schemas?: unknown;
165
+ meta?: unknown;
179
166
  }>;
180
- protocolMeta?: Record<string, unknown>;
181
167
  };
182
168
  };
183
169
  /**
184
- * Try to convert a SchemaLike to JSON Schema using Zod v4's toJSONSchema.
185
- * Uses the schema's own instance method to avoid cross-instance issues.
186
- * Returns null if the schema is not a Zod type or conversion fails.
170
+ * Check if a value looks like a FlowContract.
171
+ * FlowContract extends Array<Test> and has `_flow.protocol === "flow"`.
172
+ *
173
+ * May also carry `_extracted` — a pre-computed ExtractedFlowProjection
174
+ * populated by the SDK's flow builder via `normalizeFlow(_flow)`. When
175
+ * present it is the source of truth for scanner output (full field
176
+ * mappings, compute reads/writes). When absent we degrade to duck-typing
177
+ * `_flow` directly (no lens proxy tracing in scanner since it is
178
+ * dependency-free).
179
+ */
180
+ export declare function isFlowContract(val: unknown): val is {
181
+ _flow: {
182
+ id: string;
183
+ protocol: "flow";
184
+ description?: string;
185
+ tags?: string[];
186
+ extensions?: Record<string, unknown>;
187
+ setup?: (...args: any[]) => unknown;
188
+ teardown?: (...args: any[]) => unknown;
189
+ steps: Array<any>;
190
+ };
191
+ _extracted?: {
192
+ id: string;
193
+ protocol: "flow";
194
+ description?: string;
195
+ tags?: string[];
196
+ extensions?: Record<string, unknown>;
197
+ setupDynamic?: true;
198
+ steps: Array<any>;
199
+ };
200
+ };
201
+ /**
202
+ * Convert a live schema (Zod/Valibot/etc.) to a JSON Schema plain object.
203
+ * Falls back to passing through or null.
187
204
  */
188
205
  export declare function schemaToJsonSchema(schema: unknown): unknown | null;
189
206
  /**
190
- * Extract contracts from a single file by dynamic import.
191
- * Supports HttpContract (.with()) and ProtocolContract (register() v2).
207
+ * Recursively walk a value converting any embedded Zod/valibot schemas
208
+ * (detected by `.toJSONSchema()` method) to plain JSON Schema objects.
209
+ * Other values pass through as-is.
210
+ *
211
+ * Used by scanner to produce JSON-safe output even when adapter didn't run
212
+ * `.normalize()` (e.g. when we read `_projection` directly).
213
+ */
214
+ export declare function deepNormalizeSchemas(value: unknown, depth?: number): unknown;
215
+ /**
216
+ * Extract contracts + flows from a single file by dynamic import.
217
+ * One file's import failure does not block others.
192
218
  */
193
219
  export declare function extractContractFromFile(filePath: string): Promise<ExtractionResult>;
194
220
  /**
195
- * Extract contracts from all .contract.{ts,js,mjs} files in a project.
196
- * Each file is imported independently — one file's failure does not block others.
221
+ * Extract contracts + flows from all recognized files in a project.
197
222
  */
198
223
  export declare function extractContractsFromProject(dir: string): Promise<ExtractionResult>;
224
+ /** @deprecated Removed in v0.2 — HTTP now goes through isProtocolContract. */
225
+ export declare function isHttpContract(_val: unknown): never;
199
226
  //# sourceMappingURL=contract-extraction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract-extraction.d.ts","sourceRoot":"","sources":["../src/contract-extraction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-extraction.d.ts","sourceRoot":"","sources":["../src/contract-extraction.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,18 @@
2
2
  * Runtime contract extraction — dynamically imports .contract.ts modules
3
3
  * and extracts metadata from exported contract objects.
4
4
  *
5
- * This is the shared extraction layer used by scanner, CLI, and MCP.
6
- * Produces NormalizedContractMeta a protocol-agnostic contract model.
5
+ * Scanner is duck-typing-only (no @glubean/sdk dependency). We recognize
6
+ * shapes without importing types.
7
7
  *
8
- * Supports:
9
- * - HttpContract (from contract.http.with())
10
- * - ProtocolContract (from contract.register() with adapter v2)
8
+ * Output:
9
+ * - NormalizedContractMeta — JSON-safe contract projection (mirrors
10
+ * ExtractedContractProjection from sdk, plus `exportName`)
11
+ * - NormalizedFlowMeta — JSON-safe flow projection (mirrors
12
+ * ExtractedFlowProjection, plus `exportName`)
13
+ *
14
+ * Schema conversion: anywhere scanner sees a value with `.toJSONSchema()`
15
+ * it invokes that method. This handles Zod schemas embedded inside
16
+ * adapter-defined `schemas` opaque blobs without knowing the protocol.
11
17
  */
12
18
  import { pathToFileURL } from "node:url";
13
19
  import { resolve, basename } from "node:path";
@@ -16,32 +22,41 @@ import { readdirSync, statSync } from "node:fs";
16
22
  // Duck typing
17
23
  // =============================================================================
18
24
  /**
19
- * Check if a value looks like an HttpContract (duck-typing).
20
- * HttpContract extends Array<Test> and has id + endpoint.
21
- */
22
- export function isHttpContract(val) {
23
- return (Array.isArray(val) &&
24
- typeof val.id === "string" &&
25
- typeof val.endpoint === "string");
26
- }
27
- /**
28
- * Check if a value looks like a ProtocolContract (duck-typing).
29
- * ProtocolContract extends Array<Test> and has _projection with protocol + target.
25
+ * Check if a value looks like a ProtocolContract.
26
+ * ProtocolContract extends Array<Test> and has `_projection` with protocol + target.
27
+ * (HTTP contracts now go through the same shape since the rewrite.)
30
28
  */
31
29
  export function isProtocolContract(val) {
32
30
  return (Array.isArray(val) &&
33
31
  typeof val._projection === "object" &&
34
32
  val._projection !== null &&
35
33
  typeof val._projection.protocol === "string" &&
36
- typeof val._projection.target === "string");
34
+ typeof val._projection.target === "string" &&
35
+ val._projection.protocol !== "flow");
36
+ }
37
+ /**
38
+ * Check if a value looks like a FlowContract.
39
+ * FlowContract extends Array<Test> and has `_flow.protocol === "flow"`.
40
+ *
41
+ * May also carry `_extracted` — a pre-computed ExtractedFlowProjection
42
+ * populated by the SDK's flow builder via `normalizeFlow(_flow)`. When
43
+ * present it is the source of truth for scanner output (full field
44
+ * mappings, compute reads/writes). When absent we degrade to duck-typing
45
+ * `_flow` directly (no lens proxy tracing in scanner since it is
46
+ * dependency-free).
47
+ */
48
+ export function isFlowContract(val) {
49
+ return (Array.isArray(val) &&
50
+ typeof val._flow === "object" &&
51
+ val._flow !== null &&
52
+ val._flow.protocol === "flow");
37
53
  }
38
54
  // =============================================================================
39
- // Schema conversion
55
+ // Schema conversion — embedded .toJSONSchema() recursive walk
40
56
  // =============================================================================
41
57
  /**
42
- * Try to convert a SchemaLike to JSON Schema using Zod v4's toJSONSchema.
43
- * Uses the schema's own instance method to avoid cross-instance issues.
44
- * Returns null if the schema is not a Zod type or conversion fails.
58
+ * Convert a live schema (Zod/Valibot/etc.) to a JSON Schema plain object.
59
+ * Falls back to passing through or null.
45
60
  */
46
61
  export function schemaToJsonSchema(schema) {
47
62
  if (!schema || typeof schema !== "object")
@@ -56,104 +71,55 @@ export function schemaToJsonSchema(schema) {
56
71
  }
57
72
  return null;
58
73
  }
59
- // =============================================================================
60
- // Mapping functions
61
- // =============================================================================
62
74
  /**
63
- * Map an HttpContract to NormalizedContractMeta.
75
+ * Recursively walk a value converting any embedded Zod/valibot schemas
76
+ * (detected by `.toJSONSchema()` method) to plain JSON Schema objects.
77
+ * Other values pass through as-is.
78
+ *
79
+ * Used by scanner to produce JSON-safe output even when adapter didn't run
80
+ * `.normalize()` (e.g. when we read `_projection` directly).
64
81
  */
65
- function httpContractToNormalized(value, exportName) {
66
- const cases = [];
67
- if (value._caseSchemas) {
68
- for (const [key, meta] of Object.entries(value._caseSchemas)) {
69
- // Lifecycle normalization
70
- const lifecycle = meta.deprecated ? "deprecated" :
71
- meta.deferred ? "deferred" :
72
- "active";
73
- // Map per-param metadata (convert schema objects to JSON Schema)
74
- const mapParamMeta = (m) => {
75
- if (!m)
76
- return undefined;
77
- const result = {};
78
- for (const [k, v] of Object.entries(m)) {
79
- result[k] = {
80
- schema: schemaToJsonSchema(v.schema),
81
- description: v.description,
82
- required: v.required,
83
- deprecated: v.deprecated,
84
- };
85
- }
86
- return result;
87
- };
88
- // Normalize examples: prefer meta.examples, fall back to meta.example (single)
89
- let examples;
90
- if (meta.examples) {
91
- examples = {};
92
- for (const [name, ex] of Object.entries(meta.examples)) {
93
- examples[name] = { value: ex.value, summary: ex.summary, description: ex.description };
94
- }
95
- }
96
- else if (meta.example !== undefined) {
97
- examples = { default: { value: meta.example } };
98
- }
99
- cases.push({
100
- key,
101
- description: meta.description,
102
- lifecycle,
103
- severity: meta.severity ?? "warning",
104
- deferredReason: meta.deferred,
105
- deprecatedReason: meta.deprecated,
106
- requires: meta.requires,
107
- defaultRun: meta.defaultRun,
108
- schemaMount: "response.body",
109
- protocolExpect: meta.expectStatus != null
110
- ? { status: meta.expectStatus }
111
- : undefined,
112
- responseSchema: schemaToJsonSchema(meta.responseSchema),
113
- responseHeaders: schemaToJsonSchema(meta.responseHeaders),
114
- responseContentType: meta.responseContentType,
115
- examples,
116
- paramSchemas: mapParamMeta(meta.paramSchemas),
117
- querySchemas: mapParamMeta(meta.querySchemas),
118
- extensions: meta.extensions,
119
- });
120
- }
82
+ export function deepNormalizeSchemas(value, depth = 0) {
83
+ if (depth > 20)
84
+ return value;
85
+ if (value == null)
86
+ return value;
87
+ if (typeof value !== "object")
88
+ return value;
89
+ // Has toJSONSchema? Convert it.
90
+ if (typeof value.toJSONSchema === "function") {
91
+ const converted = schemaToJsonSchema(value);
92
+ if (converted != null)
93
+ return converted;
94
+ return null;
121
95
  }
122
- return {
123
- id: value.id,
124
- exportName,
125
- protocol: "http",
126
- target: value.endpoint,
127
- description: value.description,
128
- feature: value.feature,
129
- instanceName: value.instanceName,
130
- security: value.security,
131
- schemaMount: "response.body",
132
- requestSchema: schemaToJsonSchema(value.request),
133
- requestContentType: value.requestContentType,
134
- deprecated: value.deprecated,
135
- extensions: value.extensions,
136
- cases,
137
- };
96
+ if (Array.isArray(value)) {
97
+ return value.map((v) => deepNormalizeSchemas(v, depth + 1));
98
+ }
99
+ const out = {};
100
+ for (const [k, v] of Object.entries(value)) {
101
+ out[k] = deepNormalizeSchemas(v, depth + 1);
102
+ }
103
+ return out;
138
104
  }
139
- /**
140
- * Map a ProtocolContract's _projection to NormalizedContractMeta.
141
- */
105
+ // =============================================================================
106
+ // Mapping: projection NormalizedContractMeta
107
+ // =============================================================================
142
108
  function protocolContractToNormalized(value, exportName) {
143
109
  const proj = value._projection;
144
110
  return {
145
- id: proj.id ?? exportName, // prefer injected id, fall back to export name
111
+ id: proj.id ?? exportName,
146
112
  exportName,
147
113
  protocol: proj.protocol,
148
114
  target: proj.target,
149
115
  description: proj.description,
150
116
  feature: proj.feature,
151
117
  instanceName: proj.instanceName,
152
- security: proj.security,
153
- schemaMount: proj.schemaMount,
154
- // Normalize schemas: if adapter returned live schema objects, convert to JSON Schema
155
- requestSchema: schemaToJsonSchema(proj.requestSchema) ?? proj.requestSchema ?? null,
156
- protocolMeta: proj.protocolMeta,
118
+ tags: proj.tags,
119
+ deprecated: proj.deprecated,
120
+ extensions: proj.extensions,
121
+ schemas: proj.schemas != null ? deepNormalizeSchemas(proj.schemas) : undefined,
122
+ meta: proj.meta,
157
123
  cases: (proj.cases ?? []).map((c) => ({
158
124
  key: c.key,
159
125
  description: c.description,
@@ -163,29 +129,122 @@ function protocolContractToNormalized(value, exportName) {
163
129
  deprecatedReason: c.deprecatedReason,
164
130
  requires: c.requires,
165
131
  defaultRun: c.defaultRun,
166
- schemaMount: c.schemaMount,
167
- protocolExpect: c.protocolExpect,
168
- // Normalize: try JSON Schema conversion, fall back to raw value
169
- responseSchema: schemaToJsonSchema(c.responseSchema) ?? c.responseSchema ?? null,
132
+ tags: c.tags,
133
+ extensions: c.extensions,
134
+ schemas: c.schemas != null ? deepNormalizeSchemas(c.schemas) : undefined,
135
+ meta: c.meta,
170
136
  })),
171
137
  };
172
138
  }
139
+ function flowContractToNormalized(value, exportName) {
140
+ // Prefer the pre-computed extracted projection. The SDK's flow builder
141
+ // populates `_extracted` via `normalizeFlow(_flow)` — this path carries
142
+ // full FieldMapping data for `.step()` lenses and reads/writes for
143
+ // `.compute()` nodes. Scanner just attaches `exportName`.
144
+ if (value._extracted) {
145
+ const ex = value._extracted;
146
+ return {
147
+ id: ex.id,
148
+ exportName,
149
+ protocol: "flow",
150
+ description: ex.description,
151
+ tags: ex.tags,
152
+ extensions: ex.extensions,
153
+ setupDynamic: ex.setupDynamic,
154
+ steps: (ex.steps ?? []).map((s) => {
155
+ if (s.kind === "compute") {
156
+ return {
157
+ kind: "compute",
158
+ name: s.name,
159
+ reads: s.reads ?? [],
160
+ writes: s.writes ?? [],
161
+ };
162
+ }
163
+ return {
164
+ kind: "contract-call",
165
+ name: s.name,
166
+ contractId: s.contractId ?? "",
167
+ caseKey: s.caseKey ?? "",
168
+ protocol: s.protocol ?? "",
169
+ target: s.target ?? "",
170
+ inputs: s.inputs,
171
+ outputs: s.outputs,
172
+ };
173
+ }),
174
+ };
175
+ }
176
+ // Fallback: duck-type `_flow` directly. Lens tracing is unavailable
177
+ // here (scanner is dep-free); callers downstream lose FieldMappings +
178
+ // compute reads/writes. In practice this only fires for flows
179
+ // constructed outside the canonical SDK path (e.g. test fixtures).
180
+ const f = value._flow;
181
+ return {
182
+ id: f.id,
183
+ exportName,
184
+ protocol: "flow",
185
+ description: f.description,
186
+ tags: f.tags,
187
+ extensions: f.extensions,
188
+ setupDynamic: f.setup ? true : undefined,
189
+ steps: (f.steps ?? []).map((s) => {
190
+ if (s.kind === "compute") {
191
+ return { kind: "compute", name: s.name, reads: [], writes: [] };
192
+ }
193
+ return {
194
+ kind: "contract-call",
195
+ name: s.name,
196
+ contractId: s.contract?._projection?.id ?? s.ref?.contractId ?? "",
197
+ caseKey: s.caseKey ?? s.ref?.caseKey ?? "",
198
+ protocol: s.ref?.protocol ?? "",
199
+ target: s.ref?.target ?? "",
200
+ };
201
+ }),
202
+ };
203
+ }
204
+ // =============================================================================
205
+ // FlowBuilder auto-build
206
+ // =============================================================================
207
+ /**
208
+ * If `val` is an unbuilt FlowBuilder (from `contract.flow(id).step(...)`
209
+ * without a trailing `.build()`), call `.build()` to resolve it to a
210
+ * FlowContract. Scanner is dep-free, so we duck-type the builder shape.
211
+ */
212
+ function autoBuildFlowBuilder(val) {
213
+ if (typeof val === "object" &&
214
+ val !== null &&
215
+ val.__glubean_type === "flow-builder" &&
216
+ typeof val.build === "function") {
217
+ try {
218
+ return val.build();
219
+ }
220
+ catch {
221
+ return val;
222
+ }
223
+ }
224
+ return val;
225
+ }
173
226
  // =============================================================================
174
227
  // File-level extraction
175
228
  // =============================================================================
176
229
  /**
177
- * Extract contracts from a single file by dynamic import.
178
- * Supports HttpContract (.with()) and ProtocolContract (register() v2).
230
+ * Extract contracts + flows from a single file by dynamic import.
231
+ * One file's import failure does not block others.
179
232
  */
180
233
  export async function extractContractFromFile(filePath) {
181
234
  const contracts = [];
235
+ const flows = [];
182
236
  const errors = [];
183
237
  const absolutePath = resolve(filePath);
184
238
  try {
185
239
  const mod = await import(pathToFileURL(absolutePath).href);
186
- for (const [exportName, value] of Object.entries(mod)) {
187
- if (isHttpContract(value)) {
188
- contracts.push(httpContractToNormalized(value, exportName));
240
+ for (const [exportName, rawValue] of Object.entries(mod)) {
241
+ // Auto-resolve unbuilt FlowBuilder exports. User code like
242
+ // `export const signup = contract.flow(...).step(...)` returns a
243
+ // FlowBuilder (not a FlowContract) because `.build()` is optional.
244
+ // Scanner must build it to reach the `_flow` projection.
245
+ const value = autoBuildFlowBuilder(rawValue);
246
+ if (isFlowContract(value)) {
247
+ flows.push(flowContractToNormalized(value, exportName));
189
248
  }
190
249
  else if (isProtocolContract(value)) {
191
250
  contracts.push(protocolContractToNormalized(value, exportName));
@@ -196,15 +255,15 @@ export async function extractContractFromFile(filePath) {
196
255
  const message = err instanceof Error ? err.message : String(err);
197
256
  errors.push({ file: absolutePath, error: message });
198
257
  }
199
- return { contracts, errors };
258
+ return { contracts, flows: flows.length > 0 ? flows : undefined, errors };
200
259
  }
201
260
  // =============================================================================
202
261
  // Project-level extraction
203
262
  // =============================================================================
204
263
  /**
205
- * Find all .contract.{ts,js,mjs} files in a directory tree.
264
+ * Find all .contract.{ts,js,mjs} and .flow.{ts,js,mjs} files in a directory tree.
206
265
  */
207
- function findContractFiles(dir) {
266
+ function findContractAndFlowFiles(dir) {
208
267
  const files = [];
209
268
  const walk = (d) => {
210
269
  for (const entry of readdirSync(d)) {
@@ -213,28 +272,46 @@ function findContractFiles(dir) {
213
272
  continue;
214
273
  if (statSync(full).isDirectory())
215
274
  walk(full);
216
- else if (basename(entry).includes(".contract."))
217
- files.push(full);
275
+ else {
276
+ const base = basename(entry);
277
+ if (base.includes(".contract.") || base.includes(".flow.")) {
278
+ files.push(full);
279
+ }
280
+ }
218
281
  }
219
282
  };
220
283
  walk(dir);
221
284
  return files;
222
285
  }
223
286
  /**
224
- * Extract contracts from all .contract.{ts,js,mjs} files in a project.
225
- * Each file is imported independently — one file's failure does not block others.
287
+ * Extract contracts + flows from all recognized files in a project.
226
288
  */
227
289
  export async function extractContractsFromProject(dir) {
228
- const contractFiles = findContractFiles(dir);
229
- if (contractFiles.length === 0)
290
+ const files = findContractAndFlowFiles(dir);
291
+ if (files.length === 0)
230
292
  return { contracts: [], errors: [] };
231
293
  const allContracts = [];
294
+ const allFlows = [];
232
295
  const allErrors = [];
233
- for (const filePath of contractFiles) {
234
- const { contracts, errors } = await extractContractFromFile(filePath);
296
+ for (const filePath of files) {
297
+ const { contracts, flows, errors } = await extractContractFromFile(filePath);
235
298
  allContracts.push(...contracts);
299
+ if (flows)
300
+ allFlows.push(...flows);
236
301
  allErrors.push(...errors);
237
302
  }
238
- return { contracts: allContracts, errors: allErrors };
303
+ return {
304
+ contracts: allContracts,
305
+ flows: allFlows.length > 0 ? allFlows : undefined,
306
+ errors: allErrors,
307
+ };
308
+ }
309
+ // =============================================================================
310
+ // Backward-compat: isHttpContract — removed permanently in v0.2.
311
+ // =============================================================================
312
+ /** @deprecated Removed in v0.2 — HTTP now goes through isProtocolContract. */
313
+ export function isHttpContract(_val) {
314
+ throw new Error("isHttpContract() was removed in v0.2. HTTP contracts now use the unified " +
315
+ "isProtocolContract() shape (_projection.protocol === 'http').");
239
316
  }
240
317
  //# sourceMappingURL=contract-extraction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract-extraction.js","sourceRoot":"","sources":["../src/contract-extraction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-extraction.js","sourceRoot":"","sources":["../src/contract-extraction.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,13 +3,19 @@
3
3
  *
4
4
  * Scanner for Glubean test files.
5
5
  *
6
- * Supports two extraction modes:
7
- * - **Static analysis**: Uses regex patterns to extract metadata
8
- * without importing files. Works everywhere.
9
- * - **Runtime extraction**: Imports test files via tsx subprocess and reads
10
- * metadata from the SDK's global registry (100% accurate).
6
+ * Two independent extraction paths:
11
7
  *
12
- * @example Static analysis (default)
8
+ * - **Static analysis (tests)** — regex-based, no `import()`. Discovers
9
+ * `test()` / `test.each()` / `test.pick()` call sites and returns case
10
+ * metadata from source alone. Always safe; never executes user code.
11
+ *
12
+ * - **Runtime extraction (contracts + flows)** — dynamic `import()` of
13
+ * `.contract.ts` and `.flow.ts` files. Recognizes `ProtocolContract`
14
+ * (via `_projection.protocol`) and `FlowContract` (via
15
+ * `_flow.protocol === "flow"`). Required because contracts/flows
16
+ * encode schemas and cases as runtime object shapes.
17
+ *
18
+ * @example Static analysis
13
19
  * ```ts
14
20
  * import { createScanner } from "@glubean/scanner";
15
21
  *
@@ -18,12 +24,11 @@
18
24
  * console.log(`Found ${result.testCount} tests`);
19
25
  * ```
20
26
  *
21
- * @example Pure static analysis (no file system)
27
+ * @example Runtime contract extraction
22
28
  * ```ts
23
- * import { extractFromSource } from "@glubean/scanner";
29
+ * import { extractContractsFromProject } from "@glubean/scanner";
24
30
  *
25
- * const content = fs.readFileSync("test.ts", "utf-8");
26
- * const exports = extractFromSource(content);
31
+ * const { contracts, flows, errors } = await extractContractsFromProject(".");
27
32
  * ```
28
33
  */
29
34
  export { isSpecVersionSupported, SPEC_VERSION, SUPPORTED_SPEC_VERSIONS } from "./spec.js";
@@ -32,8 +37,9 @@ export { Scanner } from "./scanner.js";
32
37
  export type { FileSystem, Hasher, MetadataExtractor } from "./scanner.js";
33
38
  export { createStaticExtractor, extractAliasesFromSource, extractContractCases, extractFromSource, isGlubeanFile } from "./extractor-static.js";
34
39
  export type { ContractStaticMeta, ContractCaseStaticMeta } from "./extractor-static.js";
35
- export { extractContractFromFile, extractContractsFromProject, isHttpContract, isProtocolContract, schemaToJsonSchema, } from "./contract-extraction.js";
36
- export type { NormalizedContractMeta, NormalizedCaseMeta, NormalizedExample, NormalizedParamMeta, ExtractedContract, ExtractionResult, CaseLifecycle, CaseSeverity, CaseRequires, CaseDefaultRun, } from "./contract-extraction.js";
40
+ export { extractContractFromFile, extractContractsFromProject, isProtocolContract, isFlowContract, isHttpContract, // deprecated-throw, kept for diagnostic
41
+ schemaToJsonSchema, deepNormalizeSchemas, } from "./contract-extraction.js";
42
+ export type { NormalizedContractMeta, NormalizedCaseMeta, NormalizedExample, NormalizedParamMeta, NormalizedFlowMeta, NormalizedFlowStep, NormalizedFieldMapping, ExtractedContract, ExtractionResult, CaseLifecycle, CaseSeverity, CaseRequires, CaseDefaultRun, } from "./contract-extraction.js";
37
43
  export { nodeFs, nodeHasher } from "./fs.js";
38
44
  import { Scanner } from "./scanner.js";
39
45
  import type { ScanOptions, ScanResult, ValidationResult } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAG1F,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGlH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAChJ,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGxF,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAU5E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAE/D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAE5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,WAAW,GAAE,MAAqB,GAAG,OAAO,CAGzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAG1F,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGlH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAChJ,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGxF,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,EACd,cAAc,EAAE,wCAAwC;AACxD,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAU5E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAE/D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAE5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,WAAW,GAAE,MAAqB,GAAG,OAAO,CAGzE"}
package/dist/index.js CHANGED
@@ -3,13 +3,19 @@
3
3
  *
4
4
  * Scanner for Glubean test files.
5
5
  *
6
- * Supports two extraction modes:
7
- * - **Static analysis**: Uses regex patterns to extract metadata
8
- * without importing files. Works everywhere.
9
- * - **Runtime extraction**: Imports test files via tsx subprocess and reads
10
- * metadata from the SDK's global registry (100% accurate).
6
+ * Two independent extraction paths:
11
7
  *
12
- * @example Static analysis (default)
8
+ * - **Static analysis (tests)** — regex-based, no `import()`. Discovers
9
+ * `test()` / `test.each()` / `test.pick()` call sites and returns case
10
+ * metadata from source alone. Always safe; never executes user code.
11
+ *
12
+ * - **Runtime extraction (contracts + flows)** — dynamic `import()` of
13
+ * `.contract.ts` and `.flow.ts` files. Recognizes `ProtocolContract`
14
+ * (via `_projection.protocol`) and `FlowContract` (via
15
+ * `_flow.protocol === "flow"`). Required because contracts/flows
16
+ * encode schemas and cases as runtime object shapes.
17
+ *
18
+ * @example Static analysis
13
19
  * ```ts
14
20
  * import { createScanner } from "@glubean/scanner";
15
21
  *
@@ -18,12 +24,11 @@
18
24
  * console.log(`Found ${result.testCount} tests`);
19
25
  * ```
20
26
  *
21
- * @example Pure static analysis (no file system)
27
+ * @example Runtime contract extraction
22
28
  * ```ts
23
- * import { extractFromSource } from "@glubean/scanner";
29
+ * import { extractContractsFromProject } from "@glubean/scanner";
24
30
  *
25
- * const content = fs.readFileSync("test.ts", "utf-8");
26
- * const exports = extractFromSource(content);
31
+ * const { contracts, flows, errors } = await extractContractsFromProject(".");
27
32
  * ```
28
33
  */
29
34
  // Re-export spec constants
@@ -32,8 +37,9 @@ export { isSpecVersionSupported, SPEC_VERSION, SUPPORTED_SPEC_VERSIONS } from ".
32
37
  export { Scanner } from "./scanner.js";
33
38
  // Re-export static analysis extractor
34
39
  export { createStaticExtractor, extractAliasesFromSource, extractContractCases, extractFromSource, isGlubeanFile } from "./extractor-static.js";
35
- // Re-export runtime contract extraction
36
- export { extractContractFromFile, extractContractsFromProject, isHttpContract, isProtocolContract, schemaToJsonSchema, } from "./contract-extraction.js";
40
+ // Re-export runtime contract + flow extraction
41
+ export { extractContractFromFile, extractContractsFromProject, isProtocolContract, isFlowContract, isHttpContract, // deprecated-throw, kept for diagnostic
42
+ schemaToJsonSchema, deepNormalizeSchemas, } from "./contract-extraction.js";
37
43
  // Re-export file system implementations
38
44
  export { nodeFs, nodeHasher } from "./fs.js";
39
45
  // Imports for convenience functions
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,2BAA2B;AAC3B,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAK1F,yCAAyC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,sCAAsC;AACtC,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGhJ,wCAAwC;AACxC,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAclC,wCAAwC;AACxC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE7C,oCAAoC;AACpC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,6CAA6C;AAC7C,MAAM,cAAc,GAAG,IAAI,OAAO,CAChC,MAAM,EACN,UAAU,EACV,YAAY,EACZ,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACvD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,IAAI,CAAC,GAAW,EAAE,OAAqB;IACrD,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,cAAsB,YAAY;IAC9D,MAAM,SAAS,GAAG,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,2BAA2B;AAC3B,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAK1F,yCAAyC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,sCAAsC;AACtC,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGhJ,+CAA+C;AAC/C,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,EACd,cAAc,EAAE,wCAAwC;AACxD,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAiBlC,wCAAwC;AACxC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE7C,oCAAoC;AACpC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,6CAA6C;AAC7C,MAAM,cAAc,GAAG,IAAI,OAAO,CAChC,MAAM,EACN,UAAU,EACV,YAAY,EACZ,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACvD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,IAAI,CAAC,GAAW,EAAE,OAAqB;IACrD,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,cAAsB,YAAY;IAC9D,MAAM,SAAS,GAAG,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AACjE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAY,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElG,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,uCAAuC;IACvC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,sDAAsD;IACtD,IAAI,CACF,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GACpD,aAAa,CAAC,MAAM,CAAC,CAAC;IACzB,yBAAyB;IACzB,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACpC,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,+BAA+B;IAC/B,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,8BAA8B;AAC9B,MAAM,WAAW,MAAM;IACrB,8DAA8D;IAC9D,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,sDAAsD;AACtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAgBlG;;;;GAIG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAoB;gBAG7C,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAqB,EAClC,SAAS,CAAC,EAAE,iBAAiB;IAiB/B;;;OAGG;YACW,cAAc;IAmB5B;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsEtD;;;;;;OAMG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;CA2JxE"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAY,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElG,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,uCAAuC;IACvC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,sDAAsD;IACtD,IAAI,CACF,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GACpD,aAAa,CAAC,MAAM,CAAC,CAAC;IACzB,yBAAyB;IACzB,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACpC,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,+BAA+B;IAC/B,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,8BAA8B;AAC9B,MAAM,WAAW,MAAM;IACrB,8DAA8D;IAC9D,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,sDAAsD;AACtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAqBlG;;;;GAIG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAoB;gBAG7C,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAqB,EAClC,SAAS,CAAC,EAAE,iBAAiB;IAiB/B;;;OAGG;YACW,cAAc;IAmB5B;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwEtD;;;;;;OAMG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;CAqMxE"}
package/dist/scanner.js CHANGED
@@ -11,12 +11,16 @@ const DEFAULT_SKIP_DIRS = ["node_modules", ".git", "dist", "build"];
11
11
  const DEFAULT_EXTENSIONS = [".ts", ".js", ".mjs"];
12
12
  const TEST_FILE_SUFFIXES = [".test.ts", ".test.js", ".test.mjs"];
13
13
  const CONTRACT_FILE_SUFFIXES = [".contract.ts", ".contract.js", ".contract.mjs"];
14
+ const FLOW_FILE_SUFFIXES = [".flow.ts", ".flow.js", ".flow.mjs"];
14
15
  function isTestFile(filePath) {
15
16
  return TEST_FILE_SUFFIXES.some((suffix) => filePath.endsWith(suffix));
16
17
  }
17
18
  function isContractFile(filePath) {
18
19
  return CONTRACT_FILE_SUFFIXES.some((suffix) => filePath.endsWith(suffix));
19
20
  }
21
+ function isFlowFile(filePath) {
22
+ return FLOW_FILE_SUFFIXES.some((suffix) => filePath.endsWith(suffix));
23
+ }
20
24
  /**
21
25
  * Scanner class for extracting test metadata from a directory.
22
26
  *
@@ -89,9 +93,10 @@ export class Scanner {
89
93
  warnings.push("Failed to parse package.json");
90
94
  }
91
95
  }
92
- // Check for at least one test or contract file
96
+ // Check for at least one test, contract, or flow file
93
97
  let foundTestFile = false;
94
98
  let foundContractFile = false;
99
+ let foundFlowFile = false;
95
100
  try {
96
101
  for await (const filePath of this.fs.walk(dir, {
97
102
  extensions: DEFAULT_EXTENSIONS,
@@ -101,16 +106,18 @@ export class Scanner {
101
106
  foundTestFile = true;
102
107
  else if (isContractFile(filePath))
103
108
  foundContractFile = true;
104
- if (foundTestFile || foundContractFile)
109
+ else if (isFlowFile(filePath))
110
+ foundFlowFile = true;
111
+ if (foundTestFile || foundContractFile || foundFlowFile)
105
112
  break;
106
113
  }
107
114
  }
108
115
  catch (err) {
109
116
  errors.push(`Failed to scan directory: ${err}`);
110
117
  }
111
- if (!foundTestFile && !foundContractFile) {
112
- errors.push("No test or contract files found. " +
113
- "Ensure your files are named *.test.ts or *.contract.ts.");
118
+ if (!foundTestFile && !foundContractFile && !foundFlowFile) {
119
+ errors.push("No test, contract, or flow files found. " +
120
+ "Ensure your files are named *.test.ts, *.contract.ts, or *.flow.ts.");
114
121
  }
115
122
  return {
116
123
  valid: errors.length === 0,
@@ -155,14 +162,17 @@ export class Scanner {
155
162
  }
156
163
  // Phase 1: collect .extend() aliases from all .ts files
157
164
  const aliases = await this.collectAliases(dir, skipDirs, extensions);
158
- // Phase 2: collect test files and contract files
165
+ // Phase 2: collect test, contract, and flow files
159
166
  const testFiles = [];
160
167
  const contractFiles = [];
168
+ const flowFiles = [];
161
169
  for await (const filePath of this.fs.walk(dir, { extensions, skipDirs })) {
162
170
  if (isTestFile(filePath))
163
171
  testFiles.push(filePath);
164
172
  else if (isContractFile(filePath))
165
173
  contractFiles.push(filePath);
174
+ else if (isFlowFile(filePath))
175
+ flowFiles.push(filePath);
166
176
  }
167
177
  // Phase 3: Extract test metadata from each test file
168
178
  for (const filePath of testFiles) {
@@ -185,11 +195,14 @@ export class Scanner {
185
195
  warnings.push(`Failed to extract metadata from ${filePath}: ${err}`);
186
196
  }
187
197
  }
188
- // Phase 4: Extract contract metadata from contract files
198
+ // Phase 4: Extract contract metadata from contract AND flow files.
199
+ // Both file types can export contracts (a .flow.ts that composes contracts
200
+ // inline is a common pattern). Duplicates across files are handled by
201
+ // downstream consumers treating the contract id as authoritative.
189
202
  // Uses shared runtime extraction (supports both old and .with() syntax).
190
203
  // Falls back to static regex if runtime import fails.
191
204
  const contracts = [];
192
- for (const filePath of contractFiles) {
205
+ for (const filePath of [...contractFiles, ...flowFiles]) {
193
206
  const absolutePath = this.fs.resolve ? this.fs.resolve(filePath) : filePath;
194
207
  const result = await extractContractFromFile(absolutePath);
195
208
  if (result.contracts.length > 0) {
@@ -204,20 +217,24 @@ export class Scanner {
204
217
  feature: ec.feature,
205
218
  deprecated: ec.deprecated,
206
219
  line: 0,
207
- cases: ec.cases.map((c) => ({
208
- key: c.key,
209
- description: c.description,
210
- expectStatus: c.protocolExpect?.status,
211
- deferred: c.deferredReason,
212
- deprecated: c.deprecatedReason,
213
- lifecycle: c.lifecycle,
214
- severity: c.severity,
215
- requires: c.requires,
216
- defaultRun: c.defaultRun,
217
- hasHeaderSchema: c.responseHeaders != null,
218
- hasExample: c.examples != null,
219
- line: 0,
220
- })),
220
+ cases: ec.cases.map((c) => {
221
+ // schemas is adapter-opaque; for HTTP it has { response: {...} }
222
+ const schemas = c.schemas;
223
+ return {
224
+ key: c.key,
225
+ description: c.description,
226
+ expectStatus: schemas?.response?.status,
227
+ deferred: c.deferredReason,
228
+ deprecated: c.deprecatedReason,
229
+ lifecycle: c.lifecycle,
230
+ severity: c.severity,
231
+ requires: c.requires,
232
+ defaultRun: c.defaultRun,
233
+ hasHeaderSchema: schemas?.response?.headers != null,
234
+ hasExample: schemas?.response?.examples != null,
235
+ line: 0,
236
+ };
237
+ }),
221
238
  });
222
239
  }
223
240
  }
@@ -254,9 +271,36 @@ export class Scanner {
254
271
  }
255
272
  }
256
273
  }
257
- if (Object.keys(files).length === 0 && contracts.length === 0) {
258
- warnings.push("No Glubean test or contract files found. " +
259
- "Ensure your files are named *.test.ts or *.contract.ts.");
274
+ // Phase 5: Extract flow metadata from flow files.
275
+ // extractContractFromFile already returns both contracts and flows; we also
276
+ // call it on .flow.ts files so single-file flow modules are picked up.
277
+ const flows = [];
278
+ const allFlowSourceFiles = [...flowFiles, ...contractFiles]; // contract files can also export flows
279
+ const seenFlowIds = new Set();
280
+ for (const filePath of allFlowSourceFiles) {
281
+ const absolutePath = this.fs.resolve ? this.fs.resolve(filePath) : filePath;
282
+ const result = await extractContractFromFile(absolutePath);
283
+ if (result.flows) {
284
+ for (const flow of result.flows) {
285
+ if (!seenFlowIds.has(flow.id)) {
286
+ flows.push(flow);
287
+ seenFlowIds.add(flow.id);
288
+ }
289
+ }
290
+ }
291
+ // Errors already surfaced in contract phase for shared files; only add
292
+ // new errors for flow-only files
293
+ if (flowFiles.includes(filePath) && result.errors.length > 0) {
294
+ for (const err of result.errors) {
295
+ warnings.push(`Flow import failed: ${err.file} — ${err.error}`);
296
+ }
297
+ }
298
+ }
299
+ if (Object.keys(files).length === 0 &&
300
+ contracts.length === 0 &&
301
+ flows.length === 0) {
302
+ warnings.push("No Glubean test, contract, or flow files found. " +
303
+ "Ensure your files are named *.test.ts, *.contract.ts, or *.flow.ts.");
260
304
  }
261
305
  return {
262
306
  specVersion,
@@ -266,6 +310,7 @@ export class Scanner {
266
310
  tags: Array.from(allTags),
267
311
  warnings,
268
312
  contracts,
313
+ ...(flows.length > 0 ? { flows } : {}),
269
314
  };
270
315
  }
271
316
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAiCnE,MAAM,iBAAiB,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACpE,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AACjE,MAAM,sBAAsB,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AAEjF,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,OAAO;IACD,WAAW,CAAS;IACpB,EAAE,CAAa;IACf,MAAM,CAAS;IACf,SAAS,CAAqB;IAE/C,YACE,EAAc,EACd,MAAc,EACd,cAAsB,YAAY,EAClC,SAA6B;QAE7B,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,6BAA6B,WAAW,gBACtC,uBAAuB,CAAC,IAAI,CAC1B,IAAI,CAER,EAAE,CACH,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,cAAc,CAC1B,GAAW,EACX,WAAqB,iBAAiB,EACtC,aAAuB,kBAAkB;QAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACzE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACjD,KAAK,MAAM,KAAK,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,mBAAuC,CAAC;QAE5C,yBAAyB;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAE7D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CACX,iEAAiE,CAClE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEjC,sCAAsC;gBACtC,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;gBAEpC,IAAI,MAAM,EAAE,CAAC;oBACX,2DAA2D;oBAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBACrD,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/C,mBAAmB,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC1D,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,+CAA+C;QAC/C,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAE9B,IAAI,CAAC;YACH,IAAI,KAAK,EACP,MAAM,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAClC,UAAU,EAAE,kBAAkB;gBAC9B,QAAQ,EAAE,iBAAiB;aAC5B,CAAC,EACF,CAAC;gBACD,IAAI,UAAU,CAAC,QAAQ,CAAC;oBAAE,aAAa,GAAG,IAAI,CAAC;qBAC1C,IAAI,cAAc,CAAC,QAAQ,CAAC;oBAAE,iBAAiB,GAAG,IAAI,CAAC;gBAC5D,IAAI,aAAa,IAAI,iBAAiB;oBAAE,MAAM;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CACT,mCAAmC;gBACjC,yDAAyD,CAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;YACR,mBAAmB,EAAE,mBAAmB,IAAI,IAAI,CAAC,WAAW;SAC7D,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,UAAuB,EAAE;QAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;QAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QACvD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,kBAAkB,CAAC;QAE5D,MAAM,KAAK,GAA6B,EAAE,CAAC;QAC3C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,4BAA4B;QAC5B,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,4BAA4B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3D,CAAC;YACJ,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC1D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAC7D,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;QACJ,CAAC;QAED,wDAAwD;QACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAErE,iDAAiD;QACjD,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACzE,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC9C,IAAI,cAAc,CAAC,QAAQ,CAAC;gBAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,CAAC;QAED,qDAAqD;QACrD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAExD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACrD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAEpD,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBAExC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;wBAC1B,SAAS,IAAI,CAAC,CAAC;wBACf,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;4BACb,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC9C,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,mCAAmC,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,yEAAyE;QACzE,sDAAsD;QACtD,MAAM,SAAS,GAAyB,EAAE,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5E,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,YAAY,CAAC,CAAC;YAE3D,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,6EAA6E;gBAC7E,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBAClC,SAAS,CAAC,IAAI,CAAC;wBACb,UAAU,EAAE,EAAE,CAAC,EAAE;wBACjB,UAAU,EAAE,EAAE,CAAC,UAAU;wBACzB,QAAQ,EAAE,EAAE,CAAC,MAAM;wBACnB,QAAQ,EAAE,EAAE,CAAC,QAAQ;wBACrB,WAAW,EAAE,EAAE,CAAC,WAAW;wBAC3B,OAAO,EAAE,EAAE,CAAC,OAAO;wBACnB,UAAU,EAAE,EAAE,CAAC,UAAU;wBACzB,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC1B,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,WAAW,EAAE,CAAC,CAAC,WAAW;4BAC1B,YAAY,EAAG,CAAC,CAAC,cAAsB,EAAE,MAAM;4BAC/C,QAAQ,EAAE,CAAC,CAAC,cAAc;4BAC1B,UAAU,EAAE,CAAC,CAAC,gBAAgB;4BAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,IAAI;4BAC1C,UAAU,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;4BAC9B,IAAI,EAAE,CAAC;yBACR,CAAC,CAAC;qBACJ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,uEAAuE;gBACvE,0DAA0D;gBAC1D,oFAAoF;gBACpF,yEAAyE;gBACzE,8CAA8C;gBAC9C,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACjD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAClD,2EAA2E;oBAC3E,+EAA+E;oBAC/E,MAAM,UAAU,GAAG,wCAAwC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC1E,8DAA8D;oBAC9D,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC3B,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;wBAChD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;4BAC7B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACrB,aAAa,GAAG,IAAI,CAAC;wBACvB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,8BAA8B;gBAChC,CAAC;gBACD,+DAA+D;gBAC/D,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAChC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,QAAQ,CAAC,IAAI,CACX,2CAA2C;gBACzC,yDAAyD,CAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,WAAW;YACX,KAAK;YACL,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;YACpC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YACzB,QAAQ;YACR,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  * Scanner types - shared between scanner consumers.
3
3
  */
4
4
  import type { ContractStaticMeta } from "./extractor-static.js";
5
+ import type { NormalizedFlowMeta } from "./contract-extraction.js";
5
6
  /** Export metadata for a single test export */
6
7
  export interface ExportMeta {
7
8
  type: "test";
@@ -95,6 +96,11 @@ export interface BundleMetadata {
95
96
  * Independent from test exports — consumed by projection/coverage tools.
96
97
  */
97
98
  contracts?: ContractStaticMeta[];
99
+ /**
100
+ * Flow metadata extracted from .flow.ts files (v0.2+).
101
+ * Populated from the scanner's runtime extractor (`_extracted` on FlowContract).
102
+ */
103
+ flows?: NormalizedFlowMeta[];
98
104
  }
99
105
  /** Result of scanning a directory */
100
106
  export interface ScanResult {
@@ -115,6 +121,11 @@ export interface ScanResult {
115
121
  * Independent from test exports — consumed by projection/coverage tools.
116
122
  */
117
123
  contracts: ContractStaticMeta[];
124
+ /**
125
+ * Flow metadata extracted from .flow.ts files (v0.2+).
126
+ * Independent from contracts — consumed by projection/visualization tools.
127
+ */
128
+ flows?: NormalizedFlowMeta[];
118
129
  }
119
130
  /** Options for scanning */
120
131
  export interface ScanOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glubean/scanner",
3
- "version": "0.1.35",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {