@postman/sdk-config 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +1 -3
  2. package/dist/index.cjs +916 -765
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.js +916 -765
  7. package/dist/index.js.map +1 -1
  8. package/dist/sdk-config/index.cjs +678 -562
  9. package/dist/sdk-config/index.cjs.map +1 -1
  10. package/dist/sdk-config/index.d.cts +1 -1
  11. package/dist/sdk-config/index.d.ts +1 -1
  12. package/dist/sdk-config/index.js +678 -562
  13. package/dist/sdk-config/index.js.map +1 -1
  14. package/dist/sdk-config/v1/index.cjs +678 -562
  15. package/dist/sdk-config/v1/index.cjs.map +1 -1
  16. package/dist/sdk-config/v1/index.d.cts +74 -934
  17. package/dist/sdk-config/v1/index.d.ts +74 -934
  18. package/dist/sdk-config/v1/index.js +678 -562
  19. package/dist/sdk-config/v1/index.js.map +1 -1
  20. package/dist/sdk-config-ir/index.cjs +607 -537
  21. package/dist/sdk-config-ir/index.cjs.map +1 -1
  22. package/dist/sdk-config-ir/index.d.cts +1 -1
  23. package/dist/sdk-config-ir/index.d.ts +1 -1
  24. package/dist/sdk-config-ir/index.js +607 -537
  25. package/dist/sdk-config-ir/index.js.map +1 -1
  26. package/dist/sdk-config-ir/v1/index.cjs +607 -537
  27. package/dist/sdk-config-ir/v1/index.cjs.map +1 -1
  28. package/dist/sdk-config-ir/v1/index.d.cts +25 -7
  29. package/dist/sdk-config-ir/v1/index.d.ts +25 -7
  30. package/dist/sdk-config-ir/v1/index.js +607 -537
  31. package/dist/sdk-config-ir/v1/index.js.map +1 -1
  32. package/dist/{typescript-BruxA5zG.d.cts → typescript-Chge0X4f.d.cts} +8 -1
  33. package/dist/{typescript-BruxA5zG.d.ts → typescript-Chge0X4f.d.ts} +8 -1
  34. package/package.json +1 -1
  35. package/src/sdk-config/v1/README.md +15 -14
  36. package/src/sdk-config-ir/v1/README.md +4 -2
@@ -38,140 +38,152 @@ var hashAlgorithmSchema = zod.z.enum(["sha1", "sha256", "sha384", "sha512"]);
38
38
  var encodingSchema = zod.z.enum(["base64", "hex"]);
39
39
  var payloadComponentSchema = zod.z.enum(["body", "timestamp", "notification-url", "message-id"]);
40
40
  var payloadFormatSchema = zod.z.strictObject({
41
- components: zod.z.array(payloadComponentSchema).min(1),
42
- delimiter: zod.z.string().optional(),
41
+ components: zod.z.array(payloadComponentSchema).min(1).describe("Payload components concatenated in declaration order before signing."),
42
+ delimiter: zod.z.string().optional().describe("The delimiter inserted between payload components."),
43
43
  /**
44
44
  * Set when the body is a form-encoded parameter map that must be canonicalized before signing:
45
45
  * keys sorted, each key's values deduped and sorted, concatenated as key-value pairs.
46
46
  */
47
- bodySort: zod.z.literal("alphabetical").optional()
47
+ bodySort: zod.z.literal("alphabetical").optional().describe("Canonicalizes form body keys and values alphabetically before signing.")
48
48
  });
49
49
  var timestampSchema = zod.z.strictObject({
50
- header: nonEmptyStringSchema,
51
- format: zod.z.enum(["unix-seconds", "unix-millis", "iso8601"]).optional(),
50
+ header: nonEmptyStringSchema.describe("The request header containing the signing timestamp."),
51
+ format: zod.z.enum(["unix-seconds", "unix-millis", "iso8601"]).optional().describe("The timestamp format used in the signature payload."),
52
52
  /** Replay window in seconds. */
53
- tolerance: zod.z.number().positive().optional()
53
+ tolerance: zod.z.number().positive().optional().describe("The maximum accepted timestamp age, in seconds.")
54
54
  });
55
55
  var bodyHashLocationSchema = zod.z.discriminatedUnion("type", [
56
56
  zod.z.strictObject({
57
- type: zod.z.literal("query-parameter"),
58
- name: nonEmptyStringSchema
57
+ type: zod.z.literal("query-parameter").describe("Reads the body hash from a query parameter."),
58
+ name: nonEmptyStringSchema.describe("The query parameter containing the body hash.")
59
59
  })
60
60
  ]);
61
61
  var bodyHashBindingSchema = zod.z.strictObject({
62
- algorithm: hashAlgorithmSchema,
63
- encoding: encodingSchema.optional(),
64
- location: bodyHashLocationSchema
62
+ algorithm: hashAlgorithmSchema.describe("The hash algorithm applied to the raw request body."),
63
+ encoding: encodingSchema.optional().describe("The encoding used for the body hash."),
64
+ location: bodyHashLocationSchema.describe("Where the expected body hash is read from.")
65
65
  });
66
66
  var urlNormalizationSchema = zod.z.strictObject({
67
67
  /** Try the URL with and without an explicit default port. */
68
- portVariants: zod.z.boolean().optional(),
68
+ portVariants: zod.z.boolean().optional().describe("Whether verification tries URLs with and without an explicit default port."),
69
69
  /** Try the URL with the pre-RFC3986 query encoding (`+` for space, unescaped `*`). */
70
- legacyQueryEncoding: zod.z.boolean().optional()
70
+ legacyQueryEncoding: zod.z.boolean().optional().describe("Whether verification also tries legacy form-style query encoding.")
71
71
  }).refine(
72
72
  ({ portVariants, legacyQueryEncoding }) => portVariants === true || legacyQueryEncoding === true,
73
73
  { message: "url normalization must enable at least one variant" }
74
74
  );
75
75
  var webhookSignatureSchema = zod.z.discriminatedUnion("type", [
76
76
  zod.z.strictObject({
77
- type: zod.z.literal("hmac"),
77
+ type: zod.z.literal("hmac").describe("Identifies HMAC webhook signature verification."),
78
78
  /** Request header carrying the signature. */
79
- header: nonEmptyStringSchema,
80
- algorithm: hashAlgorithmSchema.optional(),
81
- encoding: encodingSchema.optional(),
79
+ header: nonEmptyStringSchema.describe("The request header containing the signature."),
80
+ algorithm: hashAlgorithmSchema.optional().describe("The HMAC hash algorithm."),
81
+ encoding: encodingSchema.optional().describe("The encoding used for the HMAC signature."),
82
82
  /** Stripped from the header value before comparison, e.g. `sha256=`. */
83
- signaturePrefix: zod.z.string().optional(),
84
- payloadFormat: payloadFormatSchema.optional(),
85
- timestamp: timestampSchema.optional(),
86
- bodyHashBinding: bodyHashBindingSchema.optional(),
87
- urlNormalization: urlNormalizationSchema.optional()
83
+ signaturePrefix: zod.z.string().optional().describe("A prefix removed from the signature header before comparison."),
84
+ payloadFormat: payloadFormatSchema.optional().describe("How the payload signed by the provider is assembled."),
85
+ timestamp: timestampSchema.optional().describe("Timestamp validation included in signature verification."),
86
+ bodyHashBinding: bodyHashBindingSchema.optional().describe("A separately transmitted hash that binds the raw body to the signed payload."),
87
+ urlNormalization: urlNormalizationSchema.optional().describe("Alternate notification URL forms accepted during verification.")
88
88
  })
89
89
  ]);
90
90
 
91
91
  // src/sdk-config-domain/v1/api.ts
92
92
  var authVariableSchema = zod.z.strictObject({
93
- name: nonEmptyStringSchema.optional(),
94
- environmentVariable: nonEmptyStringSchema.optional(),
95
- description: zod.z.string().optional(),
96
- omit: zod.z.boolean().optional()
93
+ name: nonEmptyStringSchema.optional().describe("The parameter name exposed by the SDK."),
94
+ environmentVariable: nonEmptyStringSchema.optional().describe("The environment variable used to populate the parameter."),
95
+ description: zod.z.string().optional().describe(
96
+ "A description of the authentication parameter included in generated SDK documentation."
97
+ ),
98
+ omit: zod.z.boolean().optional().describe("Whether the parameter is omitted from the SDK surface.")
97
99
  });
98
100
  var apiKeyAuthSchema = zod.z.strictObject({
99
- id: nonEmptyStringSchema,
100
- type: zod.z.literal("api-key"),
101
- location: zod.z.enum(["header", "query", "cookie"]),
102
- name: nonEmptyStringSchema,
103
- prefix: nonEmptyStringSchema.optional(),
104
- environmentVariable: nonEmptyStringSchema.optional(),
105
- description: zod.z.string().optional()
101
+ id: nonEmptyStringSchema.describe("A unique identifier for this authentication scheme."),
102
+ type: zod.z.literal("api-key").describe("Identifies an API key authentication scheme."),
103
+ location: zod.z.enum(["header", "query", "cookie"]).describe("Where the API key is sent on requests."),
104
+ name: nonEmptyStringSchema.describe("The header, query parameter, or cookie name."),
105
+ prefix: nonEmptyStringSchema.optional().describe("A prefix added before the API key value."),
106
+ environmentVariable: nonEmptyStringSchema.optional().describe("The default environment variable for the API key."),
107
+ description: zod.z.string().optional().describe(
108
+ "A description of the authentication scheme included in generated SDK documentation."
109
+ )
106
110
  });
107
111
  var bearerAuthSchema = zod.z.strictObject({
108
- id: nonEmptyStringSchema,
109
- type: zod.z.literal("bearer"),
110
- header: nonEmptyStringSchema.optional(),
111
- prefix: nonEmptyStringSchema.optional(),
112
- environmentVariable: nonEmptyStringSchema.optional(),
113
- description: zod.z.string().optional()
112
+ id: nonEmptyStringSchema.describe("A unique identifier for this authentication scheme."),
113
+ type: zod.z.literal("bearer").describe("Identifies a bearer token authentication scheme."),
114
+ header: nonEmptyStringSchema.optional().describe("The request header that carries the bearer token."),
115
+ prefix: nonEmptyStringSchema.optional().describe('The token prefix, such as "Bearer".'),
116
+ environmentVariable: nonEmptyStringSchema.optional().describe("The default environment variable for the bearer token."),
117
+ description: zod.z.string().optional().describe(
118
+ "A description of the authentication scheme included in generated SDK documentation."
119
+ )
114
120
  });
115
121
  var basicAuthSchema = zod.z.strictObject({
116
- id: nonEmptyStringSchema,
117
- type: zod.z.literal("basic"),
118
- username: authVariableSchema.optional(),
119
- password: authVariableSchema.optional(),
120
- description: zod.z.string().optional()
122
+ id: nonEmptyStringSchema.describe("A unique identifier for this authentication scheme."),
123
+ type: zod.z.literal("basic").describe("Identifies an HTTP Basic authentication scheme."),
124
+ username: authVariableSchema.optional().describe("The username parameter exposed by the SDK."),
125
+ password: authVariableSchema.optional().describe("The password parameter exposed by the SDK."),
126
+ description: zod.z.string().optional().describe(
127
+ "A description of the authentication scheme included in generated SDK documentation."
128
+ )
121
129
  });
122
130
  var oauthScopeSchema = zod.z.strictObject({
123
- name: nonEmptyStringSchema,
124
- description: zod.z.string().optional()
131
+ name: nonEmptyStringSchema.describe("The OAuth scope value requested from the provider."),
132
+ description: zod.z.string().optional().describe("A description of the OAuth scope included in generated SDK documentation.")
125
133
  });
126
134
  var oauthFlowSchema = zod.z.discriminatedUnion("type", [
127
135
  zod.z.strictObject({
128
- type: zod.z.literal("authorization-code"),
129
- authorizationUrl: nonEmptyStringSchema,
130
- tokenUrl: nonEmptyStringSchema,
131
- refreshUrl: nonEmptyStringSchema.optional(),
132
- scopes: zod.z.array(oauthScopeSchema).optional()
136
+ type: zod.z.literal("authorization-code").describe("Uses the OAuth authorization code flow."),
137
+ authorizationUrl: nonEmptyStringSchema.describe("The URL used to authorize the client."),
138
+ tokenUrl: nonEmptyStringSchema.describe("The URL used to exchange a code for tokens."),
139
+ refreshUrl: nonEmptyStringSchema.optional().describe("The URL used to refresh access tokens."),
140
+ scopes: zod.z.array(oauthScopeSchema).optional().describe("The scopes supported by this flow.")
133
141
  }),
134
142
  zod.z.strictObject({
135
- type: zod.z.literal("client-credentials"),
136
- tokenUrl: nonEmptyStringSchema,
137
- refreshUrl: nonEmptyStringSchema.optional(),
138
- scopes: zod.z.array(oauthScopeSchema).optional()
143
+ type: zod.z.literal("client-credentials").describe("Uses the OAuth client credentials flow."),
144
+ tokenUrl: nonEmptyStringSchema.describe("The URL used to obtain access tokens."),
145
+ refreshUrl: nonEmptyStringSchema.optional().describe("The URL used to refresh access tokens."),
146
+ scopes: zod.z.array(oauthScopeSchema).optional().describe("The scopes supported by this flow.")
139
147
  }),
140
148
  zod.z.strictObject({
141
- type: zod.z.literal("implicit"),
142
- authorizationUrl: nonEmptyStringSchema,
143
- refreshUrl: nonEmptyStringSchema.optional(),
144
- scopes: zod.z.array(oauthScopeSchema).optional()
149
+ type: zod.z.literal("implicit").describe("Uses the OAuth implicit flow."),
150
+ authorizationUrl: nonEmptyStringSchema.describe("The URL used to authorize the client."),
151
+ refreshUrl: nonEmptyStringSchema.optional().describe("The URL used to refresh access tokens."),
152
+ scopes: zod.z.array(oauthScopeSchema).optional().describe("The scopes supported by this flow.")
145
153
  }),
146
154
  zod.z.strictObject({
147
- type: zod.z.literal("password"),
148
- tokenUrl: nonEmptyStringSchema,
149
- refreshUrl: nonEmptyStringSchema.optional(),
150
- scopes: zod.z.array(oauthScopeSchema).optional()
155
+ type: zod.z.literal("password").describe("Uses the OAuth resource owner password flow."),
156
+ tokenUrl: nonEmptyStringSchema.describe("The URL used to obtain access tokens."),
157
+ refreshUrl: nonEmptyStringSchema.optional().describe("The URL used to refresh access tokens."),
158
+ scopes: zod.z.array(oauthScopeSchema).optional().describe("The scopes supported by this flow.")
151
159
  })
152
160
  ]);
153
161
  var oauth2AuthSchema = zod.z.strictObject({
154
- id: nonEmptyStringSchema,
155
- type: zod.z.literal("oauth2"),
156
- flows: zod.z.array(oauthFlowSchema).min(1),
157
- clientId: authVariableSchema.optional(),
158
- clientSecret: authVariableSchema.optional(),
159
- tokenHeader: nonEmptyStringSchema.optional(),
160
- tokenPrefix: nonEmptyStringSchema.optional(),
161
- refreshBufferSeconds: zod.z.number().nonnegative().optional(),
162
- description: zod.z.string().optional()
162
+ id: nonEmptyStringSchema.describe("A unique identifier for this authentication scheme."),
163
+ type: zod.z.literal("oauth2").describe("Identifies an OAuth 2.0 authentication scheme."),
164
+ flows: zod.z.array(oauthFlowSchema).min(1).describe("The OAuth flows supported by the API."),
165
+ clientId: authVariableSchema.optional().describe("The OAuth client ID parameter exposed by the SDK."),
166
+ clientSecret: authVariableSchema.optional().describe("The OAuth client secret parameter exposed by the SDK."),
167
+ tokenHeader: nonEmptyStringSchema.optional().describe("The request header that carries the OAuth access token."),
168
+ tokenPrefix: nonEmptyStringSchema.optional().describe("The prefix added before the OAuth access token."),
169
+ refreshBufferSeconds: zod.z.number().nonnegative().optional().describe("How early, in seconds, the client refreshes a token before it expires."),
170
+ description: zod.z.string().optional().describe(
171
+ "A description of the authentication scheme included in generated SDK documentation."
172
+ )
163
173
  });
