@workos/oagen 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.mjs +357 -12
- package/dist/cli/index.mjs.map +1 -1
- package/dist/compat/index.d.mts +1 -1
- package/dist/compat/index.mjs +10 -1
- package/dist/compat/index.mjs.map +1 -1
- package/dist/{diff-CSy3g-Bq.mjs → diff-CltJMcwG.mjs} +265 -10
- package/dist/diff-CltJMcwG.mjs.map +1 -0
- package/dist/index.d.mts +41 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +92 -2
- package/dist/index.mjs.map +1 -1
- package/dist/scripts/smoke/baseline.mjs +90 -1
- package/dist/scripts/smoke/baseline.mjs.map +1 -1
- package/dist/smoke.mjs +90 -1
- package/dist/smoke.mjs.map +1 -1
- package/dist/{types-D84LjrVG.d.mts → types-C7g5sLuX.d.mts} +6 -1
- package/dist/types-C7g5sLuX.d.mts.map +1 -0
- package/dist/verify/index.d.mts +1 -1
- package/dist/verify/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/diff-CSy3g-Bq.mjs.map +0 -1
- package/dist/types-D84LjrVG.d.mts.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as collectModelRefs, B as LoggingPolicy, C as TypeParam, D as assignModelsToServices, E as assertNever, F as BackoffStrategy, G as TelemetryPolicy, H as RequestGuardPolicy, I as DeepPartial, J as defaultSdkBehavior, K as TimeoutPolicy, L as ErrorPolicy, M as mapTypeRef, N as walkTypeRef, O as collectEnumRefs, P as AiAgentEnvVar, R as IdempotencyPolicy, S as SuccessResponse, T as UnionType, U as RetryPolicy, V as PaginationPolicy, W as SdkBehavior, Y as mergeSdkBehavior, _ as Parameter, a as EnumRef, b as ServerEntry, c as Field, d as MapType, f as Model, g as PaginationMeta, h as Operation, i as Enum, it as ApiSurface, j as collectRequestBodyModels, k as collectFieldDependencies, l as HttpMethod, m as NullableType, n as ArrayType, o as EnumValue, p as ModelRef, q as UserAgentPolicy, r as AuthScheme, s as ErrorResponse, st as Extractor, t as ApiSpec, u as LiteralType, ut as OverlayLookup, v as PrimitiveType, w as TypeRef, x as Service, y as SecurityRequirement, z as LogEvent } from "./types-
|
|
1
|
+
import { A as collectModelRefs, B as LoggingPolicy, C as TypeParam, D as assignModelsToServices, E as assertNever, F as BackoffStrategy, G as TelemetryPolicy, H as RequestGuardPolicy, I as DeepPartial, J as defaultSdkBehavior, K as TimeoutPolicy, L as ErrorPolicy, M as mapTypeRef, N as walkTypeRef, O as collectEnumRefs, P as AiAgentEnvVar, R as IdempotencyPolicy, S as SuccessResponse, T as UnionType, U as RetryPolicy, V as PaginationPolicy, W as SdkBehavior, Y as mergeSdkBehavior, _ as Parameter, a as EnumRef, b as ServerEntry, c as Field, d as MapType, f as Model, g as PaginationMeta, h as Operation, i as Enum, it as ApiSurface, j as collectRequestBodyModels, k as collectFieldDependencies, l as HttpMethod, m as NullableType, n as ArrayType, o as EnumValue, p as ModelRef, q as UserAgentPolicy, r as AuthScheme, s as ErrorResponse, st as Extractor, t as ApiSpec, u as LiteralType, ut as OverlayLookup, v as PrimitiveType, w as TypeRef, x as Service, y as SecurityRequirement, z as LogEvent } from "./types-C7g5sLuX.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/ir/operation-hints.d.ts
|
|
4
4
|
/** Per-operation override keyed by "METHOD /path" (e.g. "POST /sso/token"). */
|
|
@@ -13,6 +13,13 @@ interface OperationHint {
|
|
|
13
13
|
defaults?: Record<string, string | number | boolean>;
|
|
14
14
|
/** Fields the SDK reads from client config at runtime (e.g. ['client_id']). */
|
|
15
15
|
inferFromClient?: string[];
|
|
16
|
+
/**
|
|
17
|
+
* Marks this operation as a URL builder rather than a real HTTP call. Emitters
|
|
18
|
+
* should generate a method that returns the constructed URL (typically as a
|
|
19
|
+
* string) without performing any I/O. Used for OAuth-style redirect endpoints
|
|
20
|
+
* such as /sso/authorize and /user_management/sessions/logout.
|
|
21
|
+
*/
|
|
22
|
+
urlBuilder?: boolean;
|
|
16
23
|
}
|
|
17
24
|
interface SplitHint {
|
|
18
25
|
/** Wrapper method name (snake_case). */
|
|
@@ -25,6 +32,12 @@ interface SplitHint {
|
|
|
25
32
|
inferFromClient?: string[];
|
|
26
33
|
/** Only these body fields are exposed as method params. If omitted, all non-default/non-inferred fields are exposed. */
|
|
27
34
|
exposedParams?: string[];
|
|
35
|
+
/**
|
|
36
|
+
* Subset of exposedParams that should be emitted as optional even when the
|
|
37
|
+
* variant model would otherwise mark them required (or when the variant has
|
|
38
|
+
* no addressable model, as happens for inline oneOf branches).
|
|
39
|
+
*/
|
|
40
|
+
optionalParams?: string[];
|
|
28
41
|
}
|
|
29
42
|
interface ResolvedOperation {
|
|
30
43
|
/** The original IR operation (preserves description, params, types, etc.). */
|
|
@@ -41,6 +54,8 @@ interface ResolvedOperation {
|
|
|
41
54
|
defaults: Record<string, string | number | boolean>;
|
|
42
55
|
/** Fields the SDK reads from client config at runtime (from operation-level hint). */
|
|
43
56
|
inferFromClient: string[];
|
|
57
|
+
/** Marks this operation as a URL builder; emitters should not generate an HTTP call. */
|
|
58
|
+
urlBuilder: boolean;
|
|
44
59
|
}
|
|
45
60
|
interface ResolvedWrapper {
|
|
46
61
|
/** Wrapper method name (snake_case). */
|
|
@@ -146,6 +161,16 @@ interface EmitterContext {
|
|
|
146
161
|
overlayLookup?: OverlayLookup;
|
|
147
162
|
/** Resolved operations from the hint-aware resolver. Populated by buildEmitterContext(). */
|
|
148
163
|
resolvedOperations?: ResolvedOperation[];
|
|
164
|
+
/** Absolute path to the integration target directory (when --target is used). */
|
|
165
|
+
targetDir?: string;
|
|
166
|
+
/**
|
|
167
|
+
* Paths (relative to the target dir) that the previous run wrote into
|
|
168
|
+
* `--target`, loaded from that directory's `.oagen-manifest.json`. Emitters
|
|
169
|
+
* can use this to distinguish "file exists because oagen wrote it last time"
|
|
170
|
+
* from "file exists because a human wrote it" — the former is safe to
|
|
171
|
+
* overwrite, the latter should be merged.
|
|
172
|
+
*/
|
|
173
|
+
priorTargetManifestPaths?: Set<string>;
|
|
149
174
|
}
|
|
150
175
|
interface FormatCommand {
|
|
151
176
|
/** The executable to run (e.g., "npx", "gofmt", "bundle"). */
|
|
@@ -292,7 +317,8 @@ declare function generate(spec: ApiSpec, emitter: Emitter, options: {
|
|
|
292
317
|
apiSurface?: ApiSurface;
|
|
293
318
|
overlayLookup?: OverlayLookup;
|
|
294
319
|
operationHints?: Record<string, OperationHint>;
|
|
295
|
-
mountRules?: Record<string, string>;
|
|
320
|
+
mountRules?: Record<string, string>; /** When true, skip deletion of files recorded in the previous manifest but not in the current emission. */
|
|
321
|
+
noPrune?: boolean;
|
|
296
322
|
}): Promise<GeneratedFile[]>;
|
|
297
323
|
//#endregion
|
|
298
324
|
//#region src/engine/generate-files.d.ts
|
|
@@ -303,6 +329,8 @@ declare function buildEmitterContext(spec: ApiSpec, options: {
|
|
|
303
329
|
overlayLookup?: OverlayLookup;
|
|
304
330
|
operationHints?: Record<string, OperationHint>;
|
|
305
331
|
mountRules?: Record<string, string>;
|
|
332
|
+
target?: string;
|
|
333
|
+
priorTargetManifestPaths?: Set<string>;
|
|
306
334
|
}): EmitterContext;
|
|
307
335
|
/**
|
|
308
336
|
* Collect model and enum names transitively referenced by service operations.
|
|
@@ -324,6 +352,8 @@ declare function generateFiles(spec: ApiSpec, emitter: Emitter, options: {
|
|
|
324
352
|
overlayLookup?: OverlayLookup;
|
|
325
353
|
operationHints?: Record<string, OperationHint>;
|
|
326
354
|
mountRules?: Record<string, string>;
|
|
355
|
+
target?: string;
|
|
356
|
+
priorTargetManifestPaths?: Set<string>;
|
|
327
357
|
}): {
|
|
328
358
|
files: GeneratedFile[];
|
|
329
359
|
ctx: EmitterContext;
|
|
@@ -346,12 +376,16 @@ interface WriteResult {
|
|
|
346
376
|
*/
|
|
347
377
|
declare function treeShakeFiles(files: GeneratedFile[], language: string): Promise<GeneratedFile[]>;
|
|
348
378
|
declare function mapFilesForTargetIntegration(files: GeneratedFile[], language: string): GeneratedFile[];
|
|
379
|
+
interface IntegrateResult extends WriteResult {
|
|
380
|
+
/** Final set of paths this run claims ownership of in the target (post tree-shake + conflict resolution). */
|
|
381
|
+
emittedPaths: string[];
|
|
382
|
+
}
|
|
349
383
|
declare function integrateGeneratedFiles(opts: {
|
|
350
384
|
files: GeneratedFile[];
|
|
351
385
|
language: string;
|
|
352
386
|
targetDir: string;
|
|
353
387
|
header: string;
|
|
354
|
-
}): Promise<
|
|
388
|
+
}): Promise<IntegrateResult>;
|
|
355
389
|
//#endregion
|
|
356
390
|
//#region src/engine/registry.d.ts
|
|
357
391
|
declare function registerEmitter(emitter: Emitter): void;
|
|
@@ -383,6 +417,10 @@ interface OperationPlan {
|
|
|
383
417
|
* (unwrapped from the list wrapper). Null for non-paginated. */
|
|
384
418
|
paginatedItemModelName: string | null;
|
|
385
419
|
isModelResponse: boolean;
|
|
420
|
+
/** True when the response is an unpaginated `type: array` of models.
|
|
421
|
+
* Emitters should use this to return `Model[]` (or the language's list
|
|
422
|
+
* equivalent) and map the deserializer over each element. */
|
|
423
|
+
isArrayResponse: boolean;
|
|
386
424
|
hasQueryParams: boolean;
|
|
387
425
|
isAsync: boolean;
|
|
388
426
|
}
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/ir/operation-hints.ts","../src/errors.ts","../src/engine/types.ts","../src/differ/types.ts","../src/parser/parse.ts","../src/engine/orchestrator.ts","../src/engine/generate-files.ts","../src/engine/writer.ts","../src/engine/integrate.ts","../src/engine/registry.ts","../src/differ/diff.ts","../src/utils/naming.ts","../src/engine/operation-plan.ts","../src/cli/config-loader.ts"],"mappings":";;;;UAeiB,aAAA;EAAA;EAEf,IAAA;;EAEA,OAAA;EAFA;EAIA,KAAA,GAAQ,SAAA;EAAR;EAEA,QAAA,GAAW,MAAA;EAAX;EAEA,eAAA;AAAA;AAAA,UAGe,SAAA;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/ir/operation-hints.ts","../src/errors.ts","../src/engine/types.ts","../src/differ/types.ts","../src/parser/parse.ts","../src/engine/orchestrator.ts","../src/engine/generate-files.ts","../src/engine/writer.ts","../src/engine/integrate.ts","../src/engine/registry.ts","../src/differ/diff.ts","../src/utils/naming.ts","../src/engine/operation-plan.ts","../src/cli/config-loader.ts"],"mappings":";;;;UAeiB,aAAA;EAAA;EAEf,IAAA;;EAEA,OAAA;EAFA;EAIA,KAAA,GAAQ,SAAA;EAAR;EAEA,QAAA,GAAW,MAAA;EAAX;EAEA,eAAA;EAAA;;;;AAUF;;EAHE,UAAA;AAAA;AAAA,UAGe,SAAA;EAIf;EAFA,IAAA;EAIW;EAFX,aAAA;EAMA;EAJA,QAAA,GAAW,MAAA;EAUG;EARd,eAAA;EAee;EAbf,aAAA;;;;;;EAMA,cAAA;AAAA;AAAA,UAOe,iBAAA;EAEJ;EAAX,SAAA,EAAW,SAAA;EAEF;EAAT,OAAA,EAAS,OAAA;EAIT;EAFA,UAAA;EAIW;EAFX,OAAA;EAIU;EAFV,QAAA,GAAW,eAAA;EAMX;EAJA,QAAA,EAAU,MAAA;EAIA;EAFV,eAAA;EAK8B;EAH9B,UAAA;AAAA;AAAA,UAGe,eAAA;EAIf;EAFA,IAAA;EAIU;EAFV,aAAA;EAMA;EAJA,QAAA,EAAU,MAAA;EAQV;EANA,eAAA;EAMiB;EAJjB,aAAA;EAgF8B;EA9E9B,cAAA;EA8E+D;EA5E/D,iBAAA;AAAA;;;;;AA2JF;;;;;;;iBA/EgB,gBAAA,CAAiB,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU,OAAA;;;;;;;;;iBA+E1C,iBAAA,CACd,IAAA,EAAM,OAAA,EACN,KAAA,GAAQ,MAAA,SAAe,aAAA,GACvB,UAAA,GAAa,MAAA,mBACZ,iBAAA;;;;;;AA3OH;;;;cCPa,UAAA,SAAmB,KAAA;EAAA,SACrB,IAAA;cAEG,OAAA,UAAiB,IAAA;AAAA;;cASlB,YAAA,SAAqB,UAAA;EAAA,SACvB,QAAA;cAEG,OAAA,UAAiB,IAAA,UAAc,QAAA;AAAA;;cAQhC,cAAA,SAAuB,UAAA;cACtB,OAAA,UAAiB,IAAA;AAAA;;cAOlB,WAAA,SAAoB,UAAA;cACnB,OAAA,UAAiB,IAAA;AAAA;;cAOlB,eAAA,SAAwB,WAAA;cACvB,OAAA,UAAiB,IAAA;AAAA;;cAOlB,0BAAA,SAAmC,WAAA;cAClC,OAAA,UAAiB,IAAA;AAAA;;cAOlB,cAAA,SAAuB,UAAA;cACtB,OAAA,UAAiB,IAAA;AAAA;;cAOlB,aAAA,SAAsB,UAAA;cACrB,OAAA,UAAiB,IAAA;AAAA;;cAOlB,aAAA,SAAsB,UAAA;cACrB,OAAA,UAAiB,IAAA;AAAA;;;UC5Ed,aAAA;EACf,IAAA;EACA,OAAA;EACA,YAAA;EACA,eAAA;EFWA;EETA,eAAA;EFWQ;EETR,iBAAA;AAAA;AAAA,UAGe,cAAA;EACf,SAAA;EACA,eAAA;EACA,IAAA,EAAM,OAAA;EACN,SAAA;EACA,UAAA,GAAa,UAAA;EACb,aAAA,GAAgB,aAAA;EFoBC;EElBjB,kBAAA,GAAqB,iBAAA;EFgBrB;EEdA,SAAA;EFgBW;;;;;;AAiBb;EEzBE,wBAAA,GAA2B,GAAA;AAAA;AAAA,UAGZ,aAAA;EF0BN;EExBT,GAAA;EFgCU;EE9BV,IAAA;EF8BgB;EE5BhB,SAAA;AAAA;AAAA,UAGe,OAAA;EACf,QAAA;EAEA,cAAA,CAAe,MAAA,EAAQ,KAAA,IAAS,GAAA,EAAK,cAAA,GAAiB,aAAA;EAEtD,aAAA,CAAc,KAAA,EAAO,IAAA,IAAQ,GAAA,EAAK,cAAA,GAAiB,aAAA;EAEnD,iBAAA,CAAkB,QAAA,EAAU,OAAA,IAAW,GAAA,EAAK,cAAA,GAAiB,aAAA;EAE7D,cAAA,CAAe,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,cAAA,GAAiB,aAAA;EAEpD,cAAA,CAAe,GAAA,EAAK,cAAA,GAAiB,aAAA;EAErC,sBAAA,EAAwB,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,cAAA,GAAiB,aAAA;EAE7D,aAAA,CAAc,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,cAAA,GAAiB,aAAA;EFcnD;EEXA,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,cAAA,GAAiB,aAAA;EAEvD,UAAA;EFYe;;;;;;EEJf,aAAA,EAAe,SAAA,WAAoB,aAAA;AAAA;;;UCzEpB,UAAA;EACf,UAAA;EACA,UAAA;EACA,OAAA,EAAS,MAAA;EACT,OAAA;IACE,KAAA;IACA,OAAA;IACA,QAAA;IACA,QAAA;IACA,QAAA;EAAA;AAAA;AAAA,KAIQ,MAAA,GACR,UAAA,GACA,YAAA,GACA,aAAA,GACA,SAAA,GACA,WAAA,GACA,YAAA,GACA,YAAA,GACA,cAAA,GACA,cAAA,GACA,gBAAA,GACA,iBAAA;AAAA,UAEa,UAAA;EACf,IAAA;EACA,IAAA;EACA,cAAA;AAAA;AAAA,UAGe,YAAA;EACf,IAAA;EACA,IAAA;EACA,cAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;EACA,IAAA;EACA,YAAA,EAAc,WAAA;EACd,cAAA;AAAA;AAAA,UAGe,WAAA;EACf,IAAA;EACA,SAAA;EACA,cAAA;EACA,OAAA;AAAA;AAAA,UAGe,SAAA;EACf,IAAA;EACA,IAAA;EACA,cAAA;AAAA;AAAA,UAGe,WAAA;EACf,IAAA;EACA,IAAA;EACA,cAAA;AAAA;AAAA,UAGe,YAAA;EACf,IAAA;EACA,IAAA;EACA,YAAA,EAAc,eAAA;EACd,cAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;EACA,SAAA;EACA,cAAA;EACA,OAAA;AAAA;AAAA,UAGe,YAAA;EACf,IAAA;EACA,IAAA;EACA,cAAA;AAAA;AAAA,UAGe,cAAA;EACf,IAAA;EACA,IAAA;EACA,cAAA;AAAA;AAAA,UAGe,cAAA;EACf,IAAA;EACA,WAAA;EACA,aAAA;EACA,cAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,WAAA;EACA,aAAA;EACA,cAAA;AAAA;AAAA,UAGe,iBAAA;EACf,IAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA,EAAc,WAAA;EACd,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,WAAA;EACA,gBAAA;EACA,2BAAA;EACA,aAAA;EACA,cAAA;AAAA;AAAA,UAGe,WAAA;EACf,IAAA;EACA,SAAA;EACA,cAAA;AAAA;;;UC5Ge,YAAA;EACf,oBAAA,IAAwB,EAAA;EACxB,mBAAA,IAAuB,IAAA;AAAA;AAAA,iBAGH,SAAA,CAAU,QAAA,UAAkB,OAAA,GAAU,YAAA,GAAe,OAAA,CAAQ,OAAA;;;iBCT7D,QAAA,CACpB,IAAA,EAAM,OAAA,EACN,OAAA,EAAS,OAAA,EACT,OAAA;EACE,SAAA;EACA,MAAA;EACA,SAAA;EACA,MAAA;EACA,UAAA,GAAa,UAAA;EACb,aAAA,GAAgB,aAAA;EAChB,cAAA,GAAiB,MAAA,SAAe,aAAA;EAChC,UAAA,GAAa,MAAA,kBLIf;EKFE,OAAA;AAAA,IAED,OAAA,CAAQ,aAAA;;;iBCjBK,mBAAA,CACd,IAAA,EAAM,OAAA,EACN,OAAA;EACE,SAAA;EACA,SAAA;EACA,UAAA,GAAa,UAAA;EACb,aAAA,GAAgB,aAAA;EAChB,cAAA,GAAiB,MAAA,SAAe,aAAA;EAChC,UAAA,GAAa,MAAA;EACb,MAAA;EACA,wBAAA,GAA2B,GAAA;AAAA,IAE5B,cAAA;;;;ANeH;;iBMIgB,sBAAA,CACd,QAAA,EAAU,OAAA,IACV,MAAA,EAAQ,KAAA;EACL,MAAA,EAAQ,GAAA;EAAa,KAAA,EAAO,GAAA;AAAA;;iBAuEjB,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,GAAA,EAAK,cAAA,GAAiB,aAAA;;iBAmBxE,gBAAA,CAAiB,KAAA,EAAO,aAAA,IAAiB,MAAA,WAAiB,aAAA;AAAA,iBAS1D,aAAA,CACd,IAAA,EAAM,OAAA,EACN,OAAA,EAAS,OAAA,EACT,OAAA;EACE,SAAA;EACA,SAAA;EACA,UAAA,GAAa,UAAA;EACb,aAAA,GAAgB,aAAA;EAChB,cAAA,GAAiB,MAAA,SAAe,aAAA;EAChC,UAAA,GAAa,MAAA;EACb,MAAA;EACA,wBAAA,GAA2B,GAAA;AAAA;EAE1B,KAAA,EAAO,aAAA;EAAiB,GAAA,EAAK,cAAA;EAAgB,MAAA;AAAA;;;UC3IjC,WAAA;EACf,OAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,OAAA;AAAA;;;;APLF;;;iBQ0CsB,cAAA,CAAe,KAAA,EAAO,aAAA,IAAiB,QAAA,WAAmB,OAAA,CAAQ,aAAA;AAAA,iBAiFxE,4BAAA,CAA6B,KAAA,EAAO,aAAA,IAAiB,QAAA,WAAmB,aAAA;AAAA,UAyEvE,eAAA,SAAwB,WAAA;ER9LvC;EQgMA,YAAA;AAAA;AAAA,iBAGoB,uBAAA,CAAwB,IAAA;EAC5C,KAAA,EAAO,aAAA;EACP,QAAA;EACA,SAAA;EACA,MAAA;AAAA,IACE,OAAA,CAAQ,eAAA;;;iBCxNI,eAAA,CAAgB,OAAA,EAAS,OAAA;AAAA,iBAIzB,UAAA,CAAW,QAAA,WAAmB,OAAA;;;iBCJ9B,SAAA,CAAU,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,OAAA,GAAU,UAAA;;;cCuDlD,WAAA,EAAW,GAAA;AAAA,iBAER,YAAA,CAAa,CAAA,UAAW,QAAA,GAAW,GAAA;AAAA,iBAanC,WAAA,CAAY,CAAA,UAAW,QAAA,GAAW,GAAA;AAAA,iBAelC,WAAA,CAAY,CAAA;AAAA,iBAMZ,WAAA,CAAY,CAAA;AAAA,iBAMZ,gBAAA,CAAiB,CAAA;AAAA,iBAiBjB,oBAAA,CAAqB,IAAA;AAAA,iBAqErB,eAAA,CAAgB,IAAA;;;UCzLf,aAAA;EACf,SAAA,EAAW,SAAA;EACX,QAAA;EACA,OAAA;EACA,gBAAA;EACA,mBAAA;EACA,WAAA;EACA,iBAAA;EZWA;;EYRA,sBAAA;EACA,eAAA;EZWA;;;EYPA,eAAA;EACA,cAAA;EACA,OAAA;AAAA;AAAA,iBAGc,aAAA,CAAc,EAAA,EAAI,SAAA,GAAY,aAAA;;;UCf7B,WAAA;EACf,QAAA,GAAW,OAAA;EACX,UAAA,GAAa,SAAA;EbaI;EaXjB,cAAA;EbOA;EaLA,YAAA,GAAe,MAAA;EbOP;;;;;;EaAR,oBAAA,IAAwB,EAAA;EbcT;;;;;;EaPf,mBAAA,IAAuB,IAAA;EbaZ;;EaVX,MAAA;EboBA;;;AAOF;;EarBE,cAAA,GAAiB,MAAA,SAAe,aAAA;EbuBrB;;;;;;EahBX,UAAA,GAAa,MAAA;AAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A as walkTypeRef, C as assertNever, D as collectModelRefs, E as collectFieldDependencies, O as collectRequestBodyModels, S as SpecParseError, T as collectEnumRefs, _ as ConfigVersionMismatchError, a as singularize, b as OagenError, c as stripListItemMarkers, d as toPascalCase, f as toSnakeCase, g as ConfigLoadError, h as ConfigError, k as mapTypeRef, l as toCamelCase, m as CommandError, n as ACRONYM_SET, p as toUpperSnakeCase, r as cleanSchemaName, s as stripBackendPrefixes, u as toKebabCase, v as ExtractorError, w as assignModelsToServices, x as RegistryError, y as InternalError } from "./tree-sitter-C53w_0WE.mjs";
|
|
2
|
-
import { a as integrateGeneratedFiles, c as applyFileHeaders, d as generateAllFiles, f as generateFiles, i as generate, l as buildEmitterContext, m as resolveOperations, n as getEmitter, o as mapFilesForTargetIntegration, p as deriveMethodName, r as registerEmitter, s as treeShakeFiles, t as diffSpecs, u as collectReferencedNames } from "./diff-
|
|
2
|
+
import { a as integrateGeneratedFiles, c as applyFileHeaders, d as generateAllFiles, f as generateFiles, i as generate, l as buildEmitterContext, m as resolveOperations, n as getEmitter, o as mapFilesForTargetIntegration, p as deriveMethodName, r as registerEmitter, s as treeShakeFiles, t as diffSpecs, u as collectReferencedNames } from "./diff-CltJMcwG.mjs";
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
import { pathToFileURL } from "node:url";
|
|
@@ -432,6 +432,86 @@ function buildFieldFromSchema(fieldName, fieldSchema, contextName, requiredSet)
|
|
|
432
432
|
example: fieldSchema.example
|
|
433
433
|
};
|
|
434
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* If every non-null oneOf/anyOf variant is a string-valued const, return the
|
|
437
|
+
* list of those const values so the union can collapse into a single enum.
|
|
438
|
+
* Returns null when any variant isn't a pure string-const (model ref,
|
|
439
|
+
* number const, nullable, etc.).
|
|
440
|
+
*/
|
|
441
|
+
function collectLiteralStringConsts(variants) {
|
|
442
|
+
if (variants.length === 0) return null;
|
|
443
|
+
const values = [];
|
|
444
|
+
for (const v of variants) {
|
|
445
|
+
if (typeof v.const === "string") {
|
|
446
|
+
values.push(v.const);
|
|
447
|
+
continue;
|
|
448
|
+
}
|
|
449
|
+
if (Array.isArray(v.enum) && v.enum.length === 1 && typeof v.enum[0] === "string") {
|
|
450
|
+
values.push(v.enum[0]);
|
|
451
|
+
continue;
|
|
452
|
+
}
|
|
453
|
+
return null;
|
|
454
|
+
}
|
|
455
|
+
return values;
|
|
456
|
+
}
|
|
457
|
+
/** Build an EnumRef the same way the regular enum path does for naming. */
|
|
458
|
+
function buildSyntheticEnumRef(values, contextName, parentModelName) {
|
|
459
|
+
const baseName = toPascalCase(contextName ?? "UnknownEnum");
|
|
460
|
+
const cleanParent = parentModelName ? stripListItemMarkers(parentModelName) : void 0;
|
|
461
|
+
return {
|
|
462
|
+
kind: "enum",
|
|
463
|
+
name: cleanParent && !baseName.startsWith(cleanParent) ? `${cleanParent}${baseName}` : baseName,
|
|
464
|
+
values
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Detect an implicit discriminator on an oneOf where every variant is an
|
|
469
|
+
* object schema that pins the same property to a const value. Returns
|
|
470
|
+
* { property, mapping } so the IR can represent the union as discriminated
|
|
471
|
+
* without needing an explicit `discriminator:` key in the spec.
|
|
472
|
+
*
|
|
473
|
+
* Both shapes are supported:
|
|
474
|
+
* { properties: { event: { const: "x" } }, required: ["event"] }
|
|
475
|
+
* { properties: { event: { type: "string", enum: ["x"] } } }
|
|
476
|
+
*
|
|
477
|
+
* Returns null when any variant doesn't fit the pattern or when variants
|
|
478
|
+
* disagree on which property carries the discriminator.
|
|
479
|
+
*/
|
|
480
|
+
function detectConstPropertyDiscriminator(variants) {
|
|
481
|
+
if (variants.length < 2) return null;
|
|
482
|
+
let candidateProperty = null;
|
|
483
|
+
const candidates = Object.keys(variants[0]?.properties ?? {});
|
|
484
|
+
for (const propName of candidates) if (variants.every((v) => getConstPropertyValue(v, propName) !== null)) {
|
|
485
|
+
candidateProperty = propName;
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
if (!candidateProperty) return null;
|
|
489
|
+
const mapping = {};
|
|
490
|
+
for (const v of variants) {
|
|
491
|
+
const value = getConstPropertyValue(v, candidateProperty);
|
|
492
|
+
if (value === null) return null;
|
|
493
|
+
const variantName = resolveVariantModelName(v);
|
|
494
|
+
if (!variantName) return null;
|
|
495
|
+
mapping[value] = variantName;
|
|
496
|
+
}
|
|
497
|
+
return {
|
|
498
|
+
property: candidateProperty,
|
|
499
|
+
mapping
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
function getConstPropertyValue(schema, property) {
|
|
503
|
+
const prop = schema.properties?.[property];
|
|
504
|
+
if (!prop) return null;
|
|
505
|
+
if (typeof prop.const === "string") return prop.const;
|
|
506
|
+
if (Array.isArray(prop.enum) && prop.enum.length === 1 && typeof prop.enum[0] === "string") return prop.enum[0];
|
|
507
|
+
return null;
|
|
508
|
+
}
|
|
509
|
+
function resolveVariantModelName(schema) {
|
|
510
|
+
if (schema.$ref) return resolveSchemaName(schema.$ref.replace(/^#\/components\/schemas\//, ""));
|
|
511
|
+
const title = typeof schema["title"] === "string" ? schema["title"] : null;
|
|
512
|
+
if (title) return resolveSchemaName(title);
|
|
513
|
+
return null;
|
|
514
|
+
}
|
|
435
515
|
function extractEnum(name, schema) {
|
|
436
516
|
return {
|
|
437
517
|
name,
|
|
@@ -655,6 +735,15 @@ function schemaToTypeRef(schema, contextName, parentModelName) {
|
|
|
655
735
|
kind: "nullable",
|
|
656
736
|
inner: schemaToTypeRef(nonNullVariants[0], contextName, parentModelName)
|
|
657
737
|
};
|
|
738
|
+
const literalStrings = collectLiteralStringConsts(nonNullVariants);
|
|
739
|
+
if (literalStrings !== null && literalStrings.length >= 2) {
|
|
740
|
+
const enumRef = buildSyntheticEnumRef(literalStrings, contextName, parentModelName);
|
|
741
|
+
return nullVariant ? {
|
|
742
|
+
kind: "nullable",
|
|
743
|
+
inner: enumRef
|
|
744
|
+
} : enumRef;
|
|
745
|
+
}
|
|
746
|
+
const syntheticDiscriminator = !schema.discriminator && compositionKind === "oneOf" ? detectConstPropertyDiscriminator(nonNullVariants) : null;
|
|
658
747
|
const variants = rawVariants.filter((v) => v.type !== "null").map((v) => schemaToTypeRef(v, contextName, parentModelName));
|
|
659
748
|
const hasNull = !!nullVariant;
|
|
660
749
|
const union = {
|
|
@@ -664,7 +753,7 @@ function schemaToTypeRef(schema, contextName, parentModelName) {
|
|
|
664
753
|
...schema.discriminator ? { discriminator: {
|
|
665
754
|
property: schema.discriminator.propertyName,
|
|
666
755
|
mapping: Object.fromEntries(Object.entries(schema.discriminator.mapping ?? {}).map(([k, v]) => [k, v.replace(/^#\/components\/schemas\//, "")]))
|
|
667
|
-
} } : {}
|
|
756
|
+
} } : syntheticDiscriminator ? { discriminator: syntheticDiscriminator } : {}
|
|
668
757
|
};
|
|
669
758
|
return hasNull ? {
|
|
670
759
|
kind: "nullable",
|
|
@@ -1833,6 +1922,7 @@ function planOperation(op) {
|
|
|
1833
1922
|
responseModelName,
|
|
1834
1923
|
paginatedItemModelName: isPaginated && op.pagination?.itemType.kind === "model" ? op.pagination.itemType.name : null,
|
|
1835
1924
|
isModelResponse: responseModelName !== null,
|
|
1925
|
+
isArrayResponse: !isPaginated && op.response.kind === "array" && op.response.items.kind === "model",
|
|
1836
1926
|
hasQueryParams,
|
|
1837
1927
|
isAsync: op.async ?? true
|
|
1838
1928
|
};
|