@postman/sdk-config 0.0.0 → 0.0.2

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.
@@ -0,0 +1,833 @@
1
+ import { z } from 'zod';
2
+ import semver from 'semver';
3
+
4
+ // src/sdk-config-ir/v1/api.ts
5
+ var nonEmptyStringSchema = z.string().min(1);
6
+ var exactSemverSchema = z.string().refine(
7
+ (value) => {
8
+ if (value.trim() !== value || !/^\d/.test(value)) {
9
+ return false;
10
+ }
11
+ const parsed = semver.parse(value, { loose: false });
12
+ return parsed?.raw === value;
13
+ },
14
+ { message: "must be an exact semantic version" }
15
+ );
16
+ var jsonValueSchema = z.lazy(
17
+ () => z.union([
18
+ z.null(),
19
+ z.boolean(),
20
+ z.number(),
21
+ z.string(),
22
+ z.array(jsonValueSchema),
23
+ z.record(z.string(), jsonValueSchema)
24
+ ])
25
+ );
26
+ var jsonObjectSchema = z.record(z.string(), jsonValueSchema);
27
+
28
+ // src/sdk-config-ir/v1/api.ts
29
+ var authVariableSchema = z.strictObject({
30
+ name: nonEmptyStringSchema.optional(),
31
+ environmentVariable: nonEmptyStringSchema.optional(),
32
+ description: z.string().optional(),
33
+ omit: z.boolean().optional()
34
+ });
35
+ var apiKeyAuthSchema = z.strictObject({
36
+ id: nonEmptyStringSchema,
37
+ type: z.literal("api-key"),
38
+ location: z.enum(["header", "query", "cookie"]),
39
+ name: nonEmptyStringSchema,
40
+ prefix: nonEmptyStringSchema.optional(),
41
+ environmentVariable: nonEmptyStringSchema.optional(),
42
+ description: z.string().optional()
43
+ });
44
+ var bearerAuthSchema = z.strictObject({
45
+ id: nonEmptyStringSchema,
46
+ type: z.literal("bearer"),
47
+ header: nonEmptyStringSchema.optional(),
48
+ prefix: nonEmptyStringSchema.optional(),
49
+ environmentVariable: nonEmptyStringSchema.optional(),
50
+ description: z.string().optional()
51
+ });
52
+ var basicAuthSchema = z.strictObject({
53
+ id: nonEmptyStringSchema,
54
+ type: z.literal("basic"),
55
+ username: authVariableSchema.optional(),
56
+ password: authVariableSchema.optional(),
57
+ description: z.string().optional()
58
+ });
59
+ var oauthScopeSchema = z.strictObject({
60
+ name: nonEmptyStringSchema,
61
+ description: z.string().optional()
62
+ });
63
+ var oauthFlowSchema = z.discriminatedUnion("type", [
64
+ z.strictObject({
65
+ type: z.literal("authorization-code"),
66
+ authorizationUrl: nonEmptyStringSchema,
67
+ tokenUrl: nonEmptyStringSchema,
68
+ refreshUrl: nonEmptyStringSchema.optional(),
69
+ scopes: z.array(oauthScopeSchema).optional()
70
+ }),
71
+ z.strictObject({
72
+ type: z.literal("client-credentials"),
73
+ tokenUrl: nonEmptyStringSchema,
74
+ refreshUrl: nonEmptyStringSchema.optional(),
75
+ scopes: z.array(oauthScopeSchema).optional()
76
+ }),
77
+ z.strictObject({
78
+ type: z.literal("implicit"),
79
+ authorizationUrl: nonEmptyStringSchema,
80
+ refreshUrl: nonEmptyStringSchema.optional(),
81
+ scopes: z.array(oauthScopeSchema).optional()
82
+ }),
83
+ z.strictObject({
84
+ type: z.literal("password"),
85
+ tokenUrl: nonEmptyStringSchema,
86
+ refreshUrl: nonEmptyStringSchema.optional(),
87
+ scopes: z.array(oauthScopeSchema).optional()
88
+ })
89
+ ]);
90
+ var oauth2AuthSchema = z.strictObject({
91
+ id: nonEmptyStringSchema,
92
+ type: z.literal("oauth2"),
93
+ flows: z.array(oauthFlowSchema).min(1),
94
+ clientId: authVariableSchema.optional(),
95
+ clientSecret: authVariableSchema.optional(),
96
+ tokenHeader: nonEmptyStringSchema.optional(),
97
+ tokenPrefix: nonEmptyStringSchema.optional(),
98
+ refreshBufferSeconds: z.number().nonnegative().optional(),
99
+ description: z.string().optional()
100
+ });
101
+ var customAuthParameterSchema = z.strictObject({
102
+ location: z.enum(["header", "query", "cookie"]),
103
+ name: nonEmptyStringSchema,
104
+ prefix: nonEmptyStringSchema.optional(),
105
+ environmentVariable: nonEmptyStringSchema.optional()
106
+ });
107
+ var customAuthSchema = z.strictObject({
108
+ id: nonEmptyStringSchema,
109
+ type: z.literal("custom"),
110
+ parameters: z.array(customAuthParameterSchema).min(1),
111
+ description: z.string().optional()
112
+ });
113
+ var authSchemeSchema = z.discriminatedUnion("type", [
114
+ apiKeyAuthSchema,
115
+ bearerAuthSchema,
116
+ basicAuthSchema,
117
+ oauth2AuthSchema,
118
+ customAuthSchema
119
+ ]);
120
+ var authRequirementSchema = z.strictObject({
121
+ schemes: z.array(nonEmptyStringSchema).min(1)
122
+ });
123
+ var authConfigSchema = z.strictObject({
124
+ schemes: z.array(authSchemeSchema).min(1),
125
+ requirements: z.array(authRequirementSchema).optional(),
126
+ endpointSecurity: z.boolean().optional()
127
+ }).superRefine(({ requirements, schemes }, context) => {
128
+ const schemeIds = /* @__PURE__ */ new Set();
129
+ schemes.forEach(({ id }, index) => {
130
+ if (schemeIds.has(id)) {
131
+ context.addIssue({
132
+ code: "custom",
133
+ message: `auth scheme id "${id}" must be unique`,
134
+ path: ["schemes", index, "id"]
135
+ });
136
+ }
137
+ schemeIds.add(id);
138
+ });
139
+ requirements?.forEach((requirement, requirementIndex) => {
140
+ requirement.schemes.forEach((schemeId, schemeIndex) => {
141
+ if (!schemeIds.has(schemeId)) {
142
+ context.addIssue({
143
+ code: "custom",
144
+ message: `auth requirement references unknown scheme "${schemeId}"`,
145
+ path: ["requirements", requirementIndex, "schemes", schemeIndex]
146
+ });
147
+ }
148
+ });
149
+ });
150
+ });
151
+ var environmentUrlSchema = z.strictObject({
152
+ name: nonEmptyStringSchema,
153
+ url: nonEmptyStringSchema,
154
+ serverName: nonEmptyStringSchema.optional()
155
+ });
156
+ var environmentSchema = z.strictObject({
157
+ name: nonEmptyStringSchema,
158
+ urls: z.array(environmentUrlSchema).min(1),
159
+ description: z.string().optional()
160
+ });
161
+ var headerSchema = z.strictObject({
162
+ name: nonEmptyStringSchema,
163
+ value: z.string().optional(),
164
+ description: z.string().optional(),
165
+ environmentVariable: nonEmptyStringSchema.optional()
166
+ });
167
+ var environmentVariableSchema = z.strictObject({
168
+ name: nonEmptyStringSchema,
169
+ description: z.string().optional(),
170
+ defaultValue: z.string().optional()
171
+ });
172
+ var apiConfigSchema = z.strictObject({
173
+ baseUrl: nonEmptyStringSchema.optional(),
174
+ defaultEnvironment: nonEmptyStringSchema.optional(),
175
+ environments: z.array(environmentSchema).optional(),
176
+ auth: authConfigSchema.optional(),
177
+ headers: z.array(headerSchema).optional(),
178
+ environmentVariables: z.array(environmentVariableSchema).optional()
179
+ });
180
+ var retryConfigSchema = z.strictObject({
181
+ enabled: z.boolean(),
182
+ maxAttempts: z.number().int().min(1).optional(),
183
+ retryDelayMs: z.number().nonnegative().optional(),
184
+ maxDelayMs: z.number().nonnegative().optional(),
185
+ jitterMs: z.number().nonnegative().optional(),
186
+ backoffFactor: z.number().positive().optional(),
187
+ statusCodes: z.array(z.number().int().min(100).max(599)).optional(),
188
+ methods: z.array(nonEmptyStringSchema).optional(),
189
+ statusCodeProfile: z.enum(["legacy", "recommended"]).optional()
190
+ }).superRefine(({ maxDelayMs, retryDelayMs }, context) => {
191
+ if (maxDelayMs !== void 0 && retryDelayMs !== void 0 && maxDelayMs < retryDelayMs) {
192
+ context.addIssue({
193
+ code: "custom",
194
+ message: "maxDelayMs must be greater than or equal to retryDelayMs",
195
+ path: ["maxDelayMs"]
196
+ });
197
+ }
198
+ });
199
+ var constructorParameterSchema = z.strictObject({
200
+ name: nonEmptyStringSchema,
201
+ example: z.string().optional(),
202
+ description: z.string().optional(),
203
+ required: z.boolean().optional()
204
+ });
205
+ var parameterStyleSchema = z.enum(["wrapped", "inline", "language-default"]);
206
+ var tokenRefreshConfigSchema = z.strictObject({
207
+ enabled: z.boolean(),
208
+ endpoint: nonEmptyStringSchema.optional(),
209
+ accessTokenField: nonEmptyStringSchema.optional(),
210
+ refreshTokenField: nonEmptyStringSchema.optional()
211
+ }).superRefine(({ enabled, endpoint }, context) => {
212
+ if (enabled && endpoint === void 0) {
213
+ context.addIssue({
214
+ code: "custom",
215
+ message: "endpoint is required when tokenRefresh is enabled",
216
+ path: ["endpoint"]
217
+ });
218
+ }
219
+ });
220
+ var clientConfigSchema = z.strictObject({
221
+ retry: retryConfigSchema.optional(),
222
+ timeoutMs: z.union([z.number().nonnegative(), z.literal("infinity")]).optional(),
223
+ responseHeaders: z.boolean().optional(),
224
+ responseValidation: z.boolean().optional(),
225
+ requestParameterStyle: parameterStyleSchema.optional(),
226
+ pathParameterStyle: parameterStyleSchema.optional(),
227
+ filePropertyStyle: parameterStyleSchema.optional(),
228
+ useDefaultRequestParameterValues: z.boolean().optional(),
229
+ additionalConstructorParameters: z.array(constructorParameterSchema).optional(),
230
+ tokenRefresh: tokenRefreshConfigSchema.optional(),
231
+ multiTenant: z.boolean().optional()
232
+ });
233
+ var unsupportedFieldSchema = z.strictObject({
234
+ source: z.enum(["fern", "postman", "sdk-config-ir"]),
235
+ path: z.array(z.union([nonEmptyStringSchema, z.number().int().nonnegative()])).min(1),
236
+ code: nonEmptyStringSchema.optional(),
237
+ reason: nonEmptyStringSchema,
238
+ severity: z.enum(["error", "warning", "info"]),
239
+ risk: z.enum(["high", "medium", "low"]),
240
+ owner: nonEmptyStringSchema,
241
+ suggestedAction: nonEmptyStringSchema
242
+ });
243
+ var postmanLegacyInputSchema = z.strictObject({
244
+ kind: z.literal("postman-build-parameters"),
245
+ value: jsonObjectSchema
246
+ });
247
+ var fernLegacyInputSchema = z.strictObject({
248
+ kind: z.literal("fern-generator-invocation"),
249
+ value: jsonObjectSchema
250
+ });
251
+ var legacyInputSchema = z.discriminatedUnion("kind", [
252
+ postmanLegacyInputSchema,
253
+ fernLegacyInputSchema
254
+ ]);
255
+ var compatibilityConfigSchema = z.strictObject({
256
+ outputProfile: z.enum(["converged", "postman-legacy", "fern-legacy"]),
257
+ legacyInput: legacyInputSchema.optional(),
258
+ unsupportedFields: z.array(unsupportedFieldSchema).optional()
259
+ });
260
+ var httpMethodSchema = z.enum([
261
+ "GET",
262
+ "POST",
263
+ "PUT",
264
+ "PATCH",
265
+ "DELETE",
266
+ "HEAD",
267
+ "OPTIONS",
268
+ "TRACE",
269
+ "CONNECT"
270
+ ]);
271
+ var readmeEndpointSchema = z.strictObject({
272
+ method: httpMethodSchema,
273
+ path: nonEmptyStringSchema,
274
+ stream: z.boolean().optional()
275
+ });
276
+ var readmeConfigSchema = z.strictObject({
277
+ apiName: nonEmptyStringSchema.optional(),
278
+ introduction: z.string().optional(),
279
+ apiReferenceLink: nonEmptyStringSchema.optional(),
280
+ bannerLink: nonEmptyStringSchema.optional(),
281
+ disabledSections: z.array(nonEmptyStringSchema).optional(),
282
+ defaultEndpoint: readmeEndpointSchema.optional(),
283
+ features: z.record(z.string(), z.array(readmeEndpointSchema)).optional()
284
+ });
285
+ var snippetsConfigSchema = z.strictObject({
286
+ enabled: z.boolean(),
287
+ format: z.enum(["md", "json"]).optional(),
288
+ outputPath: nonEmptyStringSchema.optional()
289
+ });
290
+ var docsConfigSchema = z.strictObject({
291
+ readme: readmeConfigSchema.optional(),
292
+ snippets: snippetsConfigSchema.optional(),
293
+ referenceBaseUrl: nonEmptyStringSchema.optional(),
294
+ includeApiReference: z.boolean().optional()
295
+ });
296
+ var cliGenerationConfigSchema = z.strictObject({
297
+ paginationParameters: z.array(nonEmptyStringSchema).optional(),
298
+ skills: z.boolean().optional()
299
+ });
300
+ var csharpGenerationConfigSchema = z.strictObject({
301
+ useOptionalWrapper: z.boolean().optional(),
302
+ simplifyObjectDictionaries: z.boolean().optional(),
303
+ explicitNamespaces: z.boolean().optional(),
304
+ rootNamespaceForCoreClasses: z.boolean().optional(),
305
+ includeExceptionHandler: z.boolean().optional()
306
+ });
307
+ var goGenerationConfigSchema = z.strictObject({
308
+ legacyComplexModels: z.boolean().optional(),
309
+ unionVersion: z.enum(["v0", "v1"]).optional(),
310
+ includeLegacyClientOptions: z.boolean().optional()
311
+ });
312
+ var jvmGenerationConfigSchema = z.strictObject({
313
+ packageLayout: z.enum(["flat", "nested"]).optional(),
314
+ useLocalDateForDates: z.boolean().optional(),
315
+ collapseOptionalNullable: z.boolean().optional(),
316
+ gradleDistributionUrl: z.string().min(1).optional(),
317
+ gradlePluginManagement: z.string().optional(),
318
+ gradleCentralDependencyManagement: z.boolean().optional()
319
+ });
320
+
321
+ // src/sdk-config-ir/v1/language/java.ts
322
+ var javaGenerationConfigSchema = jvmGenerationConfigSchema.extend({
323
+ includeKotlinSnippets: z.boolean().optional()
324
+ });
325
+
326
+ // src/sdk-config-ir/v1/language/kotlin.ts
327
+ var kotlinGenerationConfigSchema = jvmGenerationConfigSchema;
328
+ var phpGenerationConfigSchema = z.strictObject({
329
+ propertyAccess: z.enum(["public", "private"]).optional(),
330
+ generateClientInterfaces: z.boolean().optional()
331
+ });
332
+ var pythonClientSchema = z.strictObject({
333
+ fileName: nonEmptyStringSchema.optional(),
334
+ exportedFileName: nonEmptyStringSchema.optional()
335
+ });
336
+ var pydanticConfigSchema = z.strictObject({
337
+ versionCompatibility: z.enum(["v1", "v2", "both", "v1-on-v2"]).optional(),
338
+ frozen: z.boolean().optional(),
339
+ requireOptionalFields: z.boolean().optional(),
340
+ unionNaming: z.enum(["v0", "v1"]).optional(),
341
+ useFieldAliases: z.boolean().optional()
342
+ });
343
+ var pythonGenerationConfigSchema = z.strictObject({
344
+ pythonVersion: nonEmptyStringSchema.optional(),
345
+ pydanticVersion: nonEmptyStringSchema.optional(),
346
+ pydantic: pydanticConfigSchema.optional(),
347
+ client: pythonClientSchema.optional(),
348
+ alwaysInitializeOptionals: z.boolean().optional(),
349
+ useTypedDictRequests: z.boolean().optional()
350
+ });
351
+ var rubyGenerationConfigSchema = z.strictObject({
352
+ requirePaths: z.array(nonEmptyStringSchema).optional()
353
+ });
354
+ var rustGenerationConfigSchema = z.strictObject({
355
+ /**
356
+ * Rust type for datetime primitives. `offset` maps to `DateTime<FixedOffset>` and preserves the
357
+ * timezone the payload carried; `utc` maps to `DateTime<Utc>` and normalizes to UTC.
358
+ */
359
+ dateTimeType: z.enum(["offset", "utc"]).optional(),
360
+ /** Uppercase common initialisms in generated names (`UserID` rather than `UserId`). */
361
+ capitalizeInitialisms: z.boolean().optional(),
362
+ /** Cargo features, mapping a feature name to the dependencies or features it enables. */
363
+ features: z.record(z.string(), z.array(nonEmptyStringSchema)).optional(),
364
+ /** Overrides which features make up Cargo's `default` feature set. */
365
+ defaultFeatures: z.array(nonEmptyStringSchema).optional()
366
+ });
367
+ var compilerOptionsSchema = z.strictObject({
368
+ target: nonEmptyStringSchema.optional(),
369
+ module: nonEmptyStringSchema.optional(),
370
+ lib: z.array(nonEmptyStringSchema).optional()
371
+ });
372
+ var packageScriptSchema = z.strictObject({
373
+ name: nonEmptyStringSchema,
374
+ command: nonEmptyStringSchema
375
+ });
376
+ var httpClientSchema = z.strictObject({
377
+ name: z.enum(["axios", "fetch"])
378
+ });
379
+ var typescriptGenerationConfigSchema = z.strictObject({
380
+ typescriptVersion: nonEmptyStringSchema.optional(),
381
+ zodVersion: nonEmptyStringSchema.optional(),
382
+ compilerOptions: compilerOptionsSchema.optional(),
383
+ httpClient: httpClientSchema.optional(),
384
+ packageManager: z.enum(["pnpm", "yarn"]).optional(),
385
+ testFramework: z.enum(["jest", "vitest"]).optional(),
386
+ namingStrategy: z.enum(["base", "originalPropertyNames"]).optional(),
387
+ bundle: z.boolean().optional(),
388
+ exportClassDefault: z.boolean().optional(),
389
+ allowCustomFetcher: z.boolean().optional(),
390
+ useBrandedStringAliases: z.boolean().optional(),
391
+ useLegacyExports: z.boolean().optional(),
392
+ useBigInt: z.boolean().optional(),
393
+ serdeLayer: z.boolean().optional(),
394
+ scripts: z.array(packageScriptSchema).optional()
395
+ });
396
+
397
+ // src/sdk-config-ir/v1/generation.ts
398
+ var generationAssetSchema = z.strictObject({
399
+ type: z.enum(["path", "url", "artifact"]),
400
+ location: nonEmptyStringSchema
401
+ });
402
+ var hookDependencySchema = z.strictObject({
403
+ name: nonEmptyStringSchema,
404
+ version: nonEmptyStringSchema,
405
+ groupId: nonEmptyStringSchema.optional()
406
+ });
407
+ var hooksConfigSchema = z.strictObject({
408
+ enabled: z.boolean(),
409
+ source: generationAssetSchema.optional(),
410
+ dependencies: z.array(hookDependencySchema).optional()
411
+ });
412
+ var customCodeConfigSchema = z.strictObject({
413
+ enabled: z.boolean(),
414
+ source: generationAssetSchema.optional(),
415
+ conflictStrategy: z.enum(["mark", "ours", "theirs"]).optional(),
416
+ trackChanges: z.boolean().optional(),
417
+ previousBuildId: z.number().int().positive().optional(),
418
+ protectedFiles: z.array(nonEmptyStringSchema).optional()
419
+ });
420
+ var workflowConfigSchema = z.strictObject({
421
+ path: nonEmptyStringSchema,
422
+ outputName: nonEmptyStringSchema.optional()
423
+ });
424
+ var analyticsHeaderSchema = z.union([
425
+ z.strictObject({ name: nonEmptyStringSchema, value: z.string() }),
426
+ z.strictObject({ name: nonEmptyStringSchema, valueRef: nonEmptyStringSchema })
427
+ ]);
428
+ var analyticsConfigSchema = z.strictObject({
429
+ enabled: z.boolean(),
430
+ endpoint: nonEmptyStringSchema.optional(),
431
+ exporter: z.enum(["otlp-http", "console"]).optional(),
432
+ headers: z.array(analyticsHeaderSchema).optional(),
433
+ batchSize: z.number().int().positive().optional(),
434
+ scheduledDelayMs: z.number().nonnegative().optional(),
435
+ exportTimeoutMs: z.number().nonnegative().optional()
436
+ }).superRefine(({ enabled, endpoint }, context) => {
437
+ if (enabled && endpoint === void 0) {
438
+ context.addIssue({
439
+ code: "custom",
440
+ message: "endpoint is required when analytics is enabled",
441
+ path: ["endpoint"]
442
+ });
443
+ }
444
+ });
445
+ var wireTestsSchema = z.strictObject({
446
+ enabled: z.boolean(),
447
+ exclusions: z.array(nonEmptyStringSchema).optional(),
448
+ fallbackToGeneratedErrorExamples: z.boolean().optional()
449
+ });
450
+ var streamsSchema = z.strictObject({
451
+ enabled: z.boolean(),
452
+ responseType: z.enum(["wrapper", "native", "web"]).optional(),
453
+ fileResponseType: z.enum(["stream", "binary-response"]).optional(),
454
+ defaultChunkSizeBytes: z.number().int().positive().optional()
455
+ });
456
+ var namingConfigSchema = z.strictObject({
457
+ clientName: nonEmptyStringSchema.optional(),
458
+ exportedClientName: nonEmptyStringSchema.optional(),
459
+ environmentTypeName: nonEmptyStringSchema.optional(),
460
+ apiErrorName: nonEmptyStringSchema.optional(),
461
+ baseErrorName: nonEmptyStringSchema.optional(),
462
+ pagerName: nonEmptyStringSchema.optional()
463
+ });
464
+ var layoutConfigSchema = z.strictObject({
465
+ outputDirectory: z.enum(["project-root", "source-root"]).optional(),
466
+ packagePath: nonEmptyStringSchema.optional()
467
+ });
468
+ var serializationConfigSchema = z.strictObject({
469
+ enumRepresentation: z.enum(["enum", "union", "literal", "forward-compatible-enum", "language-default"]).optional(),
470
+ additionalProperties: z.enum(["allow", "forbid", "ignore", "language-default"]).optional(),
471
+ inlineTypes: z.boolean().optional(),
472
+ omitUndefined: z.boolean().optional()
473
+ });
474
+ var languageGenerationConfigSchema = z.strictObject({
475
+ typescript: typescriptGenerationConfigSchema.optional(),
476
+ python: pythonGenerationConfigSchema.optional(),
477
+ java: javaGenerationConfigSchema.optional(),
478
+ kotlin: kotlinGenerationConfigSchema.optional(),
479
+ go: goGenerationConfigSchema.optional(),
480
+ csharp: csharpGenerationConfigSchema.optional(),
481
+ php: phpGenerationConfigSchema.optional(),
482
+ ruby: rubyGenerationConfigSchema.optional(),
483
+ rust: rustGenerationConfigSchema.optional(),
484
+ cli: cliGenerationConfigSchema.optional()
485
+ });
486
+ var generationConfigSchema = z.strictObject({
487
+ includeWatermark: z.boolean().optional(),
488
+ includeOptionalSnippetParameters: z.boolean().optional(),
489
+ buildAllModels: z.boolean().optional(),
490
+ inferServiceNames: z.boolean().optional(),
491
+ includeDeprecatedOperations: z.boolean().optional(),
492
+ multipleResponses: z.boolean().optional(),
493
+ devContainer: z.boolean().optional(),
494
+ allowMockClient: z.boolean().optional(),
495
+ ignoreFiles: z.array(nonEmptyStringSchema).optional(),
496
+ reservedKeywords: z.array(nonEmptyStringSchema).optional(),
497
+ hooks: hooksConfigSchema.optional(),
498
+ customCode: customCodeConfigSchema.optional(),
499
+ workflows: z.array(workflowConfigSchema).optional(),
500
+ customQueryPaths: z.array(nonEmptyStringSchema).optional(),
501
+ analytics: analyticsConfigSchema.optional(),
502
+ wireTests: wireTestsSchema.optional(),
503
+ webSockets: z.boolean().optional(),
504
+ streams: streamsSchema.optional(),
505
+ naming: namingConfigSchema.optional(),
506
+ layout: layoutConfigSchema.optional(),
507
+ serialization: serializationConfigSchema.optional(),
508
+ language: languageGenerationConfigSchema.optional()
509
+ });
510
+ var publishRegistrySchema = z.enum([
511
+ "npm",
512
+ "pypi",
513
+ "maven",
514
+ "nuget",
515
+ "rubygems",
516
+ "crates",
517
+ "go",
518
+ "composer"
519
+ ]);
520
+ var commonPublishShape = {
521
+ url: nonEmptyStringSchema.optional(),
522
+ credentialsRef: nonEmptyStringSchema.optional(),
523
+ releaseBranch: nonEmptyStringSchema.optional(),
524
+ tolerateRepublish: z.boolean().optional()
525
+ };
526
+ var publishConfigSchema = z.discriminatedUnion("registry", [
527
+ z.strictObject({ registry: z.literal("npm"), ...commonPublishShape }),
528
+ z.strictObject({ registry: z.literal("pypi"), ...commonPublishShape }),
529
+ z.strictObject({ registry: z.literal("nuget"), ...commonPublishShape }),
530
+ z.strictObject({ registry: z.literal("rubygems"), ...commonPublishShape }),
531
+ z.strictObject({ registry: z.literal("crates"), ...commonPublishShape }),
532
+ z.strictObject({ registry: z.literal("go"), ...commonPublishShape }),
533
+ z.strictObject({ registry: z.literal("composer"), ...commonPublishShape }),
534
+ z.strictObject({
535
+ registry: z.literal("maven"),
536
+ signingCredentialsRef: nonEmptyStringSchema.optional(),
537
+ ...commonPublishShape
538
+ })
539
+ ]);
540
+ var reviewersSchema = z.strictObject({
541
+ teams: z.array(nonEmptyStringSchema).optional(),
542
+ users: z.array(nonEmptyStringSchema).optional()
543
+ });
544
+ var githubOutputSchema = z.strictObject({
545
+ repository: nonEmptyStringSchema,
546
+ host: nonEmptyStringSchema.optional(),
547
+ branch: nonEmptyStringSchema.optional(),
548
+ mode: z.enum(["release", "pull-request", "push"]).optional(),
549
+ reviewers: reviewersSchema.optional(),
550
+ credentialsRef: nonEmptyStringSchema.optional(),
551
+ privateRepository: z.boolean().optional()
552
+ });
553
+ var filesOutputSchema = z.strictObject({
554
+ delivery: z.literal("files"),
555
+ path: nonEmptyStringSchema.optional(),
556
+ publish: publishConfigSchema.optional()
557
+ });
558
+ var zipOutputSchema = z.strictObject({
559
+ delivery: z.literal("zip"),
560
+ fileName: nonEmptyStringSchema.optional(),
561
+ publish: publishConfigSchema.optional()
562
+ });
563
+ var githubDeliverySchema = z.strictObject({
564
+ delivery: z.literal("github"),
565
+ github: githubOutputSchema,
566
+ publish: publishConfigSchema.optional()
567
+ });
568
+ var outputConfigSchema = z.discriminatedUnion(
569
+ "delivery",
570
+ [filesOutputSchema, zipOutputSchema, githubDeliverySchema],
571
+ {
572
+ error: 'output.delivery must be one of "files", "zip", or "github"'
573
+ }
574
+ );
575
+ var goModulePathSchema = nonEmptyStringSchema.regex(
576
+ /^(?!.*(?:^|\/)\.{1,2}(?:\/|$))[A-Za-z0-9._~-]+(?:\/[A-Za-z0-9._~-]+)+$/,
577
+ "Go module path must be a slash-delimited path using letters, numbers, dots, dashes, underscores, or tildes"
578
+ );
579
+ var composerPackageNameSchema = nonEmptyStringSchema.regex(
580
+ /^[a-z0-9]([_.-]?[a-z0-9]+)*\/[a-z0-9](([_.]?|-{0,2})[a-z0-9]+)*$/,
581
+ 'Composer package name must be a lowercase "vendor/package" name'
582
+ );
583
+ var authorSchema = z.strictObject({
584
+ name: nonEmptyStringSchema,
585
+ email: z.email().optional()
586
+ });
587
+ var developerSchema = z.strictObject({
588
+ name: nonEmptyStringSchema,
589
+ email: z.email().optional(),
590
+ organization: nonEmptyStringSchema.optional(),
591
+ organizationUrl: nonEmptyStringSchema.optional()
592
+ });
593
+ var licenseSchema = z.strictObject({
594
+ type: nonEmptyStringSchema,
595
+ name: nonEmptyStringSchema.optional(),
596
+ url: nonEmptyStringSchema.optional(),
597
+ path: nonEmptyStringSchema.optional()
598
+ });
599
+ var dependencySourceSchema = z.discriminatedUnion("type", [
600
+ z.strictObject({
601
+ type: z.literal("registry"),
602
+ registry: nonEmptyStringSchema.optional()
603
+ }),
604
+ z.strictObject({
605
+ type: z.literal("git"),
606
+ url: nonEmptyStringSchema,
607
+ ref: nonEmptyStringSchema.optional(),
608
+ subdirectory: nonEmptyStringSchema.optional()
609
+ }),
610
+ z.strictObject({
611
+ type: z.literal("path"),
612
+ path: nonEmptyStringSchema
613
+ })
614
+ ]);
615
+ var dependencySchema = z.strictObject({
616
+ name: nonEmptyStringSchema,
617
+ version: nonEmptyStringSchema.optional(),
618
+ source: dependencySourceSchema.optional(),
619
+ packageName: nonEmptyStringSchema.optional(),
620
+ features: z.array(nonEmptyStringSchema).optional(),
621
+ extras: z.array(nonEmptyStringSchema).optional(),
622
+ optional: z.boolean().optional(),
623
+ defaultFeatures: z.boolean().optional(),
624
+ environmentMarker: nonEmptyStringSchema.optional()
625
+ }).refine(({ source, version }) => source !== void 0 || version !== void 0, {
626
+ message: "dependency must define a version or a source"
627
+ });
628
+ var projectUrlSchema = z.strictObject({
629
+ label: nonEmptyStringSchema,
630
+ url: nonEmptyStringSchema
631
+ });
632
+ var packageConfigSchema = z.strictObject({
633
+ packageName: nonEmptyStringSchema.optional(),
634
+ moduleName: nonEmptyStringSchema.optional(),
635
+ modulePath: goModulePathSchema.optional(),
636
+ namespace: nonEmptyStringSchema.optional(),
637
+ groupId: nonEmptyStringSchema.optional(),
638
+ artifactId: nonEmptyStringSchema.optional(),
639
+ description: z.string().optional(),
640
+ repository: nonEmptyStringSchema.optional(),
641
+ homepage: nonEmptyStringSchema.optional(),
642
+ documentationUrl: nonEmptyStringSchema.optional(),
643
+ authors: z.array(authorSchema).optional(),
644
+ developers: z.array(developerSchema).optional(),
645
+ license: licenseSchema.optional(),
646
+ keywords: z.array(nonEmptyStringSchema).optional(),
647
+ classifiers: z.array(nonEmptyStringSchema).optional(),
648
+ projectUrls: z.array(projectUrlSchema).optional(),
649
+ extraDependencies: z.array(dependencySchema).optional(),
650
+ extraDevDependencies: z.array(dependencySchema).optional(),
651
+ extraPeerDependencies: z.array(dependencySchema).optional()
652
+ });
653
+ var apiImportSettingsSchema = z.strictObject({
654
+ respectNullableSchemas: z.boolean().optional(),
655
+ titleAsSchemaName: z.boolean().optional(),
656
+ coerceEnumsToLiterals: z.boolean().optional(),
657
+ idiomaticRequestNames: z.boolean().optional(),
658
+ wrapReferencesToNullableInOptional: z.boolean().optional(),
659
+ coerceOptionalSchemasToNullable: z.boolean().optional(),
660
+ pathParameterOrder: z.enum(["url-order", "spec-order"]).optional(),
661
+ onlyIncludeReferencedSchemas: z.boolean().optional(),
662
+ objectQueryParameters: z.boolean().optional(),
663
+ typeDatesAsStrings: z.boolean().optional(),
664
+ groupMultiApiEnvironments: z.boolean().optional()
665
+ });
666
+ var sourceSpecTypeSchema = z.enum([
667
+ "openapi",
668
+ "swagger",
669
+ "postman",
670
+ "asyncapi",
671
+ "graphql"
672
+ ]);
673
+ var sourceSpecConfigSchema = z.strictObject({
674
+ id: nonEmptyStringSchema.optional(),
675
+ name: nonEmptyStringSchema.optional(),
676
+ namespace: nonEmptyStringSchema.optional(),
677
+ specUrl: nonEmptyStringSchema,
678
+ specType: sourceSpecTypeSchema,
679
+ apiImportSettings: apiImportSettingsSchema.optional(),
680
+ overlays: z.array(nonEmptyStringSchema).optional(),
681
+ overrides: z.array(nonEmptyStringSchema).optional()
682
+ });
683
+ var sourceConfigSchema = z.strictObject({
684
+ specs: z.array(sourceSpecConfigSchema).min(1, "source.specs must contain at least one source spec"),
685
+ apiImportSettings: apiImportSettingsSchema.optional()
686
+ }).superRefine(({ specs }, context) => {
687
+ const seenIds = /* @__PURE__ */ new Set();
688
+ specs.forEach(({ id }, index) => {
689
+ if (id && seenIds.has(id)) {
690
+ context.addIssue({
691
+ code: "custom",
692
+ message: `source spec id "${id}" must be unique`,
693
+ path: ["specs", index, "id"]
694
+ });
695
+ }
696
+ if (id) {
697
+ seenIds.add(id);
698
+ }
699
+ });
700
+ });
701
+ var targetLanguageSchema = z.enum([
702
+ "typescript",
703
+ "python",
704
+ "java",
705
+ "kotlin",
706
+ "go",
707
+ "csharp",
708
+ "php",
709
+ "ruby",
710
+ "rust",
711
+ "swift",
712
+ "cli"
713
+ ]);
714
+ var targetConfigSchema = z.strictObject({
715
+ language: targetLanguageSchema,
716
+ generatorVersion: exactSemverSchema.optional(),
717
+ sourceOrigin: z.enum(["postman", "fern"]),
718
+ sdkName: nonEmptyStringSchema,
719
+ organization: nonEmptyStringSchema.optional(),
720
+ sdkVersion: nonEmptyStringSchema.optional(),
721
+ apiVersion: nonEmptyStringSchema.optional()
722
+ });
723
+
724
+ // src/sdk-config-ir/v1/sdk-config-ir-v1.ts
725
+ var SDK_CONFIG_IR_V1_SCHEMA_VERSION = "sdk-config-ir/v1";
726
+ var publishRegistryLanguages = {
727
+ npm: ["typescript"],
728
+ pypi: ["python"],
729
+ maven: ["java", "kotlin"],
730
+ nuget: ["csharp"],
731
+ rubygems: ["ruby"],
732
+ crates: ["rust"],
733
+ go: ["go"],
734
+ composer: ["php"]
735
+ };
736
+ var packageNameRegistries = /* @__PURE__ */ new Set([
737
+ "npm",
738
+ "pypi",
739
+ "nuget",
740
+ "rubygems",
741
+ "crates",
742
+ "composer"
743
+ ]);
744
+ function validatePublishingIdentity(packageConfig, registry, context) {
745
+ if (packageNameRegistries.has(registry) && !packageConfig.packageName) {
746
+ context.addIssue({
747
+ code: "custom",
748
+ message: `package.packageName is required when publishing to "${registry}"`,
749
+ path: ["package", "packageName"]
750
+ });
751
+ return;
752
+ }
753
+ if (registry === "composer" && packageConfig.packageName) {
754
+ const result = composerPackageNameSchema.safeParse(packageConfig.packageName);
755
+ if (!result.success) {
756
+ context.addIssue({
757
+ code: "custom",
758
+ message: result.error.issues[0]?.message ?? "Invalid Composer package name",
759
+ path: ["package", "packageName"]
760
+ });
761
+ }
762
+ }
763
+ if (registry === "go" && !packageConfig.modulePath) {
764
+ context.addIssue({
765
+ code: "custom",
766
+ message: "package.modulePath is required when publishing a Go module",
767
+ path: ["package", "modulePath"]
768
+ });
769
+ }
770
+ if (registry === "maven") {
771
+ ["groupId", "artifactId"].forEach((field) => {
772
+ if (!packageConfig[field]) {
773
+ context.addIssue({
774
+ code: "custom",
775
+ message: `package.${field} is required when publishing to Maven`,
776
+ path: ["package", field]
777
+ });
778
+ }
779
+ });
780
+ }
781
+ }
782
+ var sdkConfigIrV1Schema = z.strictObject({
783
+ schemaVersion: z.literal(SDK_CONFIG_IR_V1_SCHEMA_VERSION),
784
+ source: sourceConfigSchema,
785
+ target: targetConfigSchema,
786
+ api: apiConfigSchema,
787
+ client: clientConfigSchema,
788
+ package: packageConfigSchema,
789
+ output: outputConfigSchema,
790
+ docs: docsConfigSchema,
791
+ generation: generationConfigSchema,
792
+ compatibility: compatibilityConfigSchema.optional()
793
+ }).superRefine(({ compatibility, generation, output, package: packageConfig, target }, context) => {
794
+ const configuredLanguages = Object.keys(generation.language ?? {});
795
+ configuredLanguages.forEach((language) => {
796
+ if (language !== target.language) {
797
+ context.addIssue({
798
+ code: "custom",
799
+ message: `generation.language.${language} does not match target language "${target.language}"`,
800
+ path: ["generation", "language", language]
801
+ });
802
+ }
803
+ });
804
+ if (output.publish && !publishRegistryLanguages[output.publish.registry].some(
805
+ (language) => language === target.language
806
+ )) {
807
+ context.addIssue({
808
+ code: "custom",
809
+ message: `registry "${output.publish.registry}" is not supported for target language "${target.language}"`,
810
+ path: ["output", "publish", "registry"]
811
+ });
812
+ }
813
+ if (output.publish) {
814
+ validatePublishingIdentity(packageConfig, output.publish.registry, context);
815
+ }
816
+ if (compatibility?.legacyInput) {
817
+ const expectedKind = target.sourceOrigin === "postman" ? "postman-build-parameters" : "fern-generator-invocation";
818
+ if (compatibility.legacyInput.kind !== expectedKind) {
819
+ context.addIssue({
820
+ code: "custom",
821
+ message: `compatibility.legacyInput kind "${compatibility.legacyInput.kind}" does not match target.sourceOrigin "${target.sourceOrigin}"`,
822
+ path: ["compatibility", "legacyInput", "kind"]
823
+ });
824
+ }
825
+ }
826
+ });
827
+ function parseSdkConfigIrV1(value) {
828
+ return sdkConfigIrV1Schema.parse(value);
829
+ }
830
+
831
+ export { SDK_CONFIG_IR_V1_SCHEMA_VERSION, apiConfigSchema, apiImportSettingsSchema, authConfigSchema, authSchemeSchema, cliGenerationConfigSchema, clientConfigSchema, compatibilityConfigSchema, composerPackageNameSchema, csharpGenerationConfigSchema, dependencySchema, docsConfigSchema, exactSemverSchema, generationConfigSchema, goGenerationConfigSchema, goModulePathSchema, javaGenerationConfigSchema, jsonObjectSchema, jsonValueSchema, kotlinGenerationConfigSchema, languageGenerationConfigSchema, legacyInputSchema, nonEmptyStringSchema, outputConfigSchema, packageConfigSchema, parseSdkConfigIrV1, phpGenerationConfigSchema, publishConfigSchema, publishRegistrySchema, pythonGenerationConfigSchema, readmeEndpointSchema, rubyGenerationConfigSchema, rustGenerationConfigSchema, sdkConfigIrV1Schema, sourceConfigSchema, sourceSpecConfigSchema, sourceSpecTypeSchema, targetConfigSchema, targetLanguageSchema, typescriptGenerationConfigSchema, unsupportedFieldSchema };
832
+ //# sourceMappingURL=index.js.map
833
+ //# sourceMappingURL=index.js.map