164
174
  var customAuthParameterSchema = zod.z.strictObject({
165
- location: zod.z.enum(["header", "query", "cookie"]),
166
- name: nonEmptyStringSchema,
167
- prefix: nonEmptyStringSchema.optional(),
168
- environmentVariable: nonEmptyStringSchema.optional()
175
+ location: zod.z.enum(["header", "query", "cookie"]).describe("Where the custom authentication value is sent."),
176
+ name: nonEmptyStringSchema.describe("The header, query parameter, or cookie name."),
177
+ prefix: nonEmptyStringSchema.optional().describe("A prefix added before the parameter value."),
178
+ environmentVariable: nonEmptyStringSchema.optional().describe("The default environment variable for the parameter.")
169
179
  });
170
180
  var customAuthSchema = zod.z.strictObject({
171
- id: nonEmptyStringSchema,
172
- type: zod.z.literal("custom"),
173
- parameters: zod.z.array(customAuthParameterSchema).min(1),
174
- description: zod.z.string().optional()
181
+ id: nonEmptyStringSchema.describe("A unique identifier for this authentication scheme."),
182
+ type: zod.z.literal("custom").describe("Identifies a custom authentication scheme."),
183
+ parameters: zod.z.array(customAuthParameterSchema).min(1).describe("The request parameters that implement the custom scheme."),
184
+ description: zod.z.string().optional().describe(
185
+ "A description of the authentication scheme included in generated SDK documentation."
186
+ )
175
187
  });
