@glubean/scanner 0.1.36 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contract-extraction.d.ts +135 -123
- package/dist/contract-extraction.d.ts.map +1 -1
- package/dist/contract-extraction.js +241 -136
- package/dist/contract-extraction.js.map +1 -1
- package/dist/index.d.ts +18 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -12
- package/dist/index.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +70 -25
- package/dist/scanner.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Scanner is duck-typing-only (no @glubean/sdk dependency). We recognize
|
|
6
|
+
* shapes without importing types.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
10
|
-
*
|
|
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
|
-
/**
|
|
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,144 +50,106 @@ export interface NormalizedCaseMeta {
|
|
|
40
50
|
deprecatedReason?: string;
|
|
41
51
|
requires?: CaseRequires;
|
|
42
52
|
defaultRun?: CaseDefaultRun;
|
|
43
|
-
|
|
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
|
-
/**
|
|
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
|
|
67
|
+
/** Protocol-agnostic target (HTTP: "POST /users"). */
|
|
66
68
|
target: string;
|
|
67
69
|
description?: string;
|
|
68
70
|
feature?: string;
|
|
69
71
|
instanceName?: string;
|
|
70
|
-
|
|
71
|
-
schemaMount?: string;
|
|
72
|
-
requestSchema: unknown | null;
|
|
73
|
-
/** Request content type (HTTP-specific; default application/json) */
|
|
74
|
-
requestContentType?: string;
|
|
75
|
-
/** Request headers schema (OpenAPI docs) */
|
|
76
|
-
requestHeaders?: unknown | null;
|
|
77
|
-
/** Single request example */
|
|
78
|
-
requestExample?: unknown;
|
|
79
|
-
/** Named request examples */
|
|
80
|
-
requestExamples?: Record<string, NormalizedExample>;
|
|
81
|
-
/** Contract-level deprecation reason (propagates to all cases) */
|
|
72
|
+
tags?: string[];
|
|
82
73
|
deprecated?: string;
|
|
83
|
-
/** Contract-level merged extensions (defaults < contract). Keys are x-* OpenAPI extensions. */
|
|
84
74
|
extensions?: Record<string, unknown>;
|
|
85
|
-
|
|
75
|
+
schemas?: unknown;
|
|
76
|
+
meta?: unknown;
|
|
86
77
|
cases: NormalizedCaseMeta[];
|
|
87
78
|
}
|
|
88
79
|
/**
|
|
89
|
-
* @deprecated Alias for NormalizedContractMeta. Use
|
|
80
|
+
* @deprecated Alias for NormalizedContractMeta. Use directly.
|
|
90
81
|
*/
|
|
91
82
|
export type ExtractedContract = NormalizedContractMeta;
|
|
92
|
-
/**
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
+
};
|
|
99
112
|
}
|
|
100
113
|
/**
|
|
101
|
-
*
|
|
102
|
-
* HttpContract extends Array<Test> and has id + endpoint.
|
|
114
|
+
* Protocol-agnostic flow metadata. Mirrors `ExtractedFlowProjection`.
|
|
103
115
|
*/
|
|
104
|
-
export
|
|
116
|
+
export interface NormalizedFlowMeta {
|
|
105
117
|
id: string;
|
|
106
|
-
|
|
118
|
+
exportName: string;
|
|
119
|
+
protocol: "flow";
|
|
107
120
|
description?: string;
|
|
108
|
-
|
|
109
|
-
instanceName?: string;
|
|
110
|
-
security?: unknown;
|
|
111
|
-
deprecated?: string;
|
|
121
|
+
tags?: string[];
|
|
112
122
|
extensions?: Record<string, unknown>;
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
request?: {
|
|
124
|
-
toJSONSchema?: () => unknown;
|
|
125
|
-
};
|
|
126
|
-
_caseSchemas?: Record<string, {
|
|
127
|
-
expectStatus?: number;
|
|
128
|
-
responseSchema?: {
|
|
129
|
-
toJSONSchema?: () => unknown;
|
|
130
|
-
};
|
|
131
|
-
responseHeaders?: {
|
|
132
|
-
toJSONSchema?: () => unknown;
|
|
133
|
-
};
|
|
134
|
-
responseContentType?: string;
|
|
135
|
-
example?: unknown;
|
|
136
|
-
examples?: Record<string, {
|
|
137
|
-
value: unknown;
|
|
138
|
-
summary?: string;
|
|
139
|
-
description?: string;
|
|
140
|
-
}>;
|
|
141
|
-
paramSchemas?: Record<string, {
|
|
142
|
-
schema?: {
|
|
143
|
-
toJSONSchema?: () => unknown;
|
|
144
|
-
};
|
|
145
|
-
description?: string;
|
|
146
|
-
required?: boolean;
|
|
147
|
-
deprecated?: boolean;
|
|
148
|
-
}>;
|
|
149
|
-
querySchemas?: Record<string, {
|
|
150
|
-
schema?: {
|
|
151
|
-
toJSONSchema?: () => unknown;
|
|
152
|
-
};
|
|
153
|
-
description?: string;
|
|
154
|
-
required?: boolean;
|
|
155
|
-
deprecated?: boolean;
|
|
156
|
-
}>;
|
|
157
|
-
description?: string;
|
|
158
|
-
deferred?: string;
|
|
159
|
-
deprecated?: string;
|
|
160
|
-
severity?: string;
|
|
161
|
-
lifecycle?: string;
|
|
162
|
-
requires?: string;
|
|
163
|
-
defaultRun?: string;
|
|
164
|
-
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;
|
|
165
133
|
}>;
|
|
166
|
-
}
|
|
134
|
+
}
|
|
167
135
|
/**
|
|
168
|
-
* Check if a value looks like a ProtocolContract
|
|
169
|
-
* 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.)
|
|
170
139
|
*/
|
|
171
140
|
export declare function isProtocolContract(val: unknown): val is {
|
|
172
141
|
_projection: {
|
|
142
|
+
id?: string;
|
|
173
143
|
protocol: string;
|
|
174
144
|
target: string;
|
|
175
145
|
description?: string;
|
|
176
146
|
feature?: string;
|
|
177
147
|
instanceName?: string;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
148
|
+
tags?: string[];
|
|
149
|
+
deprecated?: string;
|
|
150
|
+
extensions?: Record<string, unknown>;
|
|
151
|
+
schemas?: unknown;
|
|
152
|
+
meta?: unknown;
|
|
181
153
|
cases: Array<{
|
|
182
154
|
key: string;
|
|
183
155
|
description?: string;
|
|
@@ -187,28 +159,68 @@ export declare function isProtocolContract(val: unknown): val is {
|
|
|
187
159
|
deprecatedReason?: string;
|
|
188
160
|
requires?: string;
|
|
189
161
|
defaultRun?: string;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
162
|
+
tags?: string[];
|
|
163
|
+
extensions?: Record<string, unknown>;
|
|
164
|
+
schemas?: unknown;
|
|
165
|
+
meta?: unknown;
|
|
194
166
|
}>;
|
|
195
|
-
protocolMeta?: Record<string, unknown>;
|
|
196
167
|
};
|
|
197
168
|
};
|
|
198
169
|
/**
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
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.
|
|
202
204
|
*/
|
|
203
205
|
export declare function schemaToJsonSchema(schema: unknown): unknown | null;
|
|
204
206
|
/**
|
|
205
|
-
*
|
|
206
|
-
*
|
|
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.
|
|
207
218
|
*/
|
|
208
219
|
export declare function extractContractFromFile(filePath: string): Promise<ExtractionResult>;
|
|
209
220
|
/**
|
|
210
|
-
* Extract contracts from all
|
|
211
|
-
* Each file is imported independently — one file's failure does not block others.
|
|
221
|
+
* Extract contracts + flows from all recognized files in a project.
|
|
212
222
|
*/
|
|
213
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;
|
|
214
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":"AAAA
|
|
1
|
+
{"version":3,"file":"contract-extraction.d.ts","sourceRoot":"","sources":["../src/contract-extraction.ts"],"names":[],"mappings":"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"}
|