176
188
  var authSchemeSchema = zod.z.discriminatedUnion("type", [
177
189
  apiKeyAuthSchema,
@@ -181,12 +193,12 @@ var authSchemeSchema = zod.z.discriminatedUnion("type", [
181
193
  customAuthSchema
182
194
  ]);
183
195
  var authRequirementSchema = zod.z.strictObject({
184
- schemes: zod.z.array(nonEmptyStringSchema).min(1)
196
+ schemes: zod.z.array(nonEmptyStringSchema).min(1).describe("Scheme identifiers that must be satisfied together.")
185
197
  });
186
198
  var authConfigSchema = zod.z.strictObject({
187
- schemes: zod.z.array(authSchemeSchema).min(1),
188
- requirements: zod.z.array(authRequirementSchema).optional(),
189
- endpointSecurity: zod.z.boolean().optional()
199
+ schemes: zod.z.array(authSchemeSchema).min(1).describe("Authentication schemes offered by the API."),
200
+ requirements: zod.z.array(authRequirementSchema).optional().describe("Valid combinations of authentication schemes."),
201
+ endpointSecurity: zod.z.boolean().optional().describe("Whether generated endpoints expose their individual security requirements.")
190
202
  }).superRefine(({ requirements, schemes }, context) => {
191
203
  const schemeIds = /* @__PURE__ */ new Set();
192
204
  schemes.forEach(({ id }, index) => {
@@ -212,45 +224,45 @@ var authConfigSchema = zod.z.strictObject({
212
224
  });
213
225
  });
214
226
  var environmentUrlSchema = zod.z.strictObject({
215
- name: nonEmptyStringSchema,
216
- url: nonEmptyStringSchema,
217
- serverName: nonEmptyStringSchema.optional()
227
+ name: nonEmptyStringSchema.describe("The display name for this environment URL."),
228
+ url: nonEmptyStringSchema.describe("The base URL used for this environment entry."),
229
+ serverName: nonEmptyStringSchema.optional().describe("The source server represented by this URL.")
218
230
  });
219
231
  var environmentSchema = zod.z.strictObject({
220
- name: nonEmptyStringSchema,
221
- urls: zod.z.array(environmentUrlSchema).min(1),
222
- description: zod.z.string().optional()
232
+ name: nonEmptyStringSchema.describe("The environment name exposed by the SDK."),
233
+ urls: zod.z.array(environmentUrlSchema).min(1).describe("The base URLs available in this environment."),
234
+ description: zod.z.string().optional().describe("A description of the environment included in generated SDK documentation.")
223
235
  });
224
236
  var headerSchema = zod.z.strictObject({
225
- name: nonEmptyStringSchema,
226
- value: zod.z.string().optional(),
227
- description: zod.z.string().optional(),
228
- environmentVariable: nonEmptyStringSchema.optional()
237
+ name: nonEmptyStringSchema.describe("The HTTP header name."),
238
+ value: zod.z.string().optional().describe("A fixed value for the generated header."),
239
+ description: zod.z.string().optional().describe("A description of the header included in generated SDK documentation."),
240
+ environmentVariable: nonEmptyStringSchema.optional().describe("The environment variable used to populate the header.")
229
241
  });
230
242
  var environmentVariableSchema = zod.z.strictObject({
231
- name: nonEmptyStringSchema,
232
- description: zod.z.string().optional(),
233
- defaultValue: zod.z.string().optional()
243
+ name: nonEmptyStringSchema.describe("The environment variable name exposed by the SDK."),
244
+ description: zod.z.string().optional().describe("A description of the environment variable included in generated SDK documentation."),
245
+ defaultValue: zod.z.string().optional().describe("The default value used when the variable is unset.")
234
246
  });
235
247
  var apiConfigSchema = zod.z.strictObject({
236
- baseUrl: zod.z.string().default(""),
237
- environments: zod.z.array(environmentSchema).default([]),
238
- environmentVariables: zod.z.array(environmentVariableSchema).default([]),
239
- defaultEnvironment: nonEmptyStringSchema.optional(),
240
- auth: authConfigSchema.optional(),
241
- headers: zod.z.array(headerSchema).optional(),
248
+ baseUrl: zod.z.string().default("").describe("The default base URL used by the generated client."),
249
+ environments: zod.z.array(environmentSchema).default([]).describe("Named API environments and their base URLs."),
250
+ environmentVariables: zod.z.array(environmentVariableSchema).default([]).describe("Environment variables exposed through generated client configuration."),
251
+ defaultEnvironment: nonEmptyStringSchema.optional().describe("The environment selected when a caller does not choose one."),
252
+ auth: authConfigSchema.optional().describe("Authentication supported by the API."),
253
+ headers: zod.z.array(headerSchema).optional().describe("Headers added to generated API requests."),
242
254
  /**
243
255
  * Selects the named `x-fern-audiences`.
244
256
  *
245
257
  * Absent means all audiences. A present empty array selects no tagged audience: untagged nodes
246
258
  * remain included, while every audience-tagged node is excluded.
247
259
  */
248
- audiences: zod.z.array(nonEmptyStringSchema).optional(),
260
+ audiences: zod.z.array(nonEmptyStringSchema).optional().describe("Named API audiences included in the generated SDK."),
249
261
  /**
250
262
  * How the API signs the webhooks it sends, enabling a generated verification helper. API-wide, and
251
263
  * independent of whether any webhook is modeled — see {@link webhookSignatureSchema}.
252
264
  */
253
- webhookSignature: webhookSignatureSchema.optional()
265
+ webhookSignature: webhookSignatureSchema.optional().describe("How generated helpers verify webhook signatures from the API.")
254
266
  });
255
267
 
256
268
  // src/sdk-config/v1/api.ts
@@ -259,16 +271,16 @@ var sdkConfigV1AuthConfigSchema = authConfigSchema;
259
271
  var sdkConfigV1ApiConfigSchema = apiConfigSchema;
260
272
  var sdkConfigV1WebhookSignatureSchema = webhookSignatureSchema;
261
273
  var retryOverrideShape = {
262
- enabled: zod.z.boolean().optional(),
263
- maxAttempts: zod.z.number().int().min(1).optional(),
264
- retryDelayMs: zod.z.number().nonnegative().optional(),
265
- maxDelayMs: zod.z.number().nonnegative().optional(),
266
- jitterMs: zod.z.number().nonnegative().optional(),
267
- backoffFactor: zod.z.number().positive().optional(),
268
- statusCodes: zod.z.array(zod.z.number().int().min(100).max(599)).optional(),
269
- methods: zod.z.array(nonEmptyStringSchema).optional(),
270
- statusCodeProfile: zod.z.enum(["legacy", "recommended"]).optional(),
271
- maxRetryAfterDelayMs: zod.z.number().nonnegative().optional()
274
+ enabled: zod.z.boolean().optional().describe("Whether the generated client retries failed requests."),
275
+ maxAttempts: zod.z.number().int().min(1).optional().describe("The maximum total request attempts, including the initial attempt."),
276
+ retryDelayMs: zod.z.number().nonnegative().optional().describe("The initial delay between retry attempts, in milliseconds."),
277
+ maxDelayMs: zod.z.number().nonnegative().optional().describe("The maximum backoff delay between attempts, in milliseconds."),
278
+ jitterMs: zod.z.number().nonnegative().optional().describe("The maximum random jitter added to retry delays, in milliseconds."),
279
+ backoffFactor: zod.z.number().positive().optional().describe("The multiplier applied to the delay after each failed attempt."),
280
+ statusCodes: zod.z.array(zod.z.number().int().min(100).max(599)).optional().describe("HTTP status codes that are eligible for retries."),
281
+ methods: zod.z.array(nonEmptyStringSchema).optional().describe("HTTP methods that are eligible for retries."),
282
+ statusCodeProfile: zod.z.enum(["legacy", "recommended"]).optional().describe("The built-in retryable status-code policy."),
283
+ maxRetryAfterDelayMs: zod.z.number().nonnegative().optional().describe("The longest Retry-After delay the client will honor, in milliseconds.")
272
284
  };
273
285
  function validateRetryDelays({
274
286
  maxDelayMs,
@@ -285,27 +297,29 @@ function validateRetryDelays({
285
297
  var clientRetryOverrideSchema = zod.z.strictObject(retryOverrideShape).superRefine(validateRetryDelays);
286
298
  var retryConfigSchema = zod.z.strictObject({
287
299
  ...retryOverrideShape,
288
- enabled: zod.z.boolean().default(true),
289
- maxAttempts: zod.z.number().int().min(1).default(3),
290
- retryDelayMs: zod.z.number().nonnegative().default(150),
291
- maxDelayMs: zod.z.number().nonnegative().default(5e3),
292
- jitterMs: zod.z.number().nonnegative().default(50),
293
- backoffFactor: zod.z.number().positive().default(2),
294
- methods: zod.z.array(nonEmptyStringSchema).default(["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]),
295
- maxRetryAfterDelayMs: zod.z.number().nonnegative().default(6e4)
300
+ enabled: zod.z.boolean().default(true).describe("Whether the generated client retries failed requests."),
301
+ maxAttempts: zod.z.number().int().min(1).default(3).describe("The maximum total request attempts, including the initial attempt."),
302
+ retryDelayMs: zod.z.number().nonnegative().default(150).describe("The initial delay between retry attempts, in milliseconds."),
303
+ maxDelayMs: zod.z.number().nonnegative().default(5e3).describe("The maximum backoff delay between attempts, in milliseconds."),
304
+ jitterMs: zod.z.number().nonnegative().default(50).describe("The maximum random jitter added to retry delays, in milliseconds."),
305
+ backoffFactor: zod.z.number().positive().default(2).describe("The multiplier applied to the delay after each failed attempt."),
306
+ methods: zod.z.array(nonEmptyStringSchema).default(["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]).describe("HTTP methods that are eligible for retries."),
307
+ maxRetryAfterDelayMs: zod.z.number().nonnegative().default(6e4).describe("The longest Retry-After delay the client will honor, in milliseconds.")
296
308
  }).superRefine(validateRetryDelays);
297
309
  var constructorParameterSchema = zod.z.strictObject({
298
- name: nonEmptyStringSchema,
299
- example: zod.z.string().optional(),
300
- description: zod.z.string().optional(),
301
- required: zod.z.boolean().optional()
310
+ name: nonEmptyStringSchema.describe("The parameter name in the generated client constructor."),
311
+ example: zod.z.string().optional().describe("An example value shown in generated documentation."),
312
+ description: zod.z.string().optional().describe(
313
+ "A description of the constructor parameter included in generated SDK documentation."
314
+ ),
315
+ required: zod.z.boolean().optional().describe("Whether callers must provide the parameter.")
302
316
  });
303
317
  var parameterStyleSchema = zod.z.enum(["wrapped", "inline", "language-default"]);
304
318
  var tokenRefreshConfigSchema = zod.z.strictObject({
305
- enabled: zod.z.boolean(),
306
- endpoint: nonEmptyStringSchema.optional(),
307
- accessTokenField: nonEmptyStringSchema.optional(),
308
- refreshTokenField: nonEmptyStringSchema.optional()
319
+ enabled: zod.z.boolean().describe("Whether the client can exchange refresh tokens."),
320
+ endpoint: nonEmptyStringSchema.optional().describe("The API endpoint used to refresh tokens."),
321
+ accessTokenField: nonEmptyStringSchema.optional().describe("The response field containing the refreshed access token."),
322
+ refreshTokenField: nonEmptyStringSchema.optional().describe("The response field containing the refreshed refresh token.")
309
323
  }).superRefine(({ enabled, endpoint }, context) => {
310
324
  if (enabled && endpoint === void 0) {
311
325
  context.addIssue({
@@ -316,26 +330,26 @@ var tokenRefreshConfigSchema = zod.z.strictObject({
316
330
  }
317
331
  });
318
332
  var clientOverrideShape = {
319
- retry: clientRetryOverrideSchema.optional(),
320
- responseHeaders: zod.z.boolean().optional(),
321
- responseValidation: zod.z.boolean().optional(),
322
- multiTenant: zod.z.boolean().optional(),
323
- additionalConstructorParameters: zod.z.array(constructorParameterSchema).optional(),
324
- timeoutMs: zod.z.union([zod.z.number().nonnegative(), zod.z.literal("infinity")]).optional(),
325
- requestParameterStyle: parameterStyleSchema.optional(),
326
- pathParameterStyle: parameterStyleSchema.optional(),
327
- filePropertyStyle: parameterStyleSchema.optional(),
328
- useDefaultRequestParameterValues: zod.z.boolean().optional(),
329
- respectOptionalRequestBody: zod.z.boolean().optional(),
330
- tokenRefresh: tokenRefreshConfigSchema.optional()
333
+ retry: clientRetryOverrideSchema.optional().describe("Retry behavior for generated API requests."),
334
+ responseHeaders: zod.z.boolean().optional().describe("Whether generated operations expose HTTP response headers."),
335
+ responseValidation: zod.z.boolean().optional().describe("Whether the client validates API responses against the schema."),
336
+ multiTenant: zod.z.boolean().optional().describe("Whether the client exposes configuration for tenant-specific API access."),
337
+ additionalConstructorParameters: zod.z.array(constructorParameterSchema).optional().describe("Additional parameters added to the generated client constructor."),
338
+ timeoutMs: zod.z.union([zod.z.number().nonnegative(), zod.z.literal("infinity")]).optional().describe('The default request timeout in milliseconds, or "infinity" for no timeout.'),
339
+ requestParameterStyle: parameterStyleSchema.optional().describe("Whether generated operation parameters are wrapped or passed inline."),
340
+ pathParameterStyle: parameterStyleSchema.optional().describe("Whether generated path parameters are wrapped or passed inline."),
341
+ filePropertyStyle: parameterStyleSchema.optional().describe("Whether generated file properties are wrapped or passed inline."),
342
+ useDefaultRequestParameterValues: zod.z.boolean().optional().describe("Whether schema defaults are applied to omitted request parameters."),
343
+ respectOptionalRequestBody: zod.z.boolean().optional().describe("Whether an optional request body remains optional in generated methods."),
344
+ tokenRefresh: tokenRefreshConfigSchema.optional().describe("Refresh-token behavior for the generated client.")
331
345
  };
332
346
  var clientConfigOverrideSchema = zod.z.strictObject(clientOverrideShape);
333
347
  var clientConfigSchema = zod.z.strictObject({
334
348
  ...clientOverrideShape,
335
- retry: retryConfigSchema.prefault({}),
336
- responseHeaders: zod.z.boolean().default(false),
337
- multiTenant: zod.z.boolean().default(false),
338
- additionalConstructorParameters: zod.z.array(constructorParameterSchema).default([])
349
+ retry: retryConfigSchema.prefault({}).describe("Retry behavior for generated API requests."),
350
+ responseHeaders: zod.z.boolean().default(false).describe("Whether generated operations expose HTTP response headers."),
351
+ multiTenant: zod.z.boolean().default(false).describe("Whether the client exposes configuration for tenant-specific API access."),
352
+ additionalConstructorParameters: zod.z.array(constructorParameterSchema).default([]).describe("Additional parameters added to the generated client constructor.")
339
353
  });
340
354
 
341
355
  // src/sdk-config/v1/client.ts
@@ -350,75 +364,75 @@ var composerPackageNameSchema = nonEmptyStringSchema.regex(
350
364
  'Composer package name must be a lowercase "vendor/package" name'
351
365
  );
352
366
  var authorSchema = zod.z.strictObject({
353
- name: nonEmptyStringSchema,
354
- email: zod.z.email().optional(),
355
- url: nonEmptyStringSchema.optional()
367
+ name: nonEmptyStringSchema.describe("The package author name."),
368
+ email: zod.z.email().optional().describe("The package author email address."),
369
+ url: nonEmptyStringSchema.optional().describe("The package author website.")
356
370
  });
357
371
  var developerSchema = zod.z.strictObject({
358
- name: nonEmptyStringSchema,
359
- email: zod.z.email().optional(),
360
- organization: nonEmptyStringSchema.optional(),
361
- organizationUrl: nonEmptyStringSchema.optional()
372
+ name: nonEmptyStringSchema.describe("The package developer name."),
373
+ email: zod.z.email().optional().describe("The package developer email address."),
374
+ organization: nonEmptyStringSchema.optional().describe("The developer organization name."),
375
+ organizationUrl: nonEmptyStringSchema.optional().describe("The developer organization website.")
362
376
  });
363
377
  var licenseSchema = zod.z.strictObject({
364
- type: nonEmptyStringSchema,
365
- name: nonEmptyStringSchema.optional(),
366
- url: nonEmptyStringSchema.optional(),
367
- path: nonEmptyStringSchema.optional()
378
+ type: nonEmptyStringSchema.describe("The license identifier or license type."),
379
+ name: nonEmptyStringSchema.optional().describe("The human-readable license name."),
380
+ url: nonEmptyStringSchema.optional().describe("The URL containing the license text."),
381
+ path: nonEmptyStringSchema.optional().describe("The path to a custom license file.")
368
382
  });
369
383
  var dependencySourceSchema = zod.z.discriminatedUnion("type", [
370
384
  zod.z.strictObject({
371
- type: zod.z.literal("registry"),
372
- registry: nonEmptyStringSchema.optional()
385
+ type: zod.z.literal("registry").describe("Resolves the dependency from a package registry."),
386
+ registry: nonEmptyStringSchema.optional().describe("The registry used to resolve the dependency.")
373
387
  }),
374
388
  zod.z.strictObject({
375
- type: zod.z.literal("git"),
376
- url: nonEmptyStringSchema,
377
- ref: nonEmptyStringSchema.optional(),
378
- subdirectory: nonEmptyStringSchema.optional()
389
+ type: zod.z.literal("git").describe("Resolves the dependency from a Git repository."),
390
+ url: nonEmptyStringSchema.describe("The Git repository URL."),
391
+ ref: nonEmptyStringSchema.optional().describe("The Git branch, tag, or commit to use."),
392
+ subdirectory: nonEmptyStringSchema.optional().describe("The package subdirectory within the Git repository.")
379
393
  }),
380
394
  zod.z.strictObject({
381
- type: zod.z.literal("path"),
382
- path: nonEmptyStringSchema
395
+ type: zod.z.literal("path").describe("Resolves the dependency from a local path."),
396
+ path: nonEmptyStringSchema.describe("The local path containing the dependency.")
383
397
  })
384
398
  ]);
385
399
  var dependencySchema = zod.z.strictObject({
386
- name: nonEmptyStringSchema,
387
- version: nonEmptyStringSchema.optional(),
388
- source: dependencySourceSchema.optional(),
389
- packageName: nonEmptyStringSchema.optional(),
390
- features: zod.z.array(nonEmptyStringSchema).optional(),
391
- extras: zod.z.array(nonEmptyStringSchema).optional(),
392
- optional: zod.z.boolean().optional(),
393
- defaultFeatures: zod.z.boolean().optional(),
394
- environmentMarker: nonEmptyStringSchema.optional()
400
+ name: nonEmptyStringSchema.describe("The dependency name used by the package manager."),
401
+ version: nonEmptyStringSchema.optional().describe("The dependency version requirement."),
402
+ source: dependencySourceSchema.optional().describe("A non-default source for the dependency."),
403
+ packageName: nonEmptyStringSchema.optional().describe("The source package name when it differs from the dependency alias."),
404
+ features: zod.z.array(nonEmptyStringSchema).optional().describe("Cargo features enabled for this dependency."),
405
+ extras: zod.z.array(nonEmptyStringSchema).optional().describe("Python extras enabled for this dependency."),
406
+ optional: zod.z.boolean().optional().describe("Whether the dependency is optional."),
407
+ defaultFeatures: zod.z.boolean().optional().describe("Whether the dependency enables its default Cargo features."),
408
+ environmentMarker: nonEmptyStringSchema.optional().describe("A Python environment marker that conditions this dependency.")
395
409
  }).refine(({ source, version }) => source !== void 0 || version !== void 0, {
396
410
  message: "dependency must define a version or a source"
397
411
  });
398
412
  var projectUrlSchema = zod.z.strictObject({
399
- label: nonEmptyStringSchema,
400
- url: nonEmptyStringSchema
413
+ label: nonEmptyStringSchema.describe("The label displayed for the project link."),
414
+ url: nonEmptyStringSchema.describe("The project link URL.")
401
415
  });
402
416
  var packageConfigSchema = zod.z.strictObject({
403
- packageName: nonEmptyStringSchema.optional(),
404
- moduleName: nonEmptyStringSchema.optional(),
405
- modulePath: goModulePathSchema.optional(),
406
- namespace: nonEmptyStringSchema.optional(),
407
- groupId: nonEmptyStringSchema.optional(),
408
- artifactId: nonEmptyStringSchema.optional(),
409
- description: zod.z.string().optional(),
410
- repository: nonEmptyStringSchema.optional(),
411
- homepage: nonEmptyStringSchema.optional(),
412
- documentationUrl: nonEmptyStringSchema.optional(),
413
- authors: zod.z.array(authorSchema).optional(),
414
- developers: zod.z.array(developerSchema).optional(),
415
- license: licenseSchema.optional(),
416
- keywords: zod.z.array(nonEmptyStringSchema).optional(),
417
- classifiers: zod.z.array(nonEmptyStringSchema).optional(),
418
- projectUrls: zod.z.array(projectUrlSchema).optional(),
419
- extraDependencies: zod.z.array(dependencySchema).optional(),
420
- extraDevDependencies: zod.z.array(dependencySchema).optional(),
421
- extraPeerDependencies: zod.z.array(dependencySchema).optional()
417
+ packageName: nonEmptyStringSchema.optional().describe("The package name used by the target language registry."),
418
+ moduleName: nonEmptyStringSchema.optional().describe("The generated module or import name when it differs from the package name."),
419
+ modulePath: goModulePathSchema.optional().describe("The Go module path used for imports and publishing."),
420
+ namespace: nonEmptyStringSchema.optional().describe("The namespace or package prefix for generated code."),
421
+ groupId: nonEmptyStringSchema.optional().describe("The Maven group identifier."),
422
+ artifactId: nonEmptyStringSchema.optional().describe("The Maven artifact identifier."),
423
+ description: zod.z.string().optional().describe("The package description used in generated metadata."),
424
+ repository: nonEmptyStringSchema.optional().describe("The source repository for the generated SDK."),
425
+ homepage: nonEmptyStringSchema.optional().describe("The package homepage URL."),
426
+ documentationUrl: nonEmptyStringSchema.optional().describe("The package documentation URL."),
427
+ authors: zod.z.array(authorSchema).optional().describe("Authors credited in package metadata."),
428
+ developers: zod.z.array(developerSchema).optional().describe("Developers credited in package metadata."),
429
+ license: licenseSchema.optional().describe("License metadata for the generated package."),
430
+ keywords: zod.z.array(nonEmptyStringSchema).optional().describe("Search keywords for package metadata."),
431
+ classifiers: zod.z.array(nonEmptyStringSchema).optional().describe("Package classifiers used by registries such as PyPI."),
432
+ projectUrls: zod.z.array(projectUrlSchema).optional().describe("Labeled project links for package metadata."),
433
+ extraDependencies: zod.z.array(dependencySchema).optional().describe("Additional runtime dependencies added to the generated package."),
434
+ extraDevDependencies: zod.z.array(dependencySchema).optional().describe("Additional development dependencies added to the generated package."),
435
+ extraPeerDependencies: zod.z.array(dependencySchema).optional().describe("Additional peer dependencies added to the generated package.")
422
436
  });
423
437
  var httpMethodSchema = zod.z.enum([
424
438
  "GET",
@@ -432,34 +446,34 @@ var httpMethodSchema = zod.z.enum([
432
446
  "CONNECT"
433
447
  ]);
434
448
  var readmeEndpointSchema = zod.z.strictObject({
435
- method: httpMethodSchema,
436
- path: nonEmptyStringSchema,
437
- stream: zod.z.boolean().optional()
449
+ method: httpMethodSchema.describe("The HTTP method of the documented endpoint."),
450
+ path: nonEmptyStringSchema.describe("The endpoint path used in generated examples."),
451
+ stream: zod.z.boolean().optional().describe("Whether the example uses the streaming response API.")
438
452
  });
439
453
  var readmeCustomSectionSchema = zod.z.strictObject({
440
- title: nonEmptyStringSchema,
441
- content: zod.z.string()
454
+ title: nonEmptyStringSchema.describe("The heading displayed for this README section."),
455
+ content: zod.z.string().describe("The Markdown content of this README section.")
442
456
  });
443
457
  var readmeConfigSchema = zod.z.strictObject({
444
- apiName: nonEmptyStringSchema.optional(),
445
- introduction: zod.z.string().optional(),
446
- apiReferenceLink: nonEmptyStringSchema.optional(),
447
- bannerLink: nonEmptyStringSchema.optional(),
448
- disabledSections: zod.z.array(nonEmptyStringSchema).optional(),
449
- customSections: zod.z.array(readmeCustomSectionSchema).optional(),
450
- defaultEndpoint: readmeEndpointSchema.optional(),
451
- features: zod.z.record(zod.z.string(), zod.z.array(readmeEndpointSchema)).optional()
458
+ apiName: nonEmptyStringSchema.optional().describe("The API name displayed in the README."),
459
+ introduction: zod.z.string().optional().describe("Custom introductory Markdown for the README."),
460
+ apiReferenceLink: nonEmptyStringSchema.optional().describe("The URL linked as the API reference."),
461
+ bannerLink: nonEmptyStringSchema.optional().describe("The destination URL for the README banner."),
462
+ disabledSections: zod.z.array(nonEmptyStringSchema).optional().describe("Generated README sections to omit."),
463
+ customSections: zod.z.array(readmeCustomSectionSchema).optional().describe("Additional sections inserted into the README."),
464
+ defaultEndpoint: readmeEndpointSchema.optional().describe("The endpoint used for the primary README example."),
465
+ features: zod.z.record(zod.z.string(), zod.z.array(readmeEndpointSchema)).optional().describe("Named feature groups and the endpoints demonstrated by each group.")
452
466
  });
453
467
  var snippetsConfigSchema = zod.z.strictObject({
454
- enabled: zod.z.boolean(),
455
- format: zod.z.enum(["md", "json"]).optional(),
456
- outputPath: nonEmptyStringSchema.optional()
468
+ enabled: zod.z.boolean().describe("Whether standalone usage snippets are generated."),
469
+ format: zod.z.enum(["md", "json"]).optional().describe("The output format for generated snippets."),
470
+ outputPath: nonEmptyStringSchema.optional().describe("The output path for generated snippet files.")
457
471
  });
458
472
  var docsConfigSchema = zod.z.strictObject({
459
- readme: readmeConfigSchema.optional(),
460
- snippets: snippetsConfigSchema.optional(),
461
- referenceBaseUrl: nonEmptyStringSchema.optional(),
462
- includeApiReference: zod.z.boolean().optional()
473
+ readme: readmeConfigSchema.optional().describe("README content and example configuration."),
474
+ snippets: snippetsConfigSchema.optional().describe("Standalone usage snippet generation."),
475
+ referenceBaseUrl: nonEmptyStringSchema.optional().describe("The base URL used for links to generated API reference files."),
476
+ includeApiReference: zod.z.boolean().optional().describe("Whether API reference documentation is included in the SDK output.")
463
477
  });
464
478
 
465
479
  // src/sdk-config/v1/docs.ts
@@ -790,6 +804,7 @@ function githubOutput(value, publishInfo, rawOutput, language, sourcePath, state
790
804
  consume(state, [...sourcePath, "repo"]);
791
805
  const publication = publishInfo ? mapPublication(publishInfo, rawOutput, language, [...sourcePath, "publishInfo"], state, index) : void 0;
792
806
  const type = stringValue(value.type);
807
+ const licensePackage = mapGithubLicense(value.license, [...sourcePath, "license"], state);
793
808
  const reviewers = mapReviewers(value.reviewers, [...sourcePath, "reviewers"], state);
794
809
  if (type) consume(state, [...sourcePath, "type"]);
795
810
  if (typeof value.makePr === "boolean") consume(state, [...sourcePath, "makePr"]);
@@ -816,9 +831,20 @@ function githubOutput(value, publishInfo, rawOutput, language, sourcePath, state
816
831
  },
817
832
  ...publication ? { publish: publication.publish } : {}
818
833
  },
819
- ...optional("package", publication?.package)
834
+ // The GitHub license wins over a publication-supplied one; `licensePackage` is `{}` or `{ license }`.
835
+ ...optionalObject("package", { ...publication?.package, ...licensePackage })
820
836
  };
821
837
  }
838
+ var basicLicenseTypes = { mit: "MIT", apache: "APACHE" };
839
+ function mapGithubLicense(value, sourcePath, state) {
840
+ if (!isObject(value) || stringValue(value.type) !== "basic") return {};
841
+ const id = stringValue(value.id);
842
+ const type = id ? basicLicenseTypes[id.toLowerCase()] : void 0;
843
+ if (!type) return {};
844
+ consume(state, [...sourcePath, "type"]);
845
+ consume(state, [...sourcePath, "id"]);
846
+ return { license: { type } };
847
+ }
822
848
  function consumeCredentialObject(value, sourcePath, state) {
823
849
  if (!isObject(value)) return;
824
850
  for (const field of ["username", "password", "token", "apiKey"]) {
@@ -1246,16 +1272,10 @@ function finishOutputMapping(mapping, outputMode, sourcePath, state, index) {
1246
1272
  for (const path of collectLeafPaths(outputMode, sourcePath)) {
1247
1273
  if (path[path.length - 1] === "_visit") consume(state, path);
1248
1274
  }
1249
- const legacyGenerateFullProject = isObject(outputMode) ? outputMode.generateFullProject : void 0;
1250
- const generationShape = typeof legacyGenerateFullProject === "boolean" ? { generation: { ...mapping.generation, generateFullProject: legacyGenerateFullProject } } : {};
1251
- if (typeof legacyGenerateFullProject === "boolean") {
1252
- consume(state, [...sourcePath, "generateFullProject"]);
1253
- }
1254
1275
  const unsupported = collectUnsupported(outputMode, sourcePath, state);
1255
1276
  const hasCredentials = unsupported.some((diagnostic) => isCredentialPath(diagnostic.path));
1256
1277
  return {
1257
1278
  ...mapping,
1258
- ...generationShape,
1259
1279
  unsupportedFields: [
1260
1280
  ...state.credentialDiagnostics ?? [],
1261
1281
  ...hasCredentials ? [
@@ -1326,6 +1346,9 @@ function outputDiagnostic(path, index) {
1326
1346
  homepageLink: {
1327
1347
  sdkConfigPath: ["targets", index, "package", "homepage"],
1328
1348
  suggestedAction: "Set target.package.homepage manually to a valid URL."
1349
+ },
1350
+ generateFullProject: {
1351
+ suggestedAction: "Preserve this packaging setting on the generation request; it is not customer-authored SDK configuration."
1329
1352
  }
1330
1353
  };
1331
1354
  const fieldGuidance = field ? guidance[field] : void 0;
@@ -1447,59 +1470,48 @@ function deepEqual(left, right) {
1447
1470
  return false;
1448
1471
  }
1449
1472
  var namingConfigSchema = zod.z.strictObject({
1450
- clientName: nonEmptyStringSchema.optional(),
1451
- exportedClientName: nonEmptyStringSchema.optional(),
1452
- environmentTypeName: nonEmptyStringSchema.optional(),
1453
- apiErrorName: nonEmptyStringSchema.optional(),
1454
- baseErrorName: nonEmptyStringSchema.optional(),
1455
- pagerName: nonEmptyStringSchema.optional(),
1473
+ clientName: nonEmptyStringSchema.optional().describe("The generated client class name."),
1474
+ exportedClientName: nonEmptyStringSchema.optional().describe("The client name exported from the generated package."),
1475
+ environmentTypeName: nonEmptyStringSchema.optional().describe("The generated type name for API environments."),
1476
+ apiErrorName: nonEmptyStringSchema.optional().describe("The generated API error class name."),
1477
+ baseErrorName: nonEmptyStringSchema.optional().describe("The generated base error class name."),
1478
+ pagerName: nonEmptyStringSchema.optional().describe("The generated pagination helper name."),
1456
1479
  /** Apply Fern's initialism-aware casing rules when deriving generated identifiers. */
1457
- smartCasing: zod.z.boolean().optional(),
1480
+ smartCasing: zod.z.boolean().optional().describe("Whether generated identifiers use initialism-aware casing."),
1458
1481
  /** Preserve a word boundary after digits when Fern smart casing is enabled. */
1459
- smartCasingDigitWordBoundary: zod.z.boolean().optional()
1482
+ smartCasingDigitWordBoundary: zod.z.boolean().optional().describe("Whether smart casing preserves a word boundary after digits.")
1460
1483
  });
1461
1484
 
1462
1485
  // src/sdk-config/v1/generation.ts
1463
1486
  var customerGenerationAssetSchema = zod.z.discriminatedUnion("type", [
1464
- zod.z.strictObject({ type: zod.z.literal("path"), location: relativePathSchema }),
1465
- zod.z.strictObject({ type: zod.z.literal("url"), location: nonEmptyStringSchema })
1466
- ]);
1467
- var hookDependencySchema = zod.z.strictObject({
1468
- name: nonEmptyStringSchema,
1469
- version: nonEmptyStringSchema,
1470
- groupId: nonEmptyStringSchema.optional()
1471
- });
1472
- var hooksConfigSchema = zod.z.strictObject({
1473
- enabled: zod.z.boolean(),
1474
- source: customerGenerationAssetSchema.optional(),
1475
- dependencies: zod.z.array(hookDependencySchema).optional()
1476
- });
1477
- var customCodeConfigSchema = zod.z.strictObject({
1478
- enabled: zod.z.boolean(),
1479
- source: customerGenerationAssetSchema.optional(),
1480
- conflictStrategy: zod.z.enum(["mark", "ours", "theirs"]).optional(),
1481
- trackChanges: zod.z.boolean().optional(),
1482
- protectedFiles: zod.z.array(nonEmptyStringSchema).optional()
1483
- });
1484
- var workflowConfigSchema = zod.z.strictObject({
1485
- path: relativePathSchema,
1486
- outputName: nonEmptyStringSchema.optional()
1487
- });
1488
- var analyticsHeaderSchema = zod.z.union([
1489
- zod.z.strictObject({ name: nonEmptyStringSchema, value: zod.z.string() }),
1490
1487
  zod.z.strictObject({
1491
- name: nonEmptyStringSchema,
1492
- valueRef: nonEmptyStringSchema
1488
+ type: zod.z.literal("path").describe("Loads the generation asset from a relative path."),
1489
+ location: relativePathSchema.describe("The relative path to the generation asset.")
1490
+ }),
1491
+ zod.z.strictObject({
1492
+ type: zod.z.literal("url").describe("Loads the generation asset from a URL."),
1493
+ location: nonEmptyStringSchema.describe("The URL of the generation asset.")
1493
1494
  })
1494
1495
  ]);
1496
+ var customCodeConfigSchema = zod.z.strictObject({
1497
+ enabled: zod.z.boolean().describe("Whether customer-authored code is merged into generated output."),
1498
+ source: customerGenerationAssetSchema.optional().describe("The source containing customer-authored code."),
1499
+ conflictStrategy: zod.z.enum(["mark", "ours", "theirs"]).optional().describe("How merge conflicts between generated and custom code are handled."),
1500
+ trackChanges: zod.z.boolean().optional().describe("Whether custom-code changes are tracked between builds."),
1501
+ protectedFiles: zod.z.array(nonEmptyStringSchema).optional().describe("Generated file paths that custom-code merging must not overwrite.")
1502
+ });
1503
+ var analyticsHeaderSchema = zod.z.strictObject({
1504
+ name: nonEmptyStringSchema.describe("The exported telemetry header name."),
1505
+ value: zod.z.string().describe("The literal telemetry header value.")
1506
+ });
1495
1507
  var analyticsConfigSchema = zod.z.strictObject({
1496
- enabled: zod.z.boolean(),
1497
- endpoint: nonEmptyStringSchema.optional(),
1498
- exporter: zod.z.enum(["otlp-http", "console"]).optional(),
1499
- headers: zod.z.array(analyticsHeaderSchema).optional(),
1500
- batchSize: zod.z.number().int().positive().optional(),
1501
- scheduledDelayMs: zod.z.number().nonnegative().optional(),
1502
- exportTimeoutMs: zod.z.number().nonnegative().optional()
1508
+ enabled: zod.z.boolean().describe("Whether generated clients export usage telemetry."),
1509
+ endpoint: nonEmptyStringSchema.optional().describe("The telemetry export endpoint."),
1510
+ exporter: zod.z.enum(["otlp-http", "console"]).optional().describe("The telemetry exporter implementation."),
1511
+ headers: zod.z.array(analyticsHeaderSchema).optional().describe("Headers sent by the telemetry exporter."),
1512
+ batchSize: zod.z.number().int().positive().optional().describe("The maximum spans in each export batch."),
1513
+ scheduledDelayMs: zod.z.number().nonnegative().optional().describe("The delay between scheduled exports, in milliseconds."),
1514
+ exportTimeoutMs: zod.z.number().nonnegative().optional().describe("The maximum time allowed for an export, in milliseconds.")
1503
1515
  }).superRefine(({ enabled, endpoint }, context) => {
1504
1516
  if (enabled && endpoint === void 0) {
1505
1517
  context.addIssue({
@@ -1510,73 +1522,63 @@ var analyticsConfigSchema = zod.z.strictObject({
1510
1522
  }
1511
1523
  });
1512
1524
  var wireTestsSchema = zod.z.strictObject({
1513
- enabled: zod.z.boolean(),
1514
- exclusions: zod.z.array(nonEmptyStringSchema).optional(),
1515
- fallbackToGeneratedErrorExamples: zod.z.boolean().optional(),
1516
- fixtureSource: zod.z.enum(["synthetic", "recorded", "auto"]).optional()
1525
+ enabled: zod.z.boolean().describe("Whether wire-level request and response tests are generated."),
1526
+ exclusions: zod.z.array(nonEmptyStringSchema).optional().describe("Operations excluded from wire tests."),
1527
+ fallbackToGeneratedErrorExamples: zod.z.boolean().optional().describe("Whether missing error fixtures are synthesized from generated examples."),
1528
+ fixtureSource: zod.z.enum(["synthetic", "recorded", "auto"]).optional().describe("Where wire-test fixtures are obtained.")
1517
1529
  });
1518
1530
  var unitTestsSchema = zod.z.strictObject({
1519
- enabled: zod.z.boolean(),
1520
- mode: zod.z.enum(["core-runtime", "schema-driven", "both"]).optional(),
1521
- exclusions: zod.z.array(nonEmptyStringSchema).optional()
1531
+ enabled: zod.z.boolean().describe("Whether SDK unit tests are generated."),
1532
+ exclusions: zod.z.array(nonEmptyStringSchema).optional().describe("Operations excluded from unit tests.")
1522
1533
  });
1523
1534
  var streamsSchema = zod.z.strictObject({
1524
- enabled: zod.z.boolean(),
1525
- responseType: zod.z.enum(["wrapper", "native", "web"]).optional(),
1526
- fileResponseType: zod.z.enum(["stream", "binary-response"]).optional(),
1527
- defaultChunkSizeBytes: zod.z.number().int().positive().optional()
1535
+ enabled: zod.z.boolean().describe("Whether generated clients expose streaming response APIs."),
1536
+ responseType: zod.z.enum(["wrapper", "native", "web"]).optional().describe("The streaming response abstraction exposed by generated clients."),
1537
+ fileResponseType: zod.z.enum(["stream", "binary-response"]).optional().describe("The response type used for file downloads."),
1538
+ defaultChunkSizeBytes: zod.z.number().int().positive().optional().describe("The default number of bytes yielded by streaming iterators.")
1528
1539
  });
1529
1540
  var layoutConfigSchema = zod.z.strictObject({
1530
- outputDirectory: zod.z.enum(["project-root", "source-root"]).optional(),
1531
- packagePath: nonEmptyStringSchema.optional()
1541
+ outputDirectory: zod.z.enum(["project-root", "source-root"]).optional().describe("Whether generated source is rooted at the project or its source directory."),
1542
+ packagePath: nonEmptyStringSchema.optional().describe("The package-relative path for generated source files.")
1532
1543
  });
1533
1544
  var serializationConfigSchema = zod.z.strictObject({
1534
- enumRepresentation: zod.z.enum(["enum", "union", "literal", "forward-compatible-enum", "language-default"]).optional(),
1535
- additionalProperties: zod.z.enum(["allow", "forbid", "ignore", "language-default"]).optional(),
1536
- inlineTypes: zod.z.boolean().optional(),
1537
- omitUndefined: zod.z.boolean().optional()
1545
+ enumRepresentation: zod.z.enum(["enum", "union", "literal", "forward-compatible-enum", "language-default"]).optional().describe("How schema enums are represented in generated code."),
1546
+ additionalProperties: zod.z.enum(["allow", "forbid", "ignore", "language-default"]).optional().describe("How undeclared object properties are handled."),
1547
+ inlineTypes: zod.z.boolean().optional().describe("Whether inline schemas remain nested under their parent types."),
1548
+ omitUndefined: zod.z.boolean().optional().describe("Whether undefined properties are omitted during serialization.")
1538
1549
  });
1539
1550
  var generationConfigOverrideShape = {
1540
- includeWatermark: zod.z.boolean().optional(),
1541
- ai: zod.z.boolean().optional(),
1542
- includeOptionalSnippetParameters: zod.z.boolean().optional(),
1543
- buildAllModels: zod.z.boolean().optional(),
1544
- inferServiceNames: zod.z.boolean().optional(),
1545
- includeDeprecatedOperations: zod.z.boolean().optional(),
1546
- multipleResponses: zod.z.boolean().optional(),
1547
- /** Generate the entire SDK project, including package manifests and publishable artifacts. */
1548
- generateFullProject: zod.z.boolean().optional(),
1549
- devContainer: zod.z.boolean().optional(),
1550
- allowMockClient: zod.z.boolean().optional(),
1551
- ignoreFiles: zod.z.array(nonEmptyStringSchema).optional(),
1552
- reservedKeywords: zod.z.array(nonEmptyStringSchema).optional(),
1553
- hooks: hooksConfigSchema.optional(),
1554
- customCode: customCodeConfigSchema.optional(),
1555
- workflows: zod.z.array(workflowConfigSchema).optional(),
1556
- customQueryPaths: zod.z.array(relativePathSchema).optional(),
1557
- analytics: analyticsConfigSchema.optional(),
1558
- wireTests: wireTestsSchema.optional(),
1559
- unitTests: unitTestsSchema.optional(),
1560
- webSockets: zod.z.boolean().optional(),
1561
- streams: streamsSchema.optional(),
1562
- naming: namingConfigSchema.optional(),
1563
- layout: layoutConfigSchema.optional(),
1564
- serialization: serializationConfigSchema.optional()
1551
+ includeOptionalSnippetParameters: zod.z.boolean().optional().describe("Whether usage snippets include optional request parameters."),
1552
+ buildAllModels: zod.z.boolean().optional().describe("Whether models not referenced by operations are also generated."),
1553
+ inferServiceNames: zod.z.boolean().optional().describe("Whether service names are inferred from API structure."),
1554
+ includeDeprecatedOperations: zod.z.boolean().optional().describe("Whether deprecated API operations are generated."),
1555
+ multipleResponses: zod.z.boolean().optional().describe("Whether operations model multiple successful response types."),
1556
+ devContainer: zod.z.boolean().optional().describe("Whether development-container configuration is generated."),
1557
+ allowMockClient: zod.z.boolean().optional().describe("Whether a mock API client is included in the generated SDK."),
1558
+ ignoreFiles: zod.z.array(nonEmptyStringSchema).optional().describe("Generated paths excluded from the final output."),
1559
+ reservedKeywords: zod.z.array(nonEmptyStringSchema).optional().describe("Additional identifiers treated as reserved words."),
1560
+ customCode: customCodeConfigSchema.optional().describe("Customer-authored code merge configuration."),
1561
+ customQueryPaths: zod.z.array(relativePathSchema).optional().describe("Relative paths to custom query definitions."),
1562
+ analytics: analyticsConfigSchema.optional().describe("Generated client telemetry configuration."),
1563
+ wireTests: wireTestsSchema.optional().describe("Wire-level request and response test generation."),
1564
+ unitTests: unitTestsSchema.optional().describe("SDK unit-test generation."),
1565
+ webSockets: zod.z.boolean().optional().describe("Whether WebSocket clients are generated for supported channels."),
1566
+ streams: streamsSchema.optional().describe("Streaming response generation behavior."),
1567
+ naming: namingConfigSchema.optional().describe("Names and casing used by generated code."),
1568
+ layout: layoutConfigSchema.optional().describe("Generated project and source layout."),
1569
+ serialization: serializationConfigSchema.optional().describe("Generated model serialization behavior.")
1565
1570
  };
1566
1571
  var sdkConfigV1GenerationConfigOverrideSchema = zod.z.strictObject(
1567
1572
  generationConfigOverrideShape
1568
1573
  );
1569
1574
  var sdkConfigV1GenerationConfigSchema = zod.z.strictObject({
1570
1575
  ...generationConfigOverrideShape,
1571
- includeWatermark: zod.z.boolean().default(false),
1572
- ai: zod.z.boolean().default(false),
1573
- buildAllModels: zod.z.boolean().default(false),
1574
- inferServiceNames: zod.z.boolean().default(false),
1575
- includeDeprecatedOperations: zod.z.boolean().default(true),
1576
- multipleResponses: zod.z.boolean().default(false),
1577
- generateFullProject: zod.z.boolean().default(false),
1578
- devContainer: zod.z.boolean().default(false),
1579
- allowMockClient: zod.z.boolean().default(false)
1576
+ buildAllModels: zod.z.boolean().default(false).describe("Whether models not referenced by operations are also generated."),
1577
+ inferServiceNames: zod.z.boolean().default(false).describe("Whether service names are inferred from API structure."),
1578
+ includeDeprecatedOperations: zod.z.boolean().default(true).describe("Whether deprecated API operations are generated."),
1579
+ multipleResponses: zod.z.boolean().default(false).describe("Whether operations model multiple successful response types."),
1580
+ devContainer: zod.z.boolean().default(false).describe("Whether development-container configuration is generated."),
1581
+ allowMockClient: zod.z.boolean().default(false).describe("Whether a mock API client is included in the generated SDK.")
1580
1582
  });
1581
1583
  var commonGenerationKeys = new Set(Object.keys(generationConfigOverrideShape));
1582
1584
  function splitSdkConfigV1TargetGeneration(generation) {
@@ -1598,78 +1600,97 @@ var sdkConfigV1PublishRegistrySchema = zod.z.enum([
1598
1600
  "composer"
1599
1601
  ]);
1600
1602
  var mavenSignatureSchema = zod.z.strictObject({
1601
- keyId: nonEmptyStringSchema,
1602
- password: nonEmptyStringSchema,
1603
- secretKey: nonEmptyStringSchema
1603
+ keyId: nonEmptyStringSchema.describe(
1604
+ "The signing key identifier, or an environment expression that resolves to it."
1605
+ ),
1606
+ password: nonEmptyStringSchema.describe(
1607
+ "The signing key password, or an environment expression that resolves to it."
1608
+ ),
1609
+ secretKey: nonEmptyStringSchema.describe(
1610
+ "The armored secret key, or an environment expression that resolves to it."
1611
+ )
1604
1612
  });
1605
1613
  var commonPublishShape = {
1606
- url: nonEmptyStringSchema.optional(),
1607
- releaseBranch: nonEmptyStringSchema.optional(),
1608
- tolerateRepublish: zod.z.boolean().optional()
1614
+ url: nonEmptyStringSchema.optional().describe("A custom package registry URL."),
1615
+ releaseBranch: nonEmptyStringSchema.optional().describe("The branch used by generated package release workflows."),
1616
+ tolerateRepublish: zod.z.boolean().optional().describe("Whether an already-published package version is treated as non-fatal.")
1609
1617
  };
1610
1618
  var sdkConfigV1PublishConfigSchema = zod.z.discriminatedUnion("registry", [
1611
1619
  zod.z.strictObject({
1612
- registry: zod.z.literal("npm"),
1613
- token: nonEmptyStringSchema.optional(),
1620
+ registry: zod.z.literal("npm").describe("Publishes the package to an npm-compatible registry."),
1621
+ token: nonEmptyStringSchema.optional().describe("The npm registry token, or an environment expression that resolves to it."),
1622
+ ...commonPublishShape
1623
+ }),
1624
+ zod.z.strictObject({
1625
+ registry: zod.z.literal("pypi").describe("Publishes the package to a PyPI-compatible registry."),
1626
+ username: nonEmptyStringSchema.optional().describe("The PyPI username, or an environment expression that resolves to it."),
1627
+ password: nonEmptyStringSchema.optional().describe("The PyPI password or token, or an environment expression that resolves to it."),
1614
1628
  ...commonPublishShape
1615
1629
  }),
1616
1630
  zod.z.strictObject({
1617
- registry: zod.z.literal("pypi"),
1618
- username: nonEmptyStringSchema.optional(),
1619
- password: nonEmptyStringSchema.optional(),
1631
+ registry: zod.z.literal("maven").describe("Publishes the package to a Maven-compatible repository."),
1632
+ username: nonEmptyStringSchema.optional().describe("The Maven username, or an environment expression that resolves to it."),
1633
+ password: nonEmptyStringSchema.optional().describe("The Maven password, or an environment expression that resolves to it."),
1634
+ signature: mavenSignatureSchema.optional().describe("Credentials used to sign Maven artifacts."),
1620
1635
  ...commonPublishShape
1621
1636
  }),
1622
1637
  zod.z.strictObject({
1623
- registry: zod.z.literal("maven"),
1624
- username: nonEmptyStringSchema.optional(),
1625
- password: nonEmptyStringSchema.optional(),
1626
- signature: mavenSignatureSchema.optional(),
1638
+ registry: zod.z.literal("nuget").describe("Publishes the package to a NuGet-compatible registry."),
1627
1639
  ...commonPublishShape
1628
1640
  }),
1629
- zod.z.strictObject({ registry: zod.z.literal("nuget"), ...commonPublishShape }),
1630
- zod.z.strictObject({ registry: zod.z.literal("rubygems"), ...commonPublishShape }),
1631
1641
  zod.z.strictObject({
1632
- registry: zod.z.literal("crates"),
1633
- token: nonEmptyStringSchema.optional(),
1642
+ registry: zod.z.literal("rubygems").describe("Publishes the package to a RubyGems-compatible registry."),
1634
1643
  ...commonPublishShape
1635
1644
  }),
1636
- zod.z.strictObject({ registry: zod.z.literal("go"), ...commonPublishShape }),
1637
- zod.z.strictObject({ registry: zod.z.literal("composer"), ...commonPublishShape })
1645
+ zod.z.strictObject({
1646
+ registry: zod.z.literal("crates").describe("Publishes the crate to a Cargo-compatible registry."),
1647
+ token: nonEmptyStringSchema.optional().describe("The Cargo registry token, or an environment expression that resolves to it."),
1648
+ ...commonPublishShape
1649
+ }),
1650
+ zod.z.strictObject({
1651
+ registry: zod.z.literal("go").describe("Publishes the SDK as a Go module."),
1652
+ ...commonPublishShape
1653
+ }),
1654
+ zod.z.strictObject({
1655
+ registry: zod.z.literal("composer").describe("Publishes the package to a Composer-compatible registry."),
1656
+ ...commonPublishShape
1657
+ })
1638
1658
  ]);
1639
1659
  var reviewersSchema = zod.z.strictObject({
1640
- teams: zod.z.array(nonEmptyStringSchema).optional(),
1641
- users: zod.z.array(nonEmptyStringSchema).optional()
1660
+ teams: zod.z.array(nonEmptyStringSchema).optional().describe("GitHub teams requested as reviewers."),
1661
+ users: zod.z.array(nonEmptyStringSchema).optional().describe("GitHub users requested as reviewers.")
1642
1662
  });
1643
1663
  var githubCredentialsSchema = zod.z.strictObject({
1644
- username: nonEmptyStringSchema.optional(),
1645
- password: nonEmptyStringSchema.optional(),
1646
- token: nonEmptyStringSchema.optional(),
1647
- apiKey: nonEmptyStringSchema.optional()
1664
+ username: nonEmptyStringSchema.optional().describe("The username used to authenticate with the GitHub host."),
1665
+ password: nonEmptyStringSchema.optional().describe("The password used to authenticate with the GitHub host."),
1666
+ token: nonEmptyStringSchema.optional().describe("A token used to authenticate with the GitHub host."),
1667
+ apiKey: nonEmptyStringSchema.optional().describe("An API key used to authenticate with the GitHub host.")
1648
1668
  });
1649
1669
  var githubOutputSchema = zod.z.strictObject({
1650
- repository: nonEmptyStringSchema,
1651
- host: nonEmptyStringSchema.optional(),
1652
- branch: nonEmptyStringSchema.optional(),
1653
- mode: zod.z.enum(["release", "pull-request", "push", "commit", "commit-and-release"]).optional(),
1654
- reviewers: reviewersSchema.optional(),
1655
- /** Raw GitHub credentials. These values can be sensitive and must be handled as secrets. */
1656
- credentials: githubCredentialsSchema.optional(),
1657
- privateRepository: zod.z.boolean().optional()
1670
+ repository: nonEmptyStringSchema.describe(
1671
+ "The GitHub repository that receives generated files."
1672
+ ),
1673
+ host: nonEmptyStringSchema.optional().describe("The GitHub host for enterprise installations."),
1674
+ branch: nonEmptyStringSchema.optional().describe("The target branch for generated changes."),
1675
+ mode: zod.z.enum(["release", "pull-request", "push", "commit", "commit-and-release"]).optional().describe("How generated changes are delivered to the repository."),
1676
+ reviewers: reviewersSchema.optional().describe("Reviewers requested for generated pull requests."),
1677
+ credentials: githubCredentialsSchema.optional().describe("Credentials used to authenticate GitHub delivery."),
1678
+ privateRepository: zod.z.boolean().optional().describe("Whether the destination repository is private.")
1658
1679
  });
1659
1680
  var filesOutputSchema = zod.z.strictObject({
1660
- delivery: zod.z.literal("files"),
1661
- path: nonEmptyStringSchema.optional(),
1662
- publish: sdkConfigV1PublishConfigSchema.optional()
1681
+ delivery: zod.z.literal("files").describe("Writes the generated SDK to a directory."),
1682
+ path: nonEmptyStringSchema.optional().describe("The destination directory for generated files."),
1683
+ publish: sdkConfigV1PublishConfigSchema.optional().describe("Optional package registry publication.")
1663
1684
  });
1664
1685
  var zipOutputSchema = zod.z.strictObject({
1665
- delivery: zod.z.literal("zip"),
1666
- fileName: nonEmptyStringSchema.optional(),
1667
- publish: sdkConfigV1PublishConfigSchema.optional()
1686
+ delivery: zod.z.literal("zip").describe("Packages the generated SDK as a ZIP archive."),
1687
+ fileName: nonEmptyStringSchema.optional().describe("The generated ZIP archive file name."),
1688
+ publish: sdkConfigV1PublishConfigSchema.optional().describe("Optional package registry publication.")
1668
1689
  });
1669
1690
  var githubDeliverySchema = zod.z.strictObject({
1670
- delivery: zod.z.literal("github"),
1671
- github: githubOutputSchema,
1672
- publish: sdkConfigV1PublishConfigSchema.optional()
1691
+ delivery: zod.z.literal("github").describe("Delivers the generated SDK to GitHub."),
1692
+ github: githubOutputSchema.describe("GitHub repository delivery settings."),
1693
+ publish: sdkConfigV1PublishConfigSchema.optional().describe("Optional package registry publication.")
1673
1694
  });
1674
1695
  var sdkConfigV1OutputConfigSchema = zod.z.discriminatedUnion(
1675
1696
  "delivery",
@@ -1681,29 +1702,33 @@ var sdkConfigV1OutputConfigSchema = zod.z.discriminatedUnion(
1681
1702
  var sdkConfigV1DependencySchema = dependencySchema;
1682
1703
  var sdkConfigV1PackageConfigSchema = packageConfigSchema;
1683
1704
  var sdkConfigV1ReplayConfigSchema = zod.z.strictObject({
1684
- enabled: zod.z.boolean()
1705
+ enabled: zod.z.boolean().describe("Whether regeneration reapplies customer-authored repository changes.")
1685
1706
  });
1686
1707
  var apiImportSettingsSchema = zod.z.strictObject({
1687
- respectNullableSchemas: zod.z.boolean().optional(),
1688
- titleAsSchemaName: zod.z.boolean().optional(),
1689
- coerceEnumsToLiterals: zod.z.boolean().optional(),
1690
- idiomaticRequestNames: zod.z.boolean().optional(),
1691
- wrapReferencesToNullableInOptional: zod.z.boolean().optional(),
1692
- coerceOptionalSchemasToNullable: zod.z.boolean().optional(),
1693
- pathParameterOrder: zod.z.enum(["url-order", "spec-order"]).optional(),
1694
- onlyIncludeReferencedSchemas: zod.z.boolean().optional(),
1695
- objectQueryParameters: zod.z.boolean().optional(),
1696
- typeDatesAsStrings: zod.z.boolean().optional(),
1697
- groupMultiApiEnvironments: zod.z.boolean().optional(),
1698
- ignoreTags: zod.z.boolean().optional(),
1699
- disambiguateRequestNames: zod.z.boolean().optional(),
1700
- respectReadonlySchemas: zod.z.boolean().optional(),
1701
- discriminatedUnionV2: zod.z.boolean().optional(),
1702
- undiscriminatedUnionsWithLiterals: zod.z.boolean().optional(),
1703
- inlineAllOfSchemas: zod.z.boolean().optional(),
1704
- resolveSchemaCollisions: zod.z.boolean().optional(),
1705
- asyncApiMessageNaming: zod.z.enum(["v1", "v2"]).optional(),
1706
- defaultIntegerFormat: zod.z.enum(["int32", "int64", "uint32", "uint64"]).optional()
1708
+ respectNullableSchemas: zod.z.boolean().optional().describe("Whether nullable schemas remain nullable in generated types."),
1709
+ titleAsSchemaName: zod.z.boolean().optional().describe("Whether a schema title can determine the generated type name."),
1710
+ coerceEnumsToLiterals: zod.z.boolean().optional().describe("Whether single-value enums are imported as literal values."),
1711
+ idiomaticRequestNames: zod.z.boolean().optional().describe("Whether request types use concise, idiomatic generated names."),
1712
+ wrapReferencesToNullableInOptional: zod.z.boolean().optional().describe("Whether nullable schema references are also treated as optional."),
1713
+ coerceOptionalSchemasToNullable: zod.z.boolean().optional().describe("Whether optional properties are represented as nullable required properties."),
1714
+ pathParameterOrder: zod.z.enum(["url-order", "spec-order"]).optional().describe("Whether path parameters follow their URL order or specification order."),
1715
+ onlyIncludeReferencedSchemas: zod.z.boolean().optional().describe("Whether unreferenced schemas are omitted from the generated SDK."),
1716
+ objectQueryParameters: zod.z.boolean().optional().describe("Whether object-valued query parameters are preserved as objects."),
1717
+ typeDatesAsStrings: zod.z.boolean().optional().describe("Whether date and date-time schemas are generated as strings."),
1718
+ groupMultiApiEnvironments: zod.z.boolean().optional().describe(
1719
+ "Whether environments from multiple API sources are merged into shared named groups."
1720
+ ),
1721
+ ignoreTags: zod.z.boolean().optional().describe("Whether API tags are ignored when organizing generated resources."),
1722
+ disambiguateRequestNames: zod.z.boolean().optional().describe("Whether colliding request type names are automatically disambiguated."),
1723
+ respectReadonlySchemas: zod.z.boolean().optional().describe(
1724
+ "Whether read-only properties are modeled separately for request and response types."
1725
+ ),
1726
+ discriminatedUnionV2: zod.z.boolean().optional().describe("Whether oneOf and anyOf schemas use the newer discriminator inference rules."),
1727
+ undiscriminatedUnionsWithLiterals: zod.z.boolean().optional().describe("Whether literal-bearing unions remain undiscriminated during import."),
1728
+ inlineAllOfSchemas: zod.z.boolean().optional().describe("Whether schemas composed with allOf are inlined when possible."),
1729
+ resolveSchemaCollisions: zod.z.boolean().optional().describe("Whether colliding imported schema names are resolved automatically."),
1730
+ asyncApiMessageNaming: zod.z.enum(["v1", "v2"]).optional().describe("The naming strategy used for messages imported from AsyncAPI."),
1731
+ defaultIntegerFormat: zod.z.enum(["int32", "int64", "uint32", "uint64"]).optional().describe("The integer format used when a schema does not declare one.")
1707
1732
  });
1708
1733
  var sourceSpecTypeSchema = zod.z.enum([
1709
1734
  "openapi",
@@ -1715,27 +1740,30 @@ var sourceSpecTypeSchema = zod.z.enum([
1715
1740
 
1716
1741
  // src/sdk-config/v1/source.ts
1717
1742
  var sourceSpecShape = {
1718
- id: nonEmptyStringSchema,
1719
- type: sourceSpecTypeSchema,
1720
- name: nonEmptyStringSchema.optional(),
1721
- namespace: nonEmptyStringSchema.optional(),
1722
- apiImportSettings: apiImportSettingsSchema.optional(),
1723
- overlays: zod.z.array(relativePathSchema).optional(),
1724
- overrides: zod.z.array(relativePathSchema).optional()
1743
+ id: nonEmptyStringSchema.describe("A unique identifier for this API source."),
1744
+ type: sourceSpecTypeSchema.describe("The API description format of this source."),
1745
+ name: nonEmptyStringSchema.optional().describe("A human-readable name for this API source."),
1746
+ namespace: nonEmptyStringSchema.optional().describe("A namespace used to isolate this source in a multi-source SDK."),
1747
+ apiImportSettings: apiImportSettingsSchema.optional().describe("Import behavior that overrides the source-level defaults for this spec."),
1748
+ overlays: zod.z.array(relativePathSchema).optional().describe("Relative paths to overlays applied to this source in order."),
1749
+ overrides: zod.z.array(relativePathSchema).optional().describe("Relative paths to source override files applied in order.")
1725
1750
  };
1726
1751
  var sdkConfigV1SourceSpecSchema = zod.z.union(
1727
1752
  [
1728
- zod.z.strictObject({ ...sourceSpecShape, path: relativePathSchema }),
1729
1753
  zod.z.strictObject({
1730
1754
  ...sourceSpecShape,
1731
- url: zod.z.url({ protocol: /^https?$/ })
1755
+ path: relativePathSchema.describe("The relative path to the API source file.")
1756
+ }),
1757
+ zod.z.strictObject({
1758
+ ...sourceSpecShape,
1759
+ url: zod.z.url({ protocol: /^https?$/ }).describe("The HTTP or HTTPS URL of the API source file.")
1732
1760
  })
1733
1761
  ],
1734
1762
  { error: "source spec must contain exactly one locator: path or HTTP(S) url" }
1735
1763
  );
1736
1764
  var sdkConfigV1SourceConfigSchema = zod.z.strictObject({
1737
- specs: zod.z.array(sdkConfigV1SourceSpecSchema).min(1, "source.specs must contain at least one source spec"),
1738
- apiImportSettings: apiImportSettingsSchema.optional()
1765
+ specs: zod.z.array(sdkConfigV1SourceSpecSchema).min(1, "source.specs must contain at least one source spec").describe("API source files in authoritative processing order."),
1766
+ apiImportSettings: apiImportSettingsSchema.optional().describe("Default import behavior shared by every source spec.")
1739
1767
  }).superRefine(({ specs }, context) => {
1740
1768
  const seenIds = /* @__PURE__ */ new Set();
1741
1769
  specs.forEach(({ id }, index) => {
@@ -1750,74 +1778,80 @@ var sdkConfigV1SourceConfigSchema = zod.z.strictObject({
1750
1778
  });
1751
1779
  });
1752
1780
  var cliGenerationConfigSchema = zod.z.strictObject({
1753
- paginationParameters: zod.z.array(nonEmptyStringSchema).optional(),
1754
- skills: zod.z.boolean().optional()
1781
+ paginationParameters: zod.z.array(nonEmptyStringSchema).optional().describe("Request parameter names treated as pagination controls by the CLI."),
1782
+ skills: zod.z.boolean().optional().describe("Whether the generated CLI includes skills that teach AI agents to invoke commands.")
1755
1783
  });
1756
1784
  var csharpGenerationConfigSchema = zod.z.strictObject({
1757
- useOptionalWrapper: zod.z.boolean().optional(),
1758
- simplifyObjectDictionaries: zod.z.boolean().optional(),
1759
- explicitNamespaces: zod.z.boolean().optional(),
1760
- rootNamespaceForCoreClasses: zod.z.boolean().optional(),
1761
- includeExceptionHandler: zod.z.boolean().optional(),
1762
- experimentalExplicitNullableOptional: zod.z.boolean().optional()
1785
+ useOptionalWrapper: zod.z.boolean().optional().describe("Whether optional values use an explicit Optional wrapper."),
1786
+ simplifyObjectDictionaries: zod.z.boolean().optional().describe("Whether object schemas with arbitrary values use simplified dictionary types."),
1787
+ explicitNamespaces: zod.z.boolean().optional().describe("Whether generated resource groups use explicit nested namespaces."),
1788
+ rootNamespaceForCoreClasses: zod.z.boolean().optional().describe("Whether shared client classes are emitted in the root namespace."),
1789
+ includeExceptionHandler: zod.z.boolean().optional().describe("Whether generated client operations use a configurable exception handler."),
1790
+ experimentalExplicitNullableOptional: zod.z.boolean().optional().describe(
1791
+ "Whether optional nullable properties distinguish omitted values from explicit nulls."
1792
+ )
1763
1793
  });
1764
1794
  var goGenerationConfigSchema = zod.z.strictObject({
1765
- legacyComplexModels: zod.z.boolean().optional(),
1795
+ legacyComplexModels: zod.z.boolean().optional().describe("Whether complex models use the legacy Go representation."),
1766
1796
  /** Uppercase common initialisms in generated names (`UserID` rather than `UserId`). */
1767
- smartCasing: zod.z.boolean().optional(),
1797
+ smartCasing: zod.z.boolean().optional().describe("Whether generated Go names capitalize common initialisms."),
1768
1798
  /** Overrides the fern root-client constructor independently from the client type name. */
1769
- clientConstructorName: nonEmptyStringSchema.optional(),
1770
- unionVersion: zod.z.enum(["v0", "v1"]).optional(),
1771
- includeLegacyClientOptions: zod.z.boolean().optional()
1799
+ clientConstructorName: nonEmptyStringSchema.optional().describe("The generated root-client constructor name."),
1800
+ unionVersion: zod.z.enum(["v0", "v1"]).optional().describe("The representation used for generated Go unions."),
1801
+ includeLegacyClientOptions: zod.z.boolean().optional().describe("Whether the client retains legacy constructor option helpers.")
1772
1802
  });
1773
1803
  var jvmGenerationConfigSchema = zod.z.strictObject({
1774
- packageLayout: zod.z.enum(["flat", "nested"]).optional(),
1775
- useLocalDateForDates: zod.z.boolean().optional(),
1776
- collapseOptionalNullable: zod.z.boolean().optional(),
1777
- gradleDistributionUrl: zod.z.string().min(1).optional(),
1778
- gradlePluginManagement: zod.z.string().optional(),
1779
- gradleCentralDependencyManagement: zod.z.boolean().optional(),
1804
+ packageLayout: zod.z.enum(["flat", "nested"]).optional().describe("Whether generated JVM packages use a flat or nested resource layout."),
1805
+ useLocalDateForDates: zod.z.boolean().optional().describe("Whether date-only values use LocalDate instead of OffsetDateTime."),
1806
+ collapseOptionalNullable: zod.z.boolean().optional().describe("Whether optional nullable values collapse into a single nullable representation."),
1807
+ gradleDistributionUrl: zod.z.string().min(1).optional().describe("The Gradle distribution URL written to the generated wrapper."),
1808
+ gradlePluginManagement: zod.z.string().optional().describe("Plugin management configuration added to the generated Gradle settings."),
1809
+ gradleCentralDependencyManagement: zod.z.boolean().optional().describe("Whether dependency versions are managed centrally in the Gradle project."),
1780
1810
  /** Selects co-located async methods or a separate async client surface. */
1781
- asyncStyle: zod.z.enum(["dedicated-client", "twin-methods"]).optional()
1811
+ asyncStyle: zod.z.enum(["dedicated-client", "twin-methods"]).optional().describe("Whether asynchronous operations use a separate client or co-located methods.")
1782
1812
  });
1783
1813
 
1784
1814
  // src/sdk-config-domain/v1/language/java.ts
1785
1815
  var javaGenerationConfigSchema = jvmGenerationConfigSchema.extend({
1786
- includeKotlinSnippets: zod.z.boolean().optional()
1816
+ includeKotlinSnippets: zod.z.boolean().optional().describe("Whether Java SDK documentation includes Kotlin usage snippets.")
1787
1817
  });
1788
1818
 
1789
1819
  // src/sdk-config-domain/v1/language/kotlin.ts
1790
1820
  var kotlinGenerationConfigSchema = jvmGenerationConfigSchema;
1791
1821
  var compilerOptionsSchema = zod.z.strictObject({
1792
- target: nonEmptyStringSchema.optional(),
1793
- module: nonEmptyStringSchema.optional(),
1794
- lib: zod.z.array(nonEmptyStringSchema).optional()
1822
+ target: nonEmptyStringSchema.optional().describe("The JavaScript language target passed to TypeScript."),
1823
+ module: nonEmptyStringSchema.optional().describe("The module format passed to TypeScript."),
1824
+ lib: zod.z.array(nonEmptyStringSchema).optional().describe("The runtime library definitions passed to TypeScript.")
1795
1825
  });
1796
1826
  var packageScriptSchema = zod.z.strictObject({
1797
- name: nonEmptyStringSchema,
1798
- command: nonEmptyStringSchema
1827
+ name: nonEmptyStringSchema.describe("The package script name."),
1828
+ command: nonEmptyStringSchema.describe("The command executed by the package script.")
1799
1829
  });
1800
1830
  var httpClientSchema = zod.z.strictObject({
1801
- name: zod.z.enum(["axios", "fetch"])
1831
+ name: zod.z.enum(["axios", "fetch"]).describe("The HTTP client used by generated TypeScript code.")
1802
1832
  });
1803
1833
  var typescriptGenerationConfigSchema = zod.z.strictObject({
1804
- typescriptVersion: nonEmptyStringSchema.optional(),
1805
- zodVersion: nonEmptyStringSchema.optional(),
1806
- compilerOptions: compilerOptionsSchema.optional(),
1807
- httpClient: httpClientSchema.optional(),
1808
- packageManager: zod.z.enum(["pnpm", "yarn"]).optional(),
1809
- testFramework: zod.z.enum(["jest", "vitest"]).optional(),
1810
- namingStrategy: zod.z.enum(["base", "originalPropertyNames"]).optional(),
1811
- bundle: zod.z.boolean().optional(),
1812
- exportClassDefault: zod.z.boolean().optional(),
1834
+ typescriptVersion: nonEmptyStringSchema.optional().describe("The TypeScript version used by the generated project."),
1835
+ zodVersion: nonEmptyStringSchema.optional().describe("The Zod version used by generated runtime schemas."),
1836
+ compilerOptions: compilerOptionsSchema.optional().describe("TypeScript compiler options for the generated project."),
1837
+ httpClient: httpClientSchema.optional().describe("The HTTP client used by generated TypeScript code."),
1838
+ packageManager: zod.z.enum(["pnpm", "yarn"]).optional().describe("The package manager used by the generated project."),
1839
+ packageManagerVersion: nonEmptyStringSchema.optional().describe("The package manager version used by the generated project."),
1840
+ testFramework: zod.z.enum(["jest", "vitest"]).optional().describe("The test framework used by generated tests."),
1841
+ namingStrategy: zod.z.enum(["base", "originalPropertyNames"]).optional().describe("How schema property names are converted into TypeScript identifiers."),
1842
+ bundle: zod.z.boolean().optional().describe("Whether the generated package includes bundled output."),
1843
+ exportClassDefault: zod.z.boolean().optional().describe("Whether the client class is also exported as the default export."),
1813
1844
  /** Name of the top-level namespace export emitted by Fern-compatible TypeScript SDKs. */
1814
- namespaceExportName: nonEmptyStringSchema.optional(),
1815
- allowCustomFetcher: zod.z.boolean().optional(),
1816
- useBrandedStringAliases: zod.z.boolean().optional(),
1817
- useLegacyExports: zod.z.boolean().optional(),
1818
- useBigInt: zod.z.boolean().optional(),
1819
- serdeLayer: zod.z.boolean().optional(),
1820
- scripts: zod.z.array(packageScriptSchema).optional()
1845
+ namespaceExportName: nonEmptyStringSchema.optional().describe("The top-level namespace export name."),
1846
+ consolidateTypeFiles: zod.z.boolean().optional().describe("Whether generated types are consolidated into fewer source files."),
1847
+ allowCustomFetcher: zod.z.boolean().optional().describe("Whether callers can supply a custom fetch implementation."),
1848
+ useBrandedStringAliases: zod.z.boolean().optional().describe("Whether string aliases are emitted as distinct branded types."),
1849
+ useLegacyExports: zod.z.boolean().optional().describe("Whether the package emits the legacy export layout."),
1850
+ useBigInt: zod.z.boolean().optional().describe("Whether 64-bit integer values are represented with bigint."),
1851
+ serdeLayer: zod.z.boolean().optional().describe("Whether generated models use Fern serialization and deserialization helpers."),
1852
+ /** Ship only the ESM build (drops CJS) to avoid the Node dual-package hazard. */
1853
+ esmOnly: zod.z.boolean().optional().describe("Whether the package emits only ECMAScript modules."),
1854
+ scripts: zod.z.array(packageScriptSchema).optional().describe("Additional scripts added to the generated package manifest.")
1821
1855
  });
1822
1856
 
1823
1857
  // src/sdk-config-domain/v1/language/mcp.ts
@@ -1832,172 +1866,183 @@ var mcpAvailabilityStatuses = [
1832
1866
  "LEGACY"
1833
1867
  ];
1834
1868
  var mcpToolFilterSchema = zod.z.strictObject({
1835
- include: zod.z.array(nonEmptyStringSchema).optional(),
1836
- exclude: zod.z.array(nonEmptyStringSchema).optional()
1869
+ include: zod.z.array(nonEmptyStringSchema).optional().describe("Operations explicitly included as MCP tools."),
1870
+ exclude: zod.z.array(nonEmptyStringSchema).optional().describe("Operations explicitly excluded from MCP tools.")
1837
1871
  });
1838
1872
  var mcpToolsetNameSchema = nonEmptyStringSchema.refine(
1839
1873
  (name) => name !== "default" && /^[a-z0-9-]+$/.test(name),
1840
1874
  'toolset names must match [a-z0-9-]+ and cannot be "default"'
1841
1875
  );
1842
1876
  var mcpGenerationConfigSchema = typescriptGenerationConfigSchema.extend({
1843
- serverName: nonEmptyStringSchema.optional(),
1844
- serverDescription: nonEmptyStringSchema.optional(),
1845
- excludeAvailability: zod.z.array(zod.z.enum(mcpAvailabilityStatuses)).optional(),
1846
- tools: mcpToolFilterSchema.optional(),
1847
- toolsets: zod.z.record(mcpToolsetNameSchema, mcpToolFilterSchema).optional()
1877
+ serverName: nonEmptyStringSchema.optional().describe("The name advertised by the generated MCP server."),
1878
+ serverDescription: nonEmptyStringSchema.optional().describe("The description advertised by the generated MCP server."),
1879
+ excludeAvailability: zod.z.array(zod.z.enum(mcpAvailabilityStatuses)).optional().describe("Operation availability statuses excluded from MCP tool generation."),
1880
+ tools: mcpToolFilterSchema.optional().describe("Global operation filters for generated MCP tools."),
1881
+ toolsets: zod.z.record(mcpToolsetNameSchema, mcpToolFilterSchema).optional().describe("Named MCP toolsets and the operation filters for each toolset.")
1848
1882
  });
1849
1883
  var phpGenerationConfigSchema = zod.z.strictObject({
1850
- propertyAccess: zod.z.enum(["public", "private"]).optional(),
1851
- generateClientInterfaces: zod.z.boolean().optional()
1884
+ propertyAccess: zod.z.enum(["public", "private"]).optional().describe("The visibility of generated PHP model properties."),
1885
+ generateClientInterfaces: zod.z.boolean().optional().describe("Whether interfaces are generated for PHP client classes.")
1852
1886
  });
1853
1887
  var pythonClientSchema = zod.z.strictObject({
1854
- fileName: nonEmptyStringSchema.optional(),
1855
- exportedFileName: nonEmptyStringSchema.optional()
1888
+ fileName: nonEmptyStringSchema.optional().describe("The source file name for the Python client."),
1889
+ exportedFileName: nonEmptyStringSchema.optional().describe("The file name used when exporting the Python client.")
1856
1890
  });
1857
1891
  var pydanticConfigSchema = zod.z.strictObject({
1858
- versionCompatibility: zod.z.enum(["v1", "v2", "both", "v1-on-v2"]).optional(),
1859
- frozen: zod.z.boolean().optional(),
1860
- requireOptionalFields: zod.z.boolean().optional(),
1861
- unionNaming: zod.z.enum(["v0", "v1"]).optional(),
1862
- useFieldAliases: zod.z.boolean().optional()
1892
+ versionCompatibility: zod.z.enum(["v1", "v2", "both", "v1-on-v2"]).optional().describe("The Pydantic major versions supported by generated models."),
1893
+ frozen: zod.z.boolean().optional().describe("Whether generated Pydantic models are immutable."),
1894
+ requireOptionalFields: zod.z.boolean().optional().describe("Whether Optional fields remain required unless they declare a default."),
1895
+ unionNaming: zod.z.enum(["v0", "v1"]).optional().describe("The naming strategy for generated union types."),
1896
+ useFieldAliases: zod.z.boolean().optional().describe("Whether Pydantic field aliases preserve wire names.")
1863
1897
  });
1864
1898
  var additionalInitExportSchema = zod.z.strictObject({
1865
- from: nonEmptyStringSchema,
1866
- imports: zod.z.array(nonEmptyStringSchema).min(1)
1899
+ from: nonEmptyStringSchema.describe("The module from which names are re-exported."),
1900
+ imports: zod.z.array(nonEmptyStringSchema).min(1).describe("Names re-exported from the module.")
1867
1901
  });
1868
1902
  var pythonGenerationConfigSchema = zod.z.strictObject({
1869
- pythonVersion: nonEmptyStringSchema.optional(),
1870
- pydanticVersion: nonEmptyStringSchema.optional(),
1871
- pydantic: pydanticConfigSchema.optional(),
1872
- client: pythonClientSchema.optional(),
1903
+ pythonVersion: nonEmptyStringSchema.optional().describe("The Python version targeted by the generated project."),
1904
+ pydanticVersion: nonEmptyStringSchema.optional().describe("The Pydantic dependency version requirement."),
1905
+ pydantic: pydanticConfigSchema.optional().describe("Pydantic model-generation behavior."),
1906
+ client: pythonClientSchema.optional().describe("Python client file naming."),
1873
1907
  /** Default followed by generated sync and async HTTP clients when the caller does not override it. */
1874
- followRedirectsByDefault: zod.z.boolean().optional(),
1908
+ followRedirectsByDefault: zod.z.boolean().optional().describe("Whether generated HTTP clients follow redirects by default."),
1875
1909
  /** Chunk size passed to Python byte-stream iterators. */
1876
- defaultBytesStreamChunkSize: zod.z.number().int().positive().optional(),
1910
+ defaultBytesStreamChunkSize: zod.z.number().int().positive().optional().describe("The default byte-stream iterator chunk size."),
1877
1911
  /** Python interpreter recursion limit installed by the generated package at import time. */
1878
- recursionLimit: zod.z.number().int().gt(1e3).optional(),
1912
+ recursionLimit: zod.z.number().int().gt(1e3).optional().describe("The Python recursion limit installed when the generated package is imported."),
1879
1913
  /** Published Python extras, keyed by extra name with package dependency names as values. */
1880
- extras: zod.z.record(nonEmptyStringSchema, zod.z.array(nonEmptyStringSchema)).optional(),
1881
- alwaysInitializeOptionals: zod.z.boolean().optional(),
1882
- useTypedDictRequests: zod.z.boolean().optional(),
1883
- additionalInitExports: zod.z.array(additionalInitExportSchema).optional()
1914
+ extras: zod.z.record(nonEmptyStringSchema, zod.z.array(nonEmptyStringSchema)).optional().describe("Published Python extras and their dependency names."),
1915
+ alwaysInitializeOptionals: zod.z.boolean().optional().describe("Whether optional model fields are initialized even when omitted."),
1916
+ useTypedDictRequests: zod.z.boolean().optional().describe("Whether request bodies are generated as TypedDict types."),
1917
+ additionalInitExports: zod.z.array(additionalInitExportSchema).optional().describe("Additional names re-exported from the package initializer.")
1884
1918
  });
1885
1919
  var rubyGenerationConfigSchema = zod.z.strictObject({
1886
- requirePaths: zod.z.array(nonEmptyStringSchema).optional()
1920
+ requirePaths: zod.z.array(nonEmptyStringSchema).optional().describe("Ruby load paths included in the generated gem specification.")
1887
1921
  });
1888
1922
  var rustGenerationConfigSchema = zod.z.strictObject({
1889
1923
  /**
1890
1924
  * Rust type for datetime primitives. `offset` maps to `DateTime<FixedOffset>` and preserves the
1891
1925
  * timezone the payload carried; `utc` maps to `DateTime<Utc>` and normalizes to UTC.
1892
1926
  */
1893
- dateTimeType: zod.z.enum(["offset", "utc"]).optional(),
1927
+ dateTimeType: zod.z.enum(["offset", "utc"]).optional().describe("Whether datetime values preserve their offset or normalize to UTC."),
1894
1928
  /** Uppercase common initialisms in generated names (`UserID` rather than `UserId`). */
1895
- capitalizeInitialisms: zod.z.boolean().optional(),
1929
+ capitalizeInitialisms: zod.z.boolean().optional().describe("Whether generated Rust names capitalize common initialisms."),
1896
1930
  /** Cargo features, mapping a feature name to the dependencies or features it enables. */
1897
- features: zod.z.record(zod.z.string(), zod.z.array(nonEmptyStringSchema)).optional(),
1931
+ features: zod.z.record(zod.z.string(), zod.z.array(nonEmptyStringSchema)).optional().describe("Cargo features and the dependencies or features each enables."),
1898
1932
  /** Overrides which features make up Cargo's `default` feature set. */
1899
- defaultFeatures: zod.z.array(nonEmptyStringSchema).optional()
1933
+ defaultFeatures: zod.z.array(nonEmptyStringSchema).optional().describe("Cargo features included in the crate default feature set.")
1900
1934
  });
1901
1935
  var swiftGenerationConfigSchema = zod.z.strictObject({
1902
- moduleName: nonEmptyStringSchema.optional(),
1903
- nullableAsOptional: zod.z.boolean().optional()
1936
+ moduleName: nonEmptyStringSchema.optional().describe("The Swift module name for the generated package."),
1937
+ nullableAsOptional: zod.z.boolean().optional().describe("Whether nullable values are represented as Swift optionals.")
1904
1938
  });
1905
1939
  var planModifierSourceSchema = zod.z.discriminatedUnion("enabled", [
1906
- zod.z.strictObject({ enabled: zod.z.literal(true), sourceDir: nonEmptyStringSchema }),
1907
- zod.z.strictObject({ enabled: zod.z.literal(false) })
1940
+ zod.z.strictObject({
1941
+ enabled: zod.z.literal(true).describe("Enables custom Terraform plan modifiers."),
1942
+ sourceDir: nonEmptyStringSchema.describe(
1943
+ "The directory containing custom plan modifier source files."
1944
+ )
1945
+ }),
1946
+ zod.z.strictObject({
1947
+ enabled: zod.z.literal(false).describe("Disables custom Terraform plan modifiers.")
1948
+ })
1908
1949
  ]);
1909
1950
  var planModifiersSchema = zod.z.strictObject({
1910
- resources: planModifierSourceSchema,
1911
- attributes: planModifierSourceSchema
1951
+ resources: planModifierSourceSchema.describe("Custom plan modifiers for generated resources."),
1952
+ attributes: planModifierSourceSchema.describe("Custom plan modifiers for generated attributes.")
1912
1953
  });
1913
1954
  var providerSchemaSchema = zod.z.strictObject({
1914
- addressKey: nonEmptyStringSchema,
1915
- authTokenKey: nonEmptyStringSchema
1955
+ addressKey: nonEmptyStringSchema.describe(
1956
+ "The provider attribute used to configure the API address."
1957
+ ),
1958
+ authTokenKey: nonEmptyStringSchema.describe(
1959
+ "The provider attribute used to configure the authentication token."
1960
+ )
1916
1961
  });
1917
1962
  var terraformGenerationConfigSchema = zod.z.strictObject({
1918
- providerName: nonEmptyStringSchema.optional(),
1919
- providerVersion: nonEmptyStringSchema.optional(),
1920
- providerModulePath: goModulePathSchema.optional(),
1921
- mockAcceptance: zod.z.boolean().optional(),
1922
- hideComputedDiff: zod.z.boolean().optional(),
1923
- providerSchema: providerSchemaSchema.optional(),
1924
- planModifiers: planModifiersSchema.optional()
1963
+ providerName: nonEmptyStringSchema.optional().describe("The Terraform provider name."),
1964
+ providerVersion: nonEmptyStringSchema.optional().describe("The generated Terraform provider version."),
1965
+ providerModulePath: goModulePathSchema.optional().describe("The Go module path for the generated provider."),
1966
+ mockAcceptance: zod.z.boolean().optional().describe("Whether acceptance tests use a mock API server."),
1967
+ hideComputedDiff: zod.z.boolean().optional().describe("Whether computed-only changes are hidden from Terraform plans."),
1968
+ providerSchema: providerSchemaSchema.optional().describe("Names of provider-level configuration attributes."),
1969
+ planModifiers: planModifiersSchema.optional().describe("Custom plan modifier source configuration.")
1925
1970
  });
1926
1971
 
1927
1972
  // src/sdk-config/v1/target.ts
1928
1973
  var targetOverrideShape = {
1929
- generatorVersion: exactSemverSchema.optional(),
1930
- sdkName: nonEmptyStringSchema.optional(),
1931
- sdkVersion: nonEmptyStringSchema.optional(),
1932
- client: sdkConfigV1ClientConfigOverrideSchema.optional(),
1933
- docs: sdkConfigV1DocsConfigSchema.optional(),
1934
- package: sdkConfigV1PackageConfigSchema.optional(),
1935
- output: sdkConfigV1OutputConfigSchema.optional()
1974
+ generatorVersion: exactSemverSchema.optional().describe("The exact generator version used for this target."),
1975
+ sdkName: nonEmptyStringSchema.optional().describe("An SDK name that overrides the root value for this target."),
1976
+ sdkVersion: nonEmptyStringSchema.optional().describe("An SDK version that overrides the root value for this target."),
1977
+ client: sdkConfigV1ClientConfigOverrideSchema.optional().describe("Client settings that override root client configuration for this target."),
1978
+ docs: sdkConfigV1DocsConfigSchema.optional().describe("Documentation settings that override root documentation for this target."),
1979
+ package: sdkConfigV1PackageConfigSchema.optional().describe("Package metadata that overrides root package configuration for this target."),
1980
+ output: sdkConfigV1OutputConfigSchema.optional().describe("Output configuration that replaces the root output for this target.")
1936
1981
  };
1937
1982
  var sdkConfigV1TargetSchema = zod.z.discriminatedUnion("language", [
1938
1983
  zod.z.strictObject({
1939
- language: zod.z.literal("typescript"),
1940
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(typescriptGenerationConfigSchema.shape).optional(),
1984
+ language: zod.z.literal("typescript").describe("Generates a TypeScript SDK."),
1985
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(typescriptGenerationConfigSchema.shape).optional().describe("Common and TypeScript-specific generation settings for this target."),
1941
1986
  ...targetOverrideShape
1942
1987
  }),
1943
1988
  zod.z.strictObject({
1944
- language: zod.z.literal("python"),
1945
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(pythonGenerationConfigSchema.shape).optional(),
1989
+ language: zod.z.literal("python").describe("Generates a Python SDK."),
1990
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(pythonGenerationConfigSchema.shape).optional().describe("Common and Python-specific generation settings for this target."),
1946
1991
  ...targetOverrideShape
1947
1992
  }),
1948
1993
  zod.z.strictObject({
1949
- language: zod.z.literal("java"),
1950
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(javaGenerationConfigSchema.shape).optional(),
1994
+ language: zod.z.literal("java").describe("Generates a Java SDK."),
1995
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(javaGenerationConfigSchema.shape).optional().describe("Common and Java-specific generation settings for this target."),
1951
1996
  ...targetOverrideShape
1952
1997
  }),
1953
1998
  zod.z.strictObject({
1954
- language: zod.z.literal("kotlin"),
1955
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(kotlinGenerationConfigSchema.shape).optional(),
1999
+ language: zod.z.literal("kotlin").describe("Generates a Kotlin SDK."),
2000
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(kotlinGenerationConfigSchema.shape).optional().describe("Common and Kotlin-specific generation settings for this target."),
1956
2001
  ...targetOverrideShape
1957
2002
  }),
1958
2003
  zod.z.strictObject({
1959
- language: zod.z.literal("go"),
1960
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(goGenerationConfigSchema.shape).optional(),
2004
+ language: zod.z.literal("go").describe("Generates a Go SDK."),
2005
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(goGenerationConfigSchema.shape).optional().describe("Common and Go-specific generation settings for this target."),
1961
2006
  ...targetOverrideShape
1962
2007
  }),
1963
2008
  zod.z.strictObject({
1964
- language: zod.z.literal("csharp"),
1965
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(csharpGenerationConfigSchema.shape).optional(),
2009
+ language: zod.z.literal("csharp").describe("Generates a C# SDK."),
2010
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(csharpGenerationConfigSchema.shape).optional().describe("Common and C#-specific generation settings for this target."),
1966
2011
  ...targetOverrideShape
1967
2012
  }),
1968
2013
  zod.z.strictObject({
1969
- language: zod.z.literal("php"),
1970
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(phpGenerationConfigSchema.shape).optional(),
2014
+ language: zod.z.literal("php").describe("Generates a PHP SDK."),
2015
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(phpGenerationConfigSchema.shape).optional().describe("Common and PHP-specific generation settings for this target."),
1971
2016
  ...targetOverrideShape
1972
2017
  }),
1973
2018
  zod.z.strictObject({
1974
- language: zod.z.literal("ruby"),
1975
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(rubyGenerationConfigSchema.shape).optional(),
2019
+ language: zod.z.literal("ruby").describe("Generates a Ruby SDK."),
2020
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(rubyGenerationConfigSchema.shape).optional().describe("Common and Ruby-specific generation settings for this target."),
1976
2021
  ...targetOverrideShape
1977
2022
  }),
1978
2023
  zod.z.strictObject({
1979
- language: zod.z.literal("rust"),
1980
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(rustGenerationConfigSchema.shape).optional(),
2024
+ language: zod.z.literal("rust").describe("Generates a Rust SDK."),
2025
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(rustGenerationConfigSchema.shape).optional().describe("Common and Rust-specific generation settings for this target."),
1981
2026
  ...targetOverrideShape
1982
2027
  }),
1983
2028
  zod.z.strictObject({
1984
- language: zod.z.literal("swift"),
1985
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(swiftGenerationConfigSchema.shape).optional(),
2029
+ language: zod.z.literal("swift").describe("Generates a Swift SDK."),
2030
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(swiftGenerationConfigSchema.shape).optional().describe("Common and Swift-specific generation settings for this target."),
1986
2031
  ...targetOverrideShape
1987
2032
  }),
1988
2033
  zod.z.strictObject({
1989
- language: zod.z.literal("cli"),
1990
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(cliGenerationConfigSchema.shape).optional(),
2034
+ language: zod.z.literal("cli").describe("Generates a command-line interface."),
2035
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(cliGenerationConfigSchema.shape).optional().describe("Common and CLI-specific generation settings for this target."),
1991
2036
  ...targetOverrideShape
1992
2037
  }),
1993
2038
  zod.z.strictObject({
1994
- language: zod.z.literal("mcp"),
1995
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(mcpGenerationConfigSchema.shape).optional(),
2039
+ language: zod.z.literal("mcp").describe("Generates an MCP server."),
2040
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(mcpGenerationConfigSchema.shape).optional().describe("Common and MCP-specific generation settings for this target."),
1996
2041
  ...targetOverrideShape
1997
2042
  }),
1998
2043
  zod.z.strictObject({
1999
- language: zod.z.literal("terraform"),
2000
- generation: sdkConfigV1GenerationConfigOverrideSchema.extend(terraformGenerationConfigSchema.shape).optional(),
2044
+ language: zod.z.literal("terraform").describe("Generates a Terraform provider."),
2045
+ generation: sdkConfigV1GenerationConfigOverrideSchema.extend(terraformGenerationConfigSchema.shape).optional().describe("Common and Terraform-specific generation settings for this target."),
2001
2046
  ...targetOverrideShape
2002
2047
  })
2003
2048
  ]);
@@ -2090,19 +2135,21 @@ function validateTargetPublishing(target, targetIndex, globalPackage, globalOutp
2090
2135
  );
2091
2136
  }
2092
2137
  var sdkConfigV1Schema = zod.z.strictObject({
2093
- schemaVersion: zod.z.literal(SDK_CONFIG_V1_SCHEMA_VERSION),
2094
- sdkName: nonEmptyStringSchema,
2095
- sdkVersion: nonEmptyStringSchema.default("1.0.0"),
2096
- apiVersion: nonEmptyStringSchema.optional(),
2097
- source: sdkConfigV1SourceConfigSchema,
2098
- api: sdkConfigV1ApiConfigSchema.prefault({}),
2099
- client: sdkConfigV1ClientConfigSchema.prefault({}),
2100
- package: sdkConfigV1PackageConfigSchema.prefault({}),
2101
- output: sdkConfigV1OutputConfigSchema.optional(),
2102
- replay: sdkConfigV1ReplayConfigSchema.optional(),
2103
- docs: sdkConfigV1DocsConfigSchema.prefault({}),
2104
- generation: sdkConfigV1GenerationConfigSchema.prefault({}),
2105
- targets: zod.z.array(sdkConfigV1TargetSchema).min(1)
2138
+ schemaVersion: zod.z.literal(SDK_CONFIG_V1_SCHEMA_VERSION).describe("The version of the customer-facing SDK Config schema."),
2139
+ sdkName: nonEmptyStringSchema.describe("The default name used for generated SDKs."),
2140
+ sdkVersion: nonEmptyStringSchema.default("1.0.0").describe("The default version assigned to generated SDKs."),
2141
+ apiVersion: nonEmptyStringSchema.optional().describe("The version of the API represented by the generated SDKs."),
2142
+ source: sdkConfigV1SourceConfigSchema.describe(
2143
+ "The API descriptions used to generate the SDKs."
2144
+ ),
2145
+ api: sdkConfigV1ApiConfigSchema.prefault({}).describe("Shared API behavior for every target."),
2146
+ client: sdkConfigV1ClientConfigSchema.prefault({}).describe("Shared generated-client behavior for every target."),
2147
+ package: sdkConfigV1PackageConfigSchema.prefault({}).describe("Package metadata inherited by every target."),
2148
+ output: sdkConfigV1OutputConfigSchema.optional().describe("The default output delivery and publication configuration."),
2149
+ replay: sdkConfigV1ReplayConfigSchema.optional().describe("Generation replay behavior shared by every target."),
2150
+ docs: sdkConfigV1DocsConfigSchema.prefault({}).describe("Documentation settings inherited by every target."),
2151
+ generation: sdkConfigV1GenerationConfigSchema.prefault({}).describe("Generation settings inherited by every target."),
2152
+ targets: zod.z.array(sdkConfigV1TargetSchema).min(1).describe("Language targets to generate; each language may appear once.")
2106
2153
  }).superRefine(({ output, package: globalPackage, targets }, context) => {
2107
2154
  const configuredLanguages = /* @__PURE__ */ new Set();
2108
2155
  targets.forEach((target, targetIndex) => {
@@ -2382,9 +2429,6 @@ function mapInvocation(generator, language, activeLanguages, index) {
2382
2429
  if (generator.keywords?.length) {
2383
2430
  generation.reservedKeywords = [...generator.keywords];
2384
2431
  }
2385
- if (generator.generateFullProject !== void 0) {
2386
- generation.generateFullProject = generator.generateFullProject;
2387
- }
2388
2432
  const settings = isObject(generator.settings) ? generator.settings : void 0;
2389
2433
  if (settings) {
2390
2434
  const inlinePathParameters = takeBoolean(settings, ["inlinePathParameters"], state, [
@@ -2415,6 +2459,7 @@ function unsupportedResolvedFields(generator, index) {
2415
2459
  "disableExamples",
2416
2460
  generator.disableExamples === false ? void 0 : generator.disableExamples
2417
2461
  ],
2462
+ ["generateFullProject", generator.generateFullProject],
2418
2463
  ["apiOverride", generator.apiOverride]
2419
2464
  ];
2420
2465
  return values.flatMap(([field, value]) => {
@@ -2444,6 +2489,11 @@ function resolvedFieldGuidance(field) {
2444
2489
  suggestedAction: "Preserve this orchestration setting outside SDK Config; public v1 has no idempotency-generation field."
2445
2490
  };
2446
2491
  }
2492
+ if (field === "generateFullProject") {
2493
+ return {
2494
+ suggestedAction: "Preserve this packaging setting on the generation request; it is not customer-authored SDK configuration."
2495
+ };
2496
+ }
2447
2497
  return {
2448
2498
  suggestedAction: "Review this Fern setting and preserve it outside SDK Config, or set an equivalent SDK Config field manually if one is introduced."
2449
2499
  };
@@ -2490,15 +2540,23 @@ function mapCommonConfig(language, config, state, client, generation, packageCon
2490
2540
  };
2491
2541
  }
2492
2542
  const pythonClient = language === "python" ? takeObject(config, ["client"], state, basePath) : void 0;
2543
+ const typescriptNaming = language === "typescript" || language === "mcp" ? takeObject(config, ["naming"], state, basePath) : void 0;
2493
2544
  const directClientName = takeString(config, ["clientName", "clientClassName"], state, basePath);
2494
- const nestedClientName = pythonClient ? takeString(pythonClient.value, ["className"], state, pythonClient.path) : void 0;
2545
+ const nestedClientName = pythonClient ? takeString(pythonClient.value, ["className"], state, pythonClient.path) : typescriptNaming ? takeString(typescriptNaming.value, ["client"], state, typescriptNaming.path) : void 0;
2495
2546
  const directExportedClientName = takeString(
2496
2547
  config,
2497
2548
  ["exportedClientName", "exportedClientClassName"],
2498
2549
  state,
2499
2550
  basePath
2500
2551
  );
2501
- const nestedExportedClientName = pythonClient ? takeString(pythonClient.value, ["exportedClassName"], state, pythonClient.path) : void 0;
2552
+ const nestedExportedClientName = pythonClient ? takeString(pythonClient.value, ["exportedClassName"], state, pythonClient.path) : typescriptNaming ? (
2553
+ // TypeScript's `naming.namespace` is the base every other naming.* field defaults from
2554
+ // (Fern's docs: `client` defaults to `${PascalCase(namespace)}Client`, same for
2555
+ // `environment`/`error`/etc.) — the same role `exportedClientName` already plays for every
2556
+ // other language's `clientPrefix` derivation.
2557
+ takeString(typescriptNaming.value, ["namespace"], state, typescriptNaming.path)
2558
+ ) : void 0;
2559
+ const nestedEnvironmentTypeName = typescriptNaming ? takeString(typescriptNaming.value, ["environment"], state, typescriptNaming.path) : void 0;
2502
2560
  const naming = compact({
2503
2561
  pagerName: takeString(
2504
2562
  config,
@@ -2508,12 +2566,7 @@ function mapCommonConfig(language, config, state, client, generation, packageCon
2508
2566
  ),
2509
2567
  clientName: directClientName ?? nestedClientName,
2510
2568
  exportedClientName: directExportedClientName ?? nestedExportedClientName,
2511
- environmentTypeName: takeString(
2512
- config,
2513
- ["environmentClassName", "environmentEnumName"],
2514
- state,
2515
- basePath
2516
- ),
2569
+ environmentTypeName: takeString(config, ["environmentClassName", "environmentEnumName"], state, basePath) ?? nestedEnvironmentTypeName,
2517
2570
  apiErrorName: takeString(config, ["baseApiExceptionClassName"], state, basePath),
2518
2571
  baseErrorName: takeString(config, ["baseExceptionClassName"], state, basePath)
2519
2572
  });
@@ -2527,8 +2580,10 @@ function mapCommonConfig(language, config, state, client, generation, packageCon
2527
2580
  basePath
2528
2581
  );
2529
2582
  if (webSockets !== void 0) generation.webSockets = webSockets;
2530
- const generateFullProject = takeBoolean(config, ["generateFullProject"], state, basePath);
2531
- if (generateFullProject !== void 0) generation.generateFullProject = generateFullProject;
2583
+ if (language === "typescript") {
2584
+ const streams = mapTypescriptStreams(config, state, basePath);
2585
+ if (streams) generation.streams = streams;
2586
+ }
2532
2587
  const inlineTypes = takeBoolean(config, ["enableInlineTypes"], state, basePath);
2533
2588
  const omitUndefined = takeBoolean(config, ["omitUndefined"], state, basePath);
2534
2589
  const forwardEnums = takeBoolean(config, ["enableForwardCompatibleEnums"], state, basePath);
@@ -2544,6 +2599,18 @@ function mapCommonConfig(language, config, state, client, generation, packageCon
2544
2599
  if (packagePath !== void 0) generation.layout = { packagePath };
2545
2600
  mapDependencies(config, state, packageConfig, basePath);
2546
2601
  }
2602
+ function mapTypescriptStreams(config, state, basePath) {
2603
+ const responseType = takeEnum(config, ["streamType"], ["wrapper", "web"], state, basePath);
2604
+ const fileResponseType = takeEnum(
2605
+ config,
2606
+ ["fileResponseType"],
2607
+ ["stream", "binary-response"],
2608
+ state,
2609
+ basePath
2610
+ );
2611
+ if (responseType === void 0 && fileResponseType === void 0) return void 0;
2612
+ return { enabled: true, ...compact({ responseType, fileResponseType }) };
2613
+ }
2547
2614
  function mapLanguageConfig(language, config, state, packageConfig, basePath) {
2548
2615
  switch (language) {
2549
2616
  case "typescript":
@@ -2577,29 +2644,39 @@ function mapLanguageConfig(language, config, state, packageConfig, basePath) {
2577
2644
  }
2578
2645
  }
2579
2646
  function mapTypescript(config, state, packageConfig, basePath) {
2580
- mapPackageManifest(config, ["packageJson"], state, packageConfig, basePath);
2647
+ const packageJsonManifest = mapPackageManifest(
2648
+ config,
2649
+ ["packageJson"],
2650
+ state,
2651
+ packageConfig,
2652
+ basePath
2653
+ );
2654
+ const packageJsonPackageManager = packageJsonManifest ? takeString(packageJsonManifest.value, ["packageManager"], state, packageJsonManifest.path) : void 0;
2655
+ const packageManagerAtIndex = packageJsonPackageManager ? packageJsonPackageManager.indexOf("@", packageJsonPackageManager.startsWith("@") ? 1 : 0) : -1;
2656
+ const packageManagerVersionPart = packageManagerAtIndex >= 0 ? packageJsonPackageManager?.slice(packageManagerAtIndex + 1).split("+")[0] : void 0;
2657
+ const packageManagerVersion = packageManagerVersionPart || void 0;
2581
2658
  const serdeLayer = takeBoolean(config, ["serdeLayer"], state, basePath);
2582
2659
  const noSerdeLayer = takeBoolean(config, ["noSerdeLayer"], state, basePath);
2583
2660
  const fetchSupport = takeEnum(config, ["fetchSupport"], ["native"], state, basePath);
2661
+ const namingObject = takeObject(config, ["naming"], state, basePath);
2662
+ const nestedNamespace = namingObject ? takeString(namingObject.value, ["namespace"], state, namingObject.path) : void 0;
2584
2663
  return compact({
2585
2664
  typescriptVersion: takeString(config, ["typescriptVersion"], state, basePath),
2586
2665
  zodVersion: takeString(config, ["zodVersion"], state, basePath),
2587
2666
  packageManager: takeEnum(config, ["packageManager"], ["pnpm", "yarn"], state, basePath),
2667
+ packageManagerVersion,
2588
2668
  testFramework: takeEnum(config, ["testFramework"], ["jest", "vitest"], state, basePath),
2589
2669
  httpClient: fetchSupport === "native" ? { name: "fetch" } : void 0,
2590
2670
  bundle: takeBoolean(config, ["bundle"], state, basePath),
2591
2671
  exportClassDefault: takeBoolean(config, ["exportClassDefault"], state, basePath),
2592
- namespaceExportName: takeString(
2593
- config,
2594
- ["namespaceExportName", "namespaceExport"],
2595
- state,
2596
- basePath
2597
- ),
2672
+ namespaceExportName: takeString(config, ["namespaceExportName", "namespaceExport"], state, basePath) ?? nestedNamespace,
2673
+ consolidateTypeFiles: takeBoolean(config, ["consolidateTypeFiles"], state, basePath),
2598
2674
  allowCustomFetcher: takeBoolean(config, ["allowCustomFetcher"], state, basePath),
2599
2675
  useBrandedStringAliases: takeBoolean(config, ["useBrandedStringAliases"], state, basePath),
2600
2676
  useLegacyExports: takeBoolean(config, ["useLegacyExports"], state, basePath),
2601
2677
  useBigInt: takeBoolean(config, ["useBigInt"], state, basePath),
2602
- serdeLayer: serdeLayer ?? (noSerdeLayer === void 0 ? void 0 : !noSerdeLayer)
2678
+ serdeLayer: serdeLayer ?? (noSerdeLayer === void 0 ? void 0 : !noSerdeLayer),
2679
+ esmOnly: takeBoolean(config, ["esmOnly"], state, basePath)
2603
2680
  });
2604
2681
  }
2605
2682
  function mapPython(config, state, packageConfig, basePath) {
@@ -2710,7 +2787,8 @@ function mapCsharp(config, state, packageConfig, basePath) {
2710
2787
  });
2711
2788
  }
2712
2789
  function mapPhp(config, state, packageConfig, basePath) {
2713
- mapPackageManifest(config, ["composerJson"], state, packageConfig, basePath);
2790
+ const manifest = mapPackageManifest(config, ["composerJson"], state, packageConfig, basePath);
2791
+ if (manifest) mapComposerRequirements(manifest, state, packageConfig);
2714
2792
  const packageName = takeString(config, ["packageName"], state, basePath);
2715
2793
  if (packageName !== void 0) packageConfig.packageName = packageName;
2716
2794
  return compact({
@@ -2718,6 +2796,20 @@ function mapPhp(config, state, packageConfig, basePath) {
2718
2796
  generateClientInterfaces: takeBoolean(config, ["generateClientInterfaces"], state, basePath)
2719
2797
  });
2720
2798
  }
2799
+ function mapComposerRequirements(manifest, state, packageConfig) {
2800
+ const fields = [
2801
+ ["require", "extraDependencies"],
2802
+ ["require-dev", "extraDevDependencies"]
2803
+ ];
2804
+ for (const [composerField, packageField] of fields) {
2805
+ const located = takeObject(manifest.value, [composerField], state, manifest.path);
2806
+ if (!located) continue;
2807
+ const dependencies = Object.entries(located.value).flatMap(
2808
+ ([name, dependency]) => mapDependency(name, dependency, state, [...located.path, name])
2809
+ );
2810
+ if (dependencies.length) packageConfig[packageField] = dependencies;
2811
+ }
2812
+ }
2721
2813
  function mapRuby(config, state, packageConfig, basePath) {
2722
2814
  const moduleName = takeString(config, ["moduleName"], state, basePath);
2723
2815
  if (moduleName !== void 0) packageConfig.moduleName = moduleName;
@@ -2887,28 +2979,52 @@ function takeCustomSections(value, language, activeLanguages, state, basePath) {
2887
2979
  }
2888
2980
  function mapPackageManifest(config, aliases, state, packageConfig, basePath) {
2889
2981
  const manifest = takeObject(config, aliases, state, basePath);
2890
- if (!manifest) return;
2982
+ if (!manifest) return void 0;
2891
2983
  const packageName = takeString(manifest.value, ["name"], state, manifest.path);
2892
2984
  const description = takeString(manifest.value, ["description"], state, manifest.path);
2985
+ const keywords = takeStringArray(manifest.value, ["keywords"], state, manifest.path);
2893
2986
  const license = takeString(manifest.value, ["license"], state, manifest.path);
2894
2987
  const author = takeObject(manifest.value, ["author"], state, manifest.path);
2895
2988
  const authorName = author ? takeString(author.value, ["name"], state, author.path) : void 0;
2896
- const authors = authorName && author ? [
2897
- compact({
2898
- name: authorName,
2899
- email: takeString(author.value, ["email"], state, author.path),
2900
- url: takeString(author.value, ["url"], state, author.path)
2901
- })
2902
- ] : void 0;
2989
+ const authors = [
2990
+ ...authorName && author ? [
2991
+ compact({
2992
+ name: authorName,
2993
+ email: takeString(author.value, ["email"], state, author.path),
2994
+ url: takeString(author.value, ["url"], state, author.path)
2995
+ })
2996
+ ] : [],
2997
+ ...takeManifestAuthors(manifest, state)
2998
+ ];
2903
2999
  Object.assign(
2904
3000
  packageConfig,
2905
3001
  compact({
2906
3002
  packageName,
2907
3003
  description,
2908
- authors,
3004
+ homepage: takeString(manifest.value, ["homepage"], state, manifest.path),
3005
+ keywords,
3006
+ authors: authors.length ? authors : void 0,
2909
3007
  license: license ? { type: license } : void 0
2910
3008
  })
2911
3009
  );
3010
+ return manifest;
3011
+ }
3012
+ function takeManifestAuthors(manifest, state) {
3013
+ const located = locate(manifest.value, ["authors"], manifest.path);
3014
+ if (!located || !Array.isArray(located.value)) return [];
3015
+ return located.value.flatMap((entry, index) => {
3016
+ if (!isObject(entry)) return [];
3017
+ const path = [...located.path, index];
3018
+ const name = takeString(entry, ["name"], state, path);
3019
+ if (!name) return [];
3020
+ return [
3021
+ compact({
3022
+ name,
3023
+ email: takeString(entry, ["email"], state, path),
3024
+ url: takeString(entry, ["url"], state, path)
3025
+ })
3026
+ ];
3027
+ });
2912
3028
  }
2913
3029
  function takePythonAdditionalInitExports(config, state, basePath) {
2914
3030
  const located = locate(config, ["additionalInitExports"], basePath);