{"version":3,"sources":["../src/lib/blueprint.ts","../src/lib/openapi/find-common-openapi-schema-properties.ts","../src/lib/openapi/flatten-openapi-schema.ts","../src/lib/openapi/schemas.ts","../src/lib/samples/code-sample.ts","../src/lib/json.ts","../src/lib/samples/csharp.ts","../src/lib/samples/json.ts","../src/lib/samples/curl.ts","../src/lib/samples/format.ts","../src/lib/samples/go.ts","../src/lib/samples/java.ts","../src/lib/samples/javascript.ts","../src/lib/samples/php.ts","../src/lib/samples/python.ts","../src/lib/samples/ruby.ts","../src/lib/samples/seam-cli.ts","../src/lib/samples/syntax.ts","../src/lib/samples/resource-sample.ts","../src/lib/seam.ts"],"names":["z","pascalCase","isPrimitiveValue","getPrimitiveTypeName","camelCase","isPathNested","snakeCase","ResourceSchema","path","operation","request","schemas"],"mappings":"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","sourcesContent":["import { z } from 'zod'\n\nimport { findCommonOpenapiSchemaProperties } from './openapi/find-common-openapi-schema-properties.js'\nimport { flattenOpenapiSchema } from './openapi/flatten-openapi-schema.js'\nimport {\n  EventResourceSchema,\n  OpenapiOperationSchema,\n  PropertySchema,\n  ResourceSchema,\n} from './openapi/schemas.js'\nimport type {\n  Openapi,\n  OpenapiAuthMethod,\n  OpenapiOperation,\n  OpenapiPathItem,\n  OpenapiPaths,\n  OpenapiSchema,\n} from './openapi/types.js'\nimport {\n  type CodeSample,\n  type CodeSampleDefinition,\n  CodeSampleDefinitionSchema,\n  createCodeSample,\n  createResourceSample,\n  type ResourceSample,\n  type ResourceSampleDefinition,\n  ResourceSampleDefinitionSchema,\n  type SyntaxName,\n} from './samples/index.js'\nimport {\n  mapOpenapiToSeamAuthMethod,\n  type SeamAuthMethod,\n  type SeamWorkspaceScope,\n} from './seam.js'\n\nconst paginationResponseKey = 'pagination'\n\nexport interface Blueprint {\n  title: string\n  routes: Route[]\n  namespaces: Namespace[]\n  resources: Resource[]\n  pagination: Pagination | null\n  events: EventResource[]\n  actionAttempts: ActionAttempt[]\n}\n\nexport interface Route {\n  path: string\n  name: string\n  namespacePath: string | null\n  endpoints: Endpoint[]\n  parentPath: string | null\n  isUndocumented: boolean\n  isDeprecated: boolean\n  isDraft: boolean\n}\n\nexport interface Resource {\n  resourceType: string\n  properties: Property[]\n  description: string\n  routePath: string\n  isDeprecated: boolean\n  deprecationMessage: string\n  isUndocumented: boolean\n  undocumentedMessage: string\n  isDraft: boolean\n  draftMessage: string\n  propertyGroups: PropertyGroup[]\n  resourceSamples: ResourceSample[]\n}\n\nexport interface PropertyGroup {\n  name: string\n  propertyGroupKey: string\n}\n\nexport interface VariantGroup {\n  name: string\n  variantGroupKey: string\n}\n\nexport interface Pagination {\n  properties: Property[]\n  description: string\n  responseKey: string\n}\n\ninterface EventResource extends Resource {\n  resourceType: 'event'\n  eventType: string\n}\n\nexport interface ActionAttempt extends Resource {\n  resourceType: 'action_attempt'\n  actionAttemptType: string\n}\n\nexport interface Namespace {\n  name: string\n  path: string\n  parentPath: string | null\n  isDeprecated: boolean\n  isUndocumented: boolean\n  isDraft: boolean\n}\n\nexport interface Endpoint {\n  title: string\n  path: string\n  name: string\n  parentPath: string | null\n  description: string\n  isDeprecated: boolean\n  deprecationMessage: string\n  isUndocumented: boolean\n  undocumentedMessage: string\n  isDraft: boolean\n  draftMessage: string\n  request: Request\n  response: Response\n  hasPagination: boolean\n  codeSamples: CodeSample[]\n  authMethods: SeamAuthMethod[]\n  workspaceScope: SeamWorkspaceScope\n}\n\ninterface BaseParameter {\n  name: string\n  description: string\n  isRequired: boolean\n  isDeprecated: boolean\n  deprecationMessage: string\n  isUndocumented: boolean\n  undocumentedMessage: string\n  isDraft: boolean\n  draftMessage: string\n  hasDefault: boolean\n}\n\ninterface StringParameter extends BaseParameter {\n  format: 'string'\n  jsonType: 'string'\n  default?: string | null\n}\n\ninterface NumberParameter extends BaseParameter {\n  format: 'number'\n  jsonType: 'number'\n  default?: number | null\n}\n\ninterface EnumParameter extends BaseParameter {\n  format: 'enum'\n  jsonType: 'string'\n  values: EnumValue[]\n  default?: string | null\n}\n\ninterface RecordParameter extends BaseParameter {\n  format: 'record'\n  jsonType: 'object'\n}\n\ninterface BaseListParameter extends BaseParameter {\n  format: 'list'\n  jsonType: 'array'\n}\n\ntype ListParameter =\n  | StringListParameter\n  | NumberListParameter\n  | BooleanListParameter\n  | DatetimeListParameter\n  | IdListParameter\n  | EnumListParameter\n  | ObjectListParameter\n  | RecordListParameter\n  | DiscriminatedListParameter\n\ninterface StringListParameter extends BaseListParameter {\n  itemFormat: 'string'\n  default?: string[]\n}\n\ninterface NumberListParameter extends BaseListParameter {\n  itemFormat: 'number'\n  default?: number[]\n}\n\ninterface BooleanListParameter extends BaseListParameter {\n  itemFormat: 'boolean'\n  default?: boolean[]\n}\n\ninterface DatetimeListParameter extends BaseListParameter {\n  itemFormat: 'datetime'\n  default?: string[]\n}\n\ninterface IdListParameter extends BaseListParameter {\n  itemFormat: 'id'\n  default?: string[]\n}\n\ninterface EnumListParameter extends BaseListParameter {\n  itemFormat: 'enum'\n  itemEnumValues: EnumValue[]\n  default?: EnumValue[]\n}\n\ninterface ObjectListParameter extends BaseListParameter {\n  itemFormat: 'object'\n  itemParameters: Parameter[]\n}\n\ninterface RecordListParameter extends BaseListParameter {\n  itemFormat: 'record'\n}\n\ninterface DiscriminatedListParameter extends BaseListParameter {\n  itemFormat: 'discriminated_object'\n  discriminator: string\n  variants: Array<{\n    parameters: Parameter[]\n    description: BaseParameter['description']\n  }>\n}\n\ninterface BooleanParameter extends BaseParameter {\n  format: 'boolean'\n  jsonType: 'boolean'\n  default?: boolean | null\n}\n\ninterface ObjectParameter extends BaseParameter {\n  format: 'object'\n  jsonType: 'object'\n  parameters: Parameter[]\n}\n\ninterface DatetimeParameter extends BaseParameter {\n  format: 'datetime'\n  jsonType: 'string'\n  default?: string | null\n}\n\ninterface IdParameter extends BaseParameter {\n  format: 'id'\n  jsonType: 'string'\n  default?: string | null\n}\n\nexport type Parameter =\n  | StringParameter\n  | NumberParameter\n  | EnumParameter\n  | RecordParameter\n  | ListParameter\n  | BooleanParameter\n  | ObjectParameter\n  | DatetimeParameter\n  | IdParameter\n\nexport interface Request {\n  methods: Method[]\n  semanticMethod: Method\n  preferredMethod: Method\n  parameters: Parameter[]\n}\n\nexport type Response = VoidResponse | ResourceResponse | ResourceListResponse\n\ninterface BaseResponse {\n  description: string\n}\n\ninterface VoidResponse extends BaseResponse {\n  responseType: 'void'\n}\n\ninterface ResourceResponse extends BaseResponse {\n  responseType: 'resource'\n  responseKey: string\n  resourceType: string\n  actionAttemptType: string | null\n}\n\ninterface ResourceListResponse extends BaseResponse {\n  responseType: 'resource_list'\n  responseKey: string\n  resourceType: string\n}\n\ninterface BaseProperty {\n  name: string\n  description: string\n  isDeprecated: boolean\n  deprecationMessage: string\n  isUndocumented: boolean\n  undocumentedMessage: string\n  isDraft: boolean\n  draftMessage: string\n  propertyGroupKey: string | null\n}\n\nexport type Property =\n  | StringProperty\n  | NumberProperty\n  | EnumProperty\n  | RecordProperty\n  | ListProperty\n  | ObjectProperty\n  | BooleanProperty\n  | DatetimeProperty\n  | IdProperty\n\ninterface StringProperty extends BaseProperty {\n  format: 'string'\n  jsonType: 'string'\n}\n\ninterface NumberProperty extends BaseProperty {\n  format: 'number'\n  jsonType: 'number'\n}\n\nexport interface EnumProperty extends BaseProperty {\n  format: 'enum'\n  jsonType: 'string'\n  values: EnumValue[]\n}\n\ntype EnumValue = BaseProperty\n\ninterface RecordProperty extends BaseProperty {\n  format: 'record'\n  jsonType: 'object'\n}\n\ninterface BaseListProperty extends BaseProperty {\n  format: 'list'\n  jsonType: 'array'\n}\n\ninterface StringListProperty extends BaseListProperty {\n  itemFormat: 'string'\n}\n\ninterface NumberListProperty extends BaseListProperty {\n  itemFormat: 'number'\n}\n\ninterface BooleanListProperty extends BaseListProperty {\n  itemFormat: 'boolean'\n}\n\ninterface DatetimeListProperty extends BaseListProperty {\n  itemFormat: 'datetime'\n}\n\ninterface IdListProperty extends BaseListProperty {\n  itemFormat: 'id'\n}\n\ninterface EnumListProperty extends BaseListProperty {\n  itemFormat: 'enum'\n  itemEnumValues: EnumValue[]\n}\n\ninterface ObjectListProperty extends BaseListProperty {\n  itemFormat: 'object'\n  itemProperties: Property[]\n}\n\ninterface RecordListProperty extends BaseListProperty {\n  itemFormat: 'record'\n}\n\nexport interface DiscriminatedListProperty extends BaseListProperty {\n  itemFormat: 'discriminated_object'\n  discriminator: string\n  variantGroups: VariantGroup[]\n  variants: Array<{\n    variantGroupKey: string | null\n    properties: Property[]\n    description: BaseProperty['description']\n  }>\n}\n\ntype ListProperty =\n  | StringListProperty\n  | NumberListProperty\n  | BooleanListProperty\n  | DatetimeListProperty\n  | IdListProperty\n  | EnumListProperty\n  | ObjectListProperty\n  | RecordListProperty\n  | DiscriminatedListProperty\n\ninterface BooleanProperty extends BaseProperty {\n  format: 'boolean'\n  jsonType: 'boolean'\n}\n\ninterface ObjectProperty extends BaseProperty {\n  format: 'object'\n  jsonType: 'object'\n  properties: Property[]\n  propertyGroups: PropertyGroup[]\n}\n\ninterface DatetimeProperty extends BaseProperty {\n  format: 'datetime'\n  jsonType: 'string'\n}\n\ninterface IdProperty extends BaseProperty {\n  format: 'id'\n  jsonType: 'string'\n}\n\nexport type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\n\ninterface Context extends Required<BlueprintOptions> {\n  codeSampleDefinitions: CodeSampleDefinition[]\n  resourceSampleDefinitions: ResourceSampleDefinition[]\n  validActionAttemptTypes: string[]\n  schemas: Record<string, unknown>\n}\n\nexport const TypesModuleSchema = z.object({\n  codeSampleDefinitions: z.array(CodeSampleDefinitionSchema).default([]),\n  resourceSampleDefinitions: z\n    .array(ResourceSampleDefinitionSchema)\n    .default([]),\n  // TODO: Import and use openapi zod schema here\n  openapi: z.any(),\n  schemas: z.record(z.string(), z.unknown()).optional().default({}),\n})\n\nexport type TypesModuleInput = z.input<typeof TypesModuleSchema>\n\nexport type TypesModule = z.output<typeof TypesModuleSchema>\n\nexport interface BlueprintOptions {\n  formatCode?: (content: string, syntax: SyntaxName) => Promise<string>\n}\n\nexport const createBlueprint = async (\n  typesModule: TypesModuleInput,\n  { formatCode = async (content) => content }: BlueprintOptions = {},\n): Promise<Blueprint> => {\n  const { schemas, codeSampleDefinitions, resourceSampleDefinitions } =\n    TypesModuleSchema.parse(typesModule)\n\n  // TODO: Move openapi to TypesModuleSchema\n  const openapi = typesModule.openapi as Openapi\n\n  const validActionAttemptTypes = extractValidActionAttemptTypes(\n    openapi.components.schemas,\n  )\n\n  const context: Context = {\n    codeSampleDefinitions,\n    resourceSampleDefinitions,\n    formatCode,\n    schemas,\n    validActionAttemptTypes,\n  }\n\n  const routes = await createRoutes(openapi.paths, context)\n  const namespaces = createNamespaces(routes)\n\n  const pagination = openapi.components.schemas[paginationResponseKey]\n  const openapiSchemas = Object.fromEntries(\n    Object.entries(openapi.components.schemas).filter(\n      ([k]) => k !== paginationResponseKey,\n    ),\n  )\n\n  const resources = await createResources(openapiSchemas, routes, context)\n  const actionAttempts = await createActionAttempts(\n    openapi.components.schemas,\n    routes,\n    context,\n  )\n\n  return {\n    title: openapi.info.title,\n    routes,\n    namespaces,\n    resources,\n    pagination: createPagination(pagination),\n    events: await createEvents(openapiSchemas, routes, context),\n    actionAttempts,\n  }\n}\n\nconst extractValidActionAttemptTypes = (\n  schemas: Openapi['components']['schemas'],\n): string[] => {\n  const actionAttemptSchema = schemas['action_attempt']\n  if (\n    actionAttemptSchema == null ||\n    typeof actionAttemptSchema !== 'object' ||\n    !('oneOf' in actionAttemptSchema) ||\n    !Array.isArray(actionAttemptSchema.oneOf)\n  ) {\n    return []\n  }\n\n  const processedActionAttemptTypes = new Set<string>()\n  actionAttemptSchema.oneOf.forEach((schema) => {\n    const actionType = schema.properties?.['action_type']?.enum?.[0]\n    if (typeof actionType === 'string') {\n      processedActionAttemptTypes.add(actionType)\n    }\n  })\n\n  return Array.from(processedActionAttemptTypes)\n}\n\nconst createRoutes = async (\n  paths: OpenapiPaths,\n  context: Context,\n): Promise<Route[]> => {\n  const routeMap = new Map<string, Route>()\n  const pathEntries = Object.entries(paths)\n\n  for (const [path, pathItem] of pathEntries) {\n    const namespacePath = getNamespacePath(path, paths)\n\n    const route = await createRoute(namespacePath, path, pathItem, context)\n\n    const existingRoute = routeMap.get(route.path)\n    if (existingRoute != null) {\n      existingRoute.endpoints.push(...route.endpoints)\n      continue\n    }\n\n    routeMap.set(route.path, route)\n  }\n\n  const routes = Array.from(routeMap.values())\n\n  return routes\n    .map(addIsDeprecatedToRoute)\n    .map(addIsUndocumentedToRoute)\n    .map(addIsDraftToRoute)\n}\n\nconst getNamespacePath = (path: string, paths: OpenapiPaths): string | null => {\n  // Hold namespace in array to allow nested namespaces\n  // e.g. namespace for `/foo/bar/baz/get` = `/foo/bar`\n  const namespace: string[] = []\n\n  const pathParts = path.split('/').filter((path) => Boolean(path))\n\n  const pathKeys = Object.keys(paths)\n\n  for (const [index, part] of pathParts.entries()) {\n    // Namespaces must be consecutive. If there was a path with an endpoint\n    // previously, then this part is not in the namespace.\n    if (namespace.length !== index) {\n      continue\n    }\n\n    // An endpoint is a route that ends without further paths. i.e., ends in\n    // a letter (not slash).\n    const endpoints = pathKeys.filter((key) => {\n      return new RegExp(`^/${[...namespace, part].join('/')}/\\\\w+$`).test(key)\n    })\n\n    if (endpoints.length === 0) {\n      namespace.push(part)\n    }\n  }\n\n  if (namespace.length === 0) {\n    return null\n  }\n\n  return `/${namespace.join('/')}`\n}\n\nconst createRoute = async (\n  namespacePath: string | null,\n  path: string,\n  pathItem: OpenapiPathItem,\n  context: Context,\n): Promise<Route> => {\n  const pathParts = path.split('/')\n  const routePath = `/${pathParts.slice(1, -1).join('/')}`\n  const name = pathParts.at(-2)\n  if (name == null) {\n    throw new Error(`Could not resolve name for route at ${path}`)\n  }\n\n  const endpoint = await createEndpoint(path, pathItem, context)\n\n  return {\n    path: routePath,\n    name,\n    namespacePath,\n    endpoints: endpoint != null ? [endpoint] : [],\n    parentPath: getParentPath(routePath),\n    isUndocumented: false,\n    isDeprecated: false,\n    isDraft: false,\n  }\n}\n\nconst addIsDeprecatedToRoute = (route: Route): Route => ({\n  ...route,\n  isDeprecated: route.endpoints.every((endpoint) => endpoint.isDeprecated),\n})\n\nconst addIsUndocumentedToRoute = (route: Route): Route => ({\n  ...route,\n  isUndocumented: route.endpoints.every((endpoint) => endpoint.isUndocumented),\n})\n\nconst addIsDraftToRoute = (route: Route): Route => ({\n  ...route,\n  isDraft: route.endpoints.every((endpoint) => endpoint.isDraft),\n})\n\nconst createNamespaces = (routes: Route[]): Namespace[] => {\n  const namespacePaths = [\n    ...new Set(\n      routes.flatMap((r) => (r.namespacePath == null ? [] : [r.namespacePath])),\n    ),\n  ]\n\n  return namespacePaths.map((path) => {\n    const namespaceRoutes = routes.filter((r) => r.namespacePath === path)\n\n    const pathParts = path.split('/')\n    const name = pathParts.at(-1)\n    if (name == null) {\n      throw new Error(`Could not resolve name for route at ${path}`)\n    }\n\n    const isDeprecated = namespaceRoutes.every((r) => r.isDeprecated)\n    const isUndocumented = namespaceRoutes.every((r) => r.isUndocumented)\n    const isDraft = namespaceRoutes.every((r) => r.isDraft)\n\n    return {\n      name,\n      path,\n      parentPath: getParentPath(path),\n      isDeprecated,\n      isUndocumented,\n      isDraft,\n    }\n  })\n}\n\nconst createEndpoint = async (\n  path: string,\n  pathItem: OpenapiPathItem,\n  context: Context,\n): Promise<Endpoint | null> => {\n  const validMethods: Method[] = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH']\n  const validOperations = Object.entries(pathItem).filter(\n    ([method, operation]) =>\n      validMethods.includes(method.toUpperCase() as Method) &&\n      typeof operation === 'object' &&\n      operation !== null,\n  )\n  const supportedMethods = validOperations.map(\n    ([method]) => method.toUpperCase() as Method,\n  )\n\n  const validOperation = validOperations.find(([m]) => m === 'post')\n  if (validOperation == null) {\n    // eslint-disable-next-line no-console\n    console.warn(`No valid post operation found for ${path}`)\n\n    return null\n  }\n\n  const [_, operation] = validOperation\n\n  return await createEndpointFromOperation(\n    supportedMethods,\n    operation as OpenapiOperation,\n    path,\n    context,\n  )\n}\n\nconst createEndpointFromOperation = async (\n  methods: Method[],\n  operation: OpenapiOperation,\n  path: string,\n  context: Context,\n): Promise<Endpoint> => {\n  const pathParts = path.split('/')\n  const endpointPath = `/${pathParts.slice(1).join('/')}`\n\n  const name = pathParts.at(-1)\n  if (name == null) {\n    throw new Error(`Could not resolve name for endpoint at ${path}`)\n  }\n\n  const parsedOperation = OpenapiOperationSchema.parse(operation, {\n    path: pathParts,\n  })\n\n  const title = parsedOperation['x-title']\n\n  const description = normalizeDescription(parsedOperation.description)\n\n  const isUndocumented = parsedOperation['x-undocumented'].length > 0\n  const undocumentedMessage = parsedOperation['x-undocumented']\n\n  const isDeprecated = parsedOperation.deprecated\n  const deprecationMessage = parsedOperation['x-deprecated']\n\n  const isDraft = parsedOperation['x-draft'].length > 0\n  const draftMessage = parsedOperation['x-draft']\n\n  const request = createRequest(methods, operation, path)\n  const { hasPagination, ...response } = createResponse(\n    operation,\n    path,\n    context,\n  )\n\n  const operationAuthMethods = parsedOperation.security.map(\n    (securitySchema) => {\n      const [authMethod = ''] = Object.keys(securitySchema)\n      return authMethod as OpenapiAuthMethod\n    },\n  )\n  const endpointAuthMethods = operationAuthMethods\n    .map(mapOpenapiToSeamAuthMethod)\n    .filter((authMethod): authMethod is SeamAuthMethod => authMethod != null)\n\n  const workspaceScope = getWorkspaceScope(operationAuthMethods)\n\n  const endpoint: Omit<Endpoint, 'codeSamples'> = {\n    title,\n    name,\n    path: endpointPath,\n    parentPath: getParentPath(endpointPath),\n    description,\n    isDeprecated,\n    deprecationMessage,\n    isUndocumented,\n    undocumentedMessage,\n    isDraft,\n    draftMessage,\n    response,\n    request,\n    hasPagination,\n    authMethods: endpointAuthMethods,\n    workspaceScope,\n  }\n\n  return {\n    ...endpoint,\n    codeSamples: await Promise.all(\n      context.codeSampleDefinitions\n        .filter(({ request }) => request.path === endpointPath)\n        .map(\n          async (codeSampleDefinition) =>\n            await createCodeSample(codeSampleDefinition, {\n              endpoint,\n              formatCode: context.formatCode,\n            }),\n        ),\n    ),\n  }\n}\n\nexport const getWorkspaceScope = (\n  authMethods: OpenapiAuthMethod[],\n): SeamWorkspaceScope => {\n  const hasWorkspaceUnscoped = authMethods.some((method) =>\n    method.endsWith('_without_workspace'),\n  )\n\n  const workspaceScopedAuthMethods: OpenapiAuthMethod[] = [\n    'api_key',\n    'client_session',\n    'console_session_token_with_workspace',\n    'pat_with_workspace',\n    'publishable_key',\n  ]\n  const hasWorkspaceScoped = authMethods.some((method) =>\n    workspaceScopedAuthMethods.includes(method),\n  )\n\n  const hasNoAuthMethods = !hasWorkspaceUnscoped && !hasWorkspaceScoped\n  if (hasNoAuthMethods) return 'none'\n\n  const hasOnlyUnscopedAuth = hasWorkspaceUnscoped && !hasWorkspaceScoped\n  if (hasOnlyUnscopedAuth) return 'none'\n\n  const hasBothScopedAndUnscoped = hasWorkspaceUnscoped && hasWorkspaceScoped\n  if (hasBothScopedAndUnscoped) return 'optional'\n\n  const hasOnlyScopedAuth = !hasWorkspaceUnscoped && hasWorkspaceScoped\n  if (hasOnlyScopedAuth) return 'required'\n\n  return 'none'\n}\n\nconst createRequest = (\n  methods: Method[],\n  operation: OpenapiOperation,\n  path: string,\n): Request => {\n  if (methods.length === 0) {\n    // eslint-disable-next-line no-console\n    console.warn('At least one HTTP method should be specified')\n  }\n\n  if (methods.length > 2) {\n    // eslint-disable-next-line no-console\n    console.warn('More than two methods detected. Was this intended?')\n  }\n\n  if (!methods.includes('POST')) {\n    // eslint-disable-next-line no-console\n    console.warn(`POST method is missing for ${path}`)\n  }\n\n  const semanticMethod = getSemanticMethod(methods)\n  const preferredMethod = getPreferredMethod(methods, semanticMethod, operation)\n\n  return {\n    methods,\n    semanticMethod,\n    preferredMethod,\n    parameters: createRequestBody(operation, path),\n  }\n}\n\nconst createRequestBody = (\n  operation: OpenapiOperation,\n  path: string,\n): Parameter[] => {\n  // This should be done by the createParameters but for some reason it's not\n  // TODO: remove this in favour of using createParameters\n  if (!('requestBody' in operation) || operation.requestBody === undefined) {\n    return []\n  }\n\n  const requestBody = operation.requestBody\n  const jsonSchema = requestBody.content?.['application/json']?.schema\n  if (jsonSchema == null) return []\n\n  const flattenedSchema = flattenOpenapiSchema(jsonSchema)\n  if (flattenedSchema.type !== 'object' || flattenedSchema.properties == null) {\n    return []\n  }\n\n  return createParameters(\n    flattenedSchema.properties,\n    path,\n    flattenedSchema.required,\n  )\n}\n\nconst createParameters = (\n  properties: Record<string, OpenapiSchema>,\n  path: string,\n  requiredParameters: string[] = [],\n): Parameter[] => {\n  return Object.entries(properties)\n    .map(([name, property]) => {\n      // Don't flatten discriminated arrays as they are handled separately in createParameter\n      if (\n        property.type === 'array' &&\n        'items' in property &&\n        'discriminator' in property.items\n      ) {\n        return [name, property] as [string, OpenapiSchema]\n      }\n\n      return [name, flattenOpenapiSchema(property)] as [string, OpenapiSchema]\n    })\n    .filter(([name, property]) => {\n      if (property.type == null) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          `The ${name} property for ${path} will not be documented since it does not define a type.`,\n        )\n        return false\n      }\n      return true\n    })\n    .map(([name, property]) =>\n      createParameter(name, property, path, requiredParameters),\n    )\n}\n\nconst createParameter = (\n  name: string,\n  property: OpenapiSchema,\n  path: string,\n  requiredParameters: string[],\n): Parameter => {\n  const parsedProp = PropertySchema.parse(property, {\n    path: [...path.split('/'), name],\n  })\n\n  const baseParam: BaseParameter & {\n    default?: any\n  } = {\n    name,\n    description: normalizeDescription(String(parsedProp.description ?? '')),\n    isRequired: requiredParameters.includes(name),\n    isDeprecated: parsedProp['x-deprecated'].length > 0,\n    deprecationMessage: parsedProp['x-deprecated'],\n    isUndocumented: parsedProp['x-undocumented'].length > 0,\n    undocumentedMessage: parsedProp['x-undocumented'],\n    isDraft: parsedProp['x-draft'].length > 0,\n    draftMessage: parsedProp['x-draft'],\n    hasDefault: 'default' in parsedProp,\n  }\n\n  if (baseParam.hasDefault) {\n    baseParam.default = parsedProp.default\n  }\n\n  switch (parsedProp.type) {\n    case 'string':\n      if (parsedProp.enum !== undefined) {\n        return {\n          ...baseParam,\n          format: 'enum',\n          jsonType: 'string',\n          values: parsedProp.enum.map((value: string | boolean) => {\n            const enumValue = parsedProp['x-enums']?.[String(value)]\n            if (parsedProp['x-enums'] != null && enumValue == null) {\n              throw new Error(\n                `Missing enum value definition in x-enums for \"${String(value)}\"`,\n              )\n            }\n            return {\n              name: String(value),\n              description: normalizeDescription(\n                String(enumValue?.description ?? ''),\n              ),\n              isDeprecated: Boolean(enumValue?.deprecated?.length ?? 0),\n              deprecationMessage: enumValue?.deprecated ?? '',\n              isUndocumented: Boolean(enumValue?.undocumented?.length ?? 0),\n              undocumentedMessage: enumValue?.undocumented ?? '',\n              isDraft: Boolean(enumValue?.draft?.length ?? 0),\n              draftMessage: enumValue?.draft ?? '',\n            }\n          }),\n        }\n      }\n      if (parsedProp.format === 'date-time') {\n        return { ...baseParam, format: 'datetime', jsonType: 'string' }\n      }\n      if (parsedProp.format === 'uuid') {\n        return { ...baseParam, format: 'id', jsonType: 'string' }\n      }\n      return { ...baseParam, format: 'string', jsonType: 'string' }\n    case 'boolean':\n      return { ...baseParam, format: 'boolean', jsonType: 'boolean' }\n    case 'array': {\n      return createArrayParameter(baseParam, property, path)\n    }\n    case 'object':\n      if (property.properties !== undefined) {\n        return {\n          ...baseParam,\n          format: 'object',\n          jsonType: 'object',\n          parameters: createParameters(property.properties, path),\n        }\n      }\n      return { ...baseParam, format: 'record', jsonType: 'object' }\n    case 'number':\n    case 'integer':\n      return {\n        ...baseParam,\n        format: 'number',\n        jsonType: 'number',\n      }\n    default:\n      throw new Error(`Unsupported property type: ${parsedProp.type}`)\n  }\n}\n\nconst createArrayParameter = (\n  baseParam: BaseParameter,\n  property: OpenapiSchema,\n  path: string,\n): Parameter => {\n  function createListParameter<T extends BaseListParameter>(\n    format: string,\n    extraProps: Partial<T> = {},\n  ): T {\n    return {\n      ...baseParam,\n      format: 'list' as const,\n      jsonType: 'array' as const,\n      itemFormat: format,\n      ...extraProps,\n    } as unknown as T\n  }\n\n  const fallbackListParameter =\n    createListParameter<RecordListParameter>('record')\n\n  if (property.items == null) {\n    return fallbackListParameter\n  }\n\n  if ('oneOf' in property.items) {\n    if (\n      !property.items.oneOf.every(\n        (schema: OpenapiSchema) => schema.type === 'object',\n      )\n    ) {\n      return fallbackListParameter\n    }\n\n    if (property.items.discriminator?.propertyName == null) {\n      throw new Error(\n        `Missing discriminator property name for ${baseParam.name} in ${path}`,\n      )\n    }\n\n    return createListParameter<DiscriminatedListParameter>(\n      'discriminated_object',\n      {\n        discriminator: property.items.discriminator.propertyName,\n        variants: property.items.oneOf.map((schema: OpenapiSchema) => ({\n          parameters: createParameters(\n            schema.properties ?? {},\n            path,\n            schema.required ?? [],\n          ),\n          description: normalizeDescription(schema.description ?? ''),\n        })),\n      },\n    )\n  }\n\n  const itemParameter = createParameter('item', property.items, path, [])\n\n  switch (itemParameter.format) {\n    case 'string':\n      return createListParameter<StringListParameter>('string')\n\n    case 'number':\n      return createListParameter<NumberListParameter>('number')\n\n    case 'boolean':\n      return createListParameter<BooleanListParameter>('boolean')\n\n    case 'datetime':\n      return createListParameter<DatetimeListParameter>('datetime')\n\n    case 'id':\n      return createListParameter<IdListParameter>('id')\n\n    case 'enum':\n      return createListParameter<EnumListParameter>('enum', {\n        itemEnumValues: itemParameter.values,\n      })\n\n    case 'object':\n      return createListParameter<ObjectListParameter>('object', {\n        itemParameters: itemParameter.parameters,\n      })\n\n    case 'record':\n      return createListParameter<RecordListParameter>('record')\n\n    default:\n      return fallbackListParameter\n  }\n}\n\nconst createPagination = (\n  schema: Openapi['components']['schemas'][number] | undefined,\n): Pagination | null => {\n  if (schema == null) return null\n  return {\n    responseKey: paginationResponseKey,\n    description: normalizeDescription(schema.description ?? ''),\n    properties: createProperties(\n      schema.properties ?? {},\n      [paginationResponseKey],\n      [],\n    ),\n  }\n}\n\nexport const createResources = async (\n  schemas: Openapi['components']['schemas'],\n  routes: Route[],\n  context: Context,\n): Promise<Resource[]> => {\n  const resources: Resource[] = []\n  for (const [schemaName, schema] of Object.entries(schemas)) {\n    const { success: isValidEventSchema, data: parsedEvent } =\n      EventResourceSchema.safeParse(schema)\n\n    if (isValidEventSchema) {\n      const commonProperties = findCommonOpenapiSchemaProperties(\n        parsedEvent.oneOf,\n      )\n      const eventSchema: OpenapiSchema = {\n        'x-route-path': parsedEvent['x-route-path'],\n        properties: commonProperties,\n        type: 'object',\n      }\n      const resource = await createResource(\n        schemaName,\n        eventSchema,\n        routes,\n        context,\n      )\n      resources.push(resource)\n      continue\n    }\n\n    const { success: isValidResourceSchema } = ResourceSchema.safeParse(schema)\n    if (isValidResourceSchema) {\n      const resource = await createResource(schemaName, schema, routes, context)\n      resources.push(resource)\n      continue\n    }\n  }\n\n  return resources\n}\n\nconst createResource = async (\n  schemaName: string,\n  schema: OpenapiSchema,\n  routes: Route[],\n  context: Context,\n): Promise<Resource> => {\n  const routePath = validateRoutePath(\n    schemaName,\n    schema['x-route-path'],\n    routes,\n  )\n\n  const propertyGroups = getPropertyGroups(schema)\n  const resourceType = schemaName\n\n  const resource: Omit<Resource, 'resourceSamples'> = {\n    resourceType,\n    properties: createProperties(\n      schema.properties ?? {},\n      [schemaName],\n      propertyGroups,\n    ),\n    description: normalizeDescription(schema.description ?? ''),\n    isDeprecated: schema.deprecated ?? false,\n    routePath,\n    deprecationMessage: schema['x-deprecated'] ?? '',\n    isUndocumented: (schema['x-undocumented'] ?? '').length > 0,\n    undocumentedMessage: schema['x-undocumented'] ?? '',\n    isDraft: (schema['x-draft'] ?? '').length > 0,\n    draftMessage: schema['x-draft'] ?? '',\n    propertyGroups,\n  }\n\n  return {\n    ...resource,\n    resourceSamples: await Promise.all(\n      context.resourceSampleDefinitions\n        .filter(\n          (resourceSample) => resourceSample.resource_type === resourceType,\n        )\n        .map(\n          async (resourceSampleDefinition) =>\n            await createResourceSample(resourceSampleDefinition, {\n              resource,\n              schemas: context.schemas,\n              formatCode: context.formatCode,\n            }),\n        ),\n    ),\n  }\n}\n\nconst validateRoutePath = (\n  resourceName: string,\n  routePath: string | undefined,\n  routes: Route[],\n): string => {\n  if (routePath == null || routePath.length === 0) {\n    throw new Error(`Resource ${resourceName} is missing a route path`)\n  }\n  if (!routes.some((r) => r.path === routePath)) {\n    throw new Error(`Route path ${routePath} not found in routes`)\n  }\n\n  return routePath\n}\n\nconst getPropertyGroups = (schema: OpenapiSchema): PropertyGroup[] => {\n  const rawPropertyGroups = schema['x-property-groups'] ?? {}\n\n  const propertyGroups: Record<string, PropertyGroup> = {}\n\n  for (const [key, group] of Object.entries(rawPropertyGroups)) {\n    propertyGroups[key] = {\n      name: group.name,\n      propertyGroupKey: key,\n    }\n  }\n\n  return Object.values(propertyGroups)\n}\n\nconst getVariantGroups = (schema: OpenapiSchema): VariantGroup[] => {\n  const rawVariantGroups = schema['x-variant-groups'] ?? {}\n\n  const variantGroups: Record<string, VariantGroup> = {}\n\n  for (const [key, group] of Object.entries(rawVariantGroups)) {\n    variantGroups[key] = {\n      name: group.name,\n      variantGroupKey: key,\n    }\n  }\n\n  return Object.values(variantGroups)\n}\n\nconst createResponse = (\n  operation: OpenapiOperation,\n  path: string,\n  context: Context,\n): Response & { hasPagination: boolean } => {\n  if (!('responses' in operation) || operation.responses == null) {\n    throw new Error(\n      `Missing responses in operation for ${operation.operationId}`,\n    )\n  }\n\n  const parsedOperation = OpenapiOperationSchema.parse(operation, {\n    path: [...path.split('/')],\n  })\n  const { responses } = operation\n\n  const okResponse = responses['200']\n\n  if (typeof okResponse !== 'object' || okResponse == null) {\n    return {\n      responseType: 'void',\n      description: normalizeDescription('Unknown'),\n      hasPagination: false,\n    }\n  }\n\n  const description = normalizeDescription(okResponse.description ?? '')\n\n  if (!('x-response-key' in parsedOperation)) {\n    throw new Error(`Missing responseKey for ${path}`)\n  }\n\n  const responseKey = parsedOperation['x-response-key']\n\n  if (responseKey === null) {\n    return {\n      responseType: 'void',\n      description,\n      hasPagination: false,\n    }\n  }\n\n  if (responseKey == null) {\n    throw new Error(`Missing responseKey for ${path}`)\n  }\n\n  const content = 'content' in okResponse ? okResponse.content : null\n  if (typeof content !== 'object' || content === null) {\n    return {\n      responseType: 'void',\n      description,\n      hasPagination: false,\n    }\n  }\n\n  const jsonContent =\n    'application/json' in content ? content['application/json'] : null\n  if (jsonContent === null) {\n    return {\n      responseType: 'void',\n      description,\n      hasPagination: false,\n    }\n  }\n\n  const schema = 'schema' in jsonContent ? jsonContent.schema : null\n  if (schema === null) {\n    return {\n      responseType: 'void',\n      description,\n      hasPagination: false,\n    }\n  }\n\n  if (\n    'type' in schema &&\n    'properties' in schema &&\n    schema.type === 'object' &&\n    typeof schema.properties === 'object' &&\n    schema.properties !== null\n  ) {\n    const properties = schema.properties\n\n    if (!(responseKey in properties)) {\n      throw new Error(\n        `Response key '${responseKey}' not found in response schema for ${path}`,\n      )\n    }\n\n    const refKey = responseKey\n    if (refKey != null && properties[refKey] != null) {\n      const props = schema.properties[refKey]\n      const refString = props?.$ref ?? props?.items?.$ref\n      const resourceType = refString?.split('/').at(-1) ?? 'unknown'\n\n      const actionAttemptType = validateActionAttemptType(\n        parsedOperation['x-action-attempt-type'] ?? null,\n        responseKey,\n        path,\n        resourceType,\n        context.validActionAttemptTypes,\n      )\n\n      return {\n        responseType: props?.type === 'array' ? 'resource_list' : 'resource',\n        responseKey: refKey,\n        resourceType,\n        description,\n        hasPagination:\n          (paginationResponseKey in properties &&\n            properties[paginationResponseKey]?.$ref?.endsWith(\n              `/${paginationResponseKey}`,\n            )) ??\n          false,\n        actionAttemptType,\n      }\n    }\n  }\n\n  return {\n    responseType: 'void',\n    description: normalizeDescription('Unknown'),\n    hasPagination: false,\n  }\n}\n\nconst validateActionAttemptType = (\n  actionAttemptType: string | null,\n  responseKey: string,\n  path: string,\n  resourceType: string,\n  validActionAttemptTypes: string[],\n): string | null => {\n  const excludedPaths = ['/action_attempts']\n  const isPathExcluded = excludedPaths.some((p) => path.startsWith(p))\n\n  if (resourceType !== 'action_attempt') {\n    return null\n  }\n\n  if (\n    actionAttemptType == null &&\n    responseKey === 'action_attempt' &&\n    !isPathExcluded\n  ) {\n    throw new Error(`Missing action_attempt_type for path ${path}`)\n  }\n\n  if (\n    actionAttemptType != null &&\n    !validActionAttemptTypes.includes(actionAttemptType)\n  ) {\n    throw new Error(\n      `Invalid action_attempt_type '${actionAttemptType}' for path ${path}`,\n    )\n  }\n\n  return actionAttemptType\n}\n\nexport const createProperties = (\n  properties: Record<string, OpenapiSchema>,\n  parentPaths: string[],\n  propertyGroups: PropertyGroup[],\n): Property[] => {\n  return Object.entries(properties)\n    .map(([name, property]) => {\n      // Don't flatten discriminated arrays as they are handled separately in createProperty\n      if (\n        property.type === 'array' &&\n        'items' in property &&\n        'discriminator' in property.items\n      ) {\n        return [name, property] as [string, OpenapiSchema]\n      }\n\n      return [name, flattenOpenapiSchema(property)] as [string, OpenapiSchema]\n    })\n    .filter(([name, property]) => {\n      if (property.type == null) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          `The ${name} property for ${parentPaths.join('.')} will not be documented since it does not define a type.`,\n        )\n        return false\n      }\n      return true\n    })\n    .map(([name, prop]) =>\n      createProperty(name, prop, parentPaths, propertyGroups),\n    )\n}\n\nconst createProperty = (\n  name: string,\n  prop: OpenapiSchema,\n  parentPaths: string[],\n  propertyGroups: PropertyGroup[],\n): Property => {\n  const parsedProp = PropertySchema.parse(prop, {\n    path: [...parentPaths, name],\n  })\n\n  const propertyGroupKey = parsedProp['x-property-group-key'] as string\n  validateGroupKey(propertyGroupKey, name, parentPaths, propertyGroups)\n\n  const baseProperty = {\n    name,\n    description: normalizeDescription(String(parsedProp.description ?? '')),\n    isDeprecated: parsedProp['x-deprecated'].length > 0,\n    deprecationMessage: parsedProp['x-deprecated'],\n    isUndocumented: parsedProp['x-undocumented'].length > 0,\n    undocumentedMessage: parsedProp['x-undocumented'],\n    isDraft: parsedProp['x-draft'].length > 0,\n    draftMessage: parsedProp['x-draft'],\n    propertyGroupKey: propertyGroupKey === '' ? null : propertyGroupKey,\n  }\n\n  switch (parsedProp.type) {\n    case 'string':\n      if (parsedProp.enum !== undefined) {\n        return {\n          ...baseProperty,\n          format: 'enum',\n          jsonType: 'string',\n          values: parsedProp.enum.map((value: string | boolean) => {\n            const enumValue = parsedProp['x-enums']?.[String(value)]\n            if (parsedProp['x-enums'] != null && enumValue == null) {\n              throw new Error(\n                `Missing enum value definition in x-enums for \"${String(value)}\"`,\n              )\n            }\n            return {\n              name: String(value),\n              description: normalizeDescription(\n                String(enumValue?.description ?? ''),\n              ),\n              isDeprecated: Boolean(enumValue?.deprecated?.length ?? 0),\n              deprecationMessage: enumValue?.deprecated ?? '',\n              isUndocumented: Boolean(enumValue?.undocumented?.length ?? 0),\n              undocumentedMessage: enumValue?.undocumented ?? '',\n              isDraft: Boolean(enumValue?.draft?.length ?? 0),\n              draftMessage: enumValue?.draft ?? '',\n            }\n          }),\n        }\n      }\n      if (parsedProp.format === 'date-time') {\n        return { ...baseProperty, format: 'datetime', jsonType: 'string' }\n      }\n      if (parsedProp.format === 'uuid') {\n        return { ...baseProperty, format: 'id', jsonType: 'string' }\n      }\n      return { ...baseProperty, format: 'string', jsonType: 'string' }\n    case 'boolean':\n      return { ...baseProperty, format: 'boolean', jsonType: 'boolean' }\n    case 'array': {\n      return createArrayProperty(baseProperty, prop, parentPaths)\n    }\n    case 'object':\n      if (prop.properties !== undefined) {\n        const nestedPropertyGroups = getPropertyGroups(prop)\n        return {\n          ...baseProperty,\n          format: 'object',\n          jsonType: 'object',\n          propertyGroups: nestedPropertyGroups,\n          properties: createProperties(\n            prop.properties,\n            [...parentPaths, name],\n            nestedPropertyGroups,\n          ),\n        }\n      }\n      return { ...baseProperty, format: 'record', jsonType: 'object' }\n    case 'number':\n    case 'integer':\n      return {\n        ...baseProperty,\n        format: 'number',\n        jsonType: 'number',\n      }\n    default:\n      throw new Error(`Unsupported property type: ${parsedProp.type}`)\n  }\n}\n\nconst validateGroupKey = (\n  groupKey: string | null,\n  propertyName: string,\n  parentPaths: string[],\n  groups: PropertyGroup[] | VariantGroup[],\n): void => {\n  if (groupKey == null || groupKey.length === 0) return\n\n  const resourceName = parentPaths.at(0)\n  if (resourceName == null) {\n    throw new Error(\n      `Missing resource name for property \"${propertyName}\" in ${parentPaths.join('.')}`,\n    )\n  }\n\n  const validGroupKeys = groups.map((g) => {\n    if ('propertyGroupKey' in g) return g.propertyGroupKey\n    if ('variantGroupKey' in g) return g.variantGroupKey\n    throw new Error('Expected propertyGroupKey or variantGroupKey')\n  })\n  if (validGroupKeys.length === 0) {\n    throw new Error(\n      `The \"${propertyName}\" has group ${groupKey} but ${parentPaths.join('.')} does not define any groups.`,\n    )\n  }\n\n  if (!validGroupKeys.includes(groupKey)) {\n    throw new Error(\n      `Invalid property group \"${groupKey}\" for property \"${propertyName}\" in resource \"${resourceName}\". Valid groups are: ${validGroupKeys.join(', ')}`,\n    )\n  }\n}\n\nconst createArrayProperty = (\n  baseProperty: BaseProperty,\n  prop: OpenapiSchema,\n  parentPaths: string[],\n): Property => {\n  function createListProperty<T extends ListProperty>(\n    format: string,\n    extraProps: Partial<T> = {},\n  ): T {\n    return {\n      ...baseProperty,\n      format: 'list' as const,\n      jsonType: 'array' as const,\n      itemFormat: format,\n      ...extraProps,\n    } as unknown as T\n  }\n\n  const fallbackListProperty = createListProperty<RecordListProperty>('record')\n\n  if (prop.items == null) {\n    return fallbackListProperty\n  }\n\n  if ('oneOf' in prop.items) {\n    if (!prop.items.oneOf.every((schema) => schema.type === 'object')) {\n      return fallbackListProperty\n    }\n\n    if (prop.items.discriminator?.propertyName == null) {\n      throw new Error(\n        `Missing discriminator property name for ${baseProperty.name} in ${parentPaths.join('.')}`,\n      )\n    }\n\n    const variantGroups = getVariantGroups(prop)\n\n    return createListProperty<DiscriminatedListProperty>(\n      'discriminated_object',\n      {\n        discriminator: prop.items.discriminator.propertyName,\n        variantGroups,\n        variants: prop.items.oneOf.map((schema) => {\n          const variantGroupKey = schema['x-variant-group-key'] ?? null\n          validateGroupKey(\n            variantGroupKey,\n            baseProperty.name,\n            parentPaths,\n            variantGroups,\n          )\n          return {\n            variantGroupKey,\n            properties: createProperties(\n              schema.properties ?? {},\n              [...parentPaths, baseProperty.name],\n              [],\n            ),\n            description: normalizeDescription(schema.description ?? ''),\n          }\n        }),\n      },\n    )\n  }\n\n  const itemProperty = createProperty(\n    'item',\n    prop.items,\n    [...parentPaths, baseProperty.name],\n    [],\n  )\n\n  switch (itemProperty.format) {\n    case 'string':\n      return createListProperty<StringListProperty>('string')\n\n    case 'number':\n      return createListProperty<NumberListProperty>('number')\n\n    case 'boolean':\n      return createListProperty<BooleanListProperty>('boolean')\n\n    case 'datetime':\n      return createListProperty<DatetimeListProperty>('datetime')\n\n    case 'id':\n      return createListProperty<IdListProperty>('id')\n\n    case 'enum':\n      return createListProperty<EnumListProperty>('enum', {\n        itemEnumValues: itemProperty.values,\n      })\n\n    case 'object':\n      return createListProperty<ObjectListProperty>('object', {\n        itemProperties: itemProperty.properties,\n      })\n\n    case 'record':\n      return createListProperty<RecordListProperty>('record')\n\n    default:\n      return fallbackListProperty\n  }\n}\n\nexport const getSemanticMethod = (methods: Method[]): Method => {\n  if (methods.length === 1) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return methods[0]!\n  }\n\n  const priorityOrder: Method[] = ['PUT', 'PATCH', 'GET', 'DELETE', 'POST']\n\n  for (const method of priorityOrder) {\n    if (methods.includes(method)) {\n      return method\n    }\n  }\n\n  return 'POST'\n}\n\nexport const getPreferredMethod = (\n  methods: Method[],\n  semanticMethod: Method,\n  operation: OpenapiOperation,\n): Method => {\n  if (methods.length === 1) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return methods[0]!\n  }\n\n  if (methods.includes('POST')) {\n    if (semanticMethod === 'GET' || semanticMethod === 'DELETE') {\n      const hasComplexParameters =\n        (operation.parameters?.some(\n          (param) =>\n            param.schema?.type === 'array' || param.schema?.type === 'object',\n        ) ??\n          false) ||\n        operation.requestBody?.content?.['application/json']?.schema?.type ===\n          'object'\n\n      if (hasComplexParameters) {\n        return 'POST'\n      }\n    }\n  }\n\n  return semanticMethod\n}\n\nconst createEvents = async (\n  schemas: Openapi['components']['schemas'],\n  routes: Route[],\n  context: Context,\n): Promise<EventResource[]> => {\n  const eventSchema = schemas['event']\n  if (\n    eventSchema == null ||\n    typeof eventSchema !== 'object' ||\n    !('oneOf' in eventSchema) ||\n    !Array.isArray(eventSchema.oneOf)\n  ) {\n    return []\n  }\n\n  const events = await Promise.all(\n    eventSchema.oneOf.map(async (schema) => {\n      if (\n        typeof schema !== 'object' ||\n        schema.properties?.['event_type']?.enum?.[0] == null\n      ) {\n        return null\n      }\n\n      const eventType = schema.properties['event_type'].enum[0]\n\n      if (!('x-route-path' in schema && schema['x-route-path'].length > 0)) {\n        throw new Error(`Missing route_path for event type ${eventType}`)\n      }\n\n      return {\n        ...(await createResource('event', schema, routes, context)),\n        eventType,\n      }\n    }),\n  )\n\n  return events.filter((event): event is EventResource => event !== null)\n}\n\nconst createActionAttempts = async (\n  schemas: Openapi['components']['schemas'],\n  routes: Route[],\n  context: Context,\n): Promise<ActionAttempt[]> => {\n  const actionAttemptSchema = schemas['action_attempt']\n  if (\n    actionAttemptSchema == null ||\n    typeof actionAttemptSchema !== 'object' ||\n    !('oneOf' in actionAttemptSchema) ||\n    !Array.isArray(actionAttemptSchema.oneOf)\n  ) {\n    return []\n  }\n\n  const schemasByActionType = new Map<string, OpenapiSchema[]>()\n\n  for (const schema of actionAttemptSchema.oneOf) {\n    if (\n      typeof schema !== 'object' ||\n      schema.properties?.['action_type']?.enum?.[0] == null\n    ) {\n      continue\n    }\n\n    const actionType = schema.properties['action_type'].enum[0]\n    const currentSchemas = schemasByActionType.get(actionType)\n\n    if (currentSchemas == null) {\n      schemasByActionType.set(actionType, [schema])\n    } else {\n      currentSchemas.push(schema)\n    }\n  }\n\n  return await Promise.all(\n    Array.from(schemasByActionType.entries()).map(\n      async ([actionType, schemas]) => {\n        const mergedProperties: Record<string, OpenapiSchema> = {}\n\n        const allPropertyKeys = new Set<string>()\n        for (const schema of schemas) {\n          if (schema.properties != null) {\n            Object.keys(schema.properties).forEach((key) =>\n              allPropertyKeys.add(key),\n            )\n          }\n        }\n\n        for (const propKey of allPropertyKeys) {\n          const propDefinitions = schemas\n            .filter((schema) => schema.properties?.[propKey] != null)\n            .map((schema) => schema.properties?.[propKey])\n\n          if (propDefinitions.length === 0) continue\n\n          const nonNullableDefinition = propDefinitions.find((prop) => {\n            if (prop == null) return false\n\n            return !('nullable' in prop && prop.nullable === true)\n          })\n\n          mergedProperties[propKey] =\n            nonNullableDefinition ?? propDefinitions[0] ?? {}\n        }\n\n        // Ensure standard status field\n        mergedProperties['status'] = {\n          ...mergedProperties['status'],\n          type: 'string',\n          enum: ['success', 'pending', 'error'],\n        }\n\n        const schemaWithMergedProperties: OpenapiSchema = {\n          ...(actionAttemptSchema['x-route-path'] != null && {\n            'x-route-path': actionAttemptSchema['x-route-path'],\n          }),\n          ...schemas[0],\n          properties: mergedProperties,\n        }\n\n        const resource = await createResource(\n          'action_attempt',\n          schemaWithMergedProperties,\n          routes,\n          context,\n        )\n\n        return {\n          ...resource,\n          resourceType: 'action_attempt',\n          actionAttemptType: actionType,\n        }\n      },\n    ),\n  )\n}\n\nconst getParentPath = (path: string): string | null =>\n  path.split('/').length === 2 ? null : path.split('/').slice(0, -1).join('/')\n\nconst normalizeDescription = (content: string): string =>\n  content\n    .split('\\n\\n')\n    .map((s) => s.trim())\n    .join('\\n\\n')\n","import type { OpenapiSchema } from 'lib/openapi/types.js'\n\nexport function findCommonOpenapiSchemaProperties(\n  schemas: OpenapiSchema[],\n): Record<string, OpenapiSchema> {\n  const firstSchema = schemas[0]\n  if (schemas.length === 0 || firstSchema?.properties == null) {\n    return {}\n  }\n\n  return Object.entries(firstSchema.properties).reduce<\n    Record<string, OpenapiSchema>\n  >((commonProps, [propKey, propValue]) => {\n    const isPropInAllSchemas = schemas.every((schema) =>\n      Object.keys(schema.properties ?? {}).includes(propKey),\n    )\n\n    if (!isPropInAllSchemas) {\n      return commonProps\n    }\n\n    if ('enum' in propValue) {\n      const mergedEnumValues = schemas.reduce<string[]>((allEnums, schema) => {\n        const enumValues = schema.properties?.[propKey]?.enum ?? []\n        return [...new Set([...allEnums, ...enumValues])]\n      }, [])\n\n      return {\n        ...commonProps,\n        [propKey]: { ...propValue, enum: mergedEnumValues },\n      }\n    }\n\n    return { ...commonProps, [propKey]: propValue }\n  }, {})\n}\n","import type { OpenapiSchema } from './types.js'\n\nexport const flattenOpenapiSchema = (schema: OpenapiSchema): OpenapiSchema => {\n  if ('allOf' in schema && Array.isArray(schema.allOf)) {\n    return flattenAllOfSchema(schema as { allOf: OpenapiSchema[] })\n  }\n\n  if ('oneOf' in schema && Array.isArray(schema.oneOf)) {\n    return flattenOneOfSchema(schema as { oneOf: OpenapiSchema[] })\n  }\n\n  if (schema.type === 'object' && schema.properties != null) {\n    const flattenedProperties: Record<string, OpenapiSchema> = {}\n\n    for (const [propKey, propSchema] of Object.entries(schema.properties)) {\n      flattenedProperties[propKey] = flattenOpenapiSchema(propSchema)\n    }\n\n    return { ...schema, properties: flattenedProperties }\n  }\n\n  if (schema.type === 'array' && schema.items != null) {\n    return { ...schema, items: flattenOpenapiSchema(schema.items) }\n  }\n\n  return schema\n}\n\ntype AllOfSchema = OpenapiSchema & Required<Pick<OpenapiSchema, 'allOf'>>\n\nexport const flattenAllOfSchema = (schema: AllOfSchema): OpenapiSchema => {\n  const flattenedSchema: OpenapiSchema &\n    Required<Pick<OpenapiSchema, 'type' | 'properties' | 'required'>> = {\n    type: 'object',\n    properties: {},\n    required: [],\n    ...(schema?.description != null && { description: schema.description }),\n    ...(schema['x-property-groups'] != null && {\n      'x-property-groups': schema['x-property-groups'],\n    }),\n  }\n\n  const flattenedSubschemas = schema.allOf.map(flattenOpenapiSchema)\n\n  for (const flattenedSubschema of flattenedSubschemas) {\n    if (flattenedSubschema.properties != null) {\n      flattenedSchema.properties = {\n        ...flattenedSchema.properties,\n        ...flattenedSubschema.properties,\n      }\n    }\n\n    if (\n      flattenedSubschema.required != null &&\n      Array.isArray(flattenedSubschema.required)\n    ) {\n      flattenedSchema.required = Array.from(\n        new Set([...flattenedSchema.required, ...flattenedSubschema.required]),\n      )\n    }\n  }\n\n  for (const [propKey, propSchema] of Object.entries(\n    flattenedSchema.properties,\n  )) {\n    if ('enum' in propSchema && Array.isArray(propSchema.enum)) {\n      const enumValues = new Set<string>()\n\n      for (const subschema of flattenedSubschemas) {\n        const enumProp = subschema.properties?.[propKey]\n        if (\n          enumProp != null &&\n          'enum' in enumProp &&\n          Array.isArray(enumProp.enum)\n        ) {\n          enumProp.enum.forEach((val) => enumValues.add(val))\n        }\n      }\n\n      flattenedSchema.properties[propKey] = {\n        ...propSchema,\n        enum: Array.from(enumValues),\n      }\n    }\n  }\n\n  return flattenedSchema\n}\n\ntype OneOfSchema = OpenapiSchema & Required<Pick<OpenapiSchema, 'oneOf'>>\n\nexport const flattenOneOfSchema = (schema: OneOfSchema): OpenapiSchema => {\n  const baseFlattenedSchema: OpenapiSchema = {\n    ...(schema?.description != null && { description: schema.description }),\n  }\n  const flattenedSubschemas = schema.oneOf.map(flattenOpenapiSchema)\n\n  if (\n    flattenedSubschemas.every(\n      (s) => s.type === 'string' && Array.isArray(s.enum),\n    )\n  ) {\n    const mergedEnums = Array.from(\n      new Set(flattenedSubschemas.flatMap((s) => s.enum ?? [])),\n    )\n\n    return {\n      ...baseFlattenedSchema,\n      type: 'string',\n      enum: mergedEnums,\n    }\n  } else {\n    let mergedProperties: Record<string, OpenapiSchema> = {}\n    const requiredFieldsLists: string[][] = []\n\n    for (const flattenedSubschema of flattenedSubschemas) {\n      if (flattenedSubschema.properties != null) {\n        mergedProperties = {\n          ...mergedProperties,\n          ...flattenedSubschema.properties,\n        }\n      }\n\n      if (\n        flattenedSubschema.required != null &&\n        Array.isArray(flattenedSubschema.required)\n      ) {\n        requiredFieldsLists.push(flattenedSubschema.required)\n      } else {\n        requiredFieldsLists.push([])\n      }\n    }\n\n    for (const [propKey, propSchema] of Object.entries(mergedProperties)) {\n      if ('enum' in propSchema && Array.isArray(propSchema.enum)) {\n        const enumValues = new Set<string>()\n\n        for (const subschema of flattenedSubschemas) {\n          const enumProp = subschema.properties?.[propKey]\n          if (\n            enumProp != null &&\n            'enum' in enumProp &&\n            Array.isArray(enumProp.enum)\n          ) {\n            enumProp.enum.forEach((val) => enumValues.add(val))\n          }\n        }\n\n        mergedProperties[propKey] = {\n          ...propSchema,\n          enum: Array.from(enumValues),\n        }\n      }\n    }\n\n    let commonRequiredFields: string[] = []\n    if (requiredFieldsLists.length > 0) {\n      commonRequiredFields = requiredFieldsLists.reduce(\n        (commonRequired, currentRequiredFields) =>\n          commonRequired.filter((field) =>\n            currentRequiredFields.includes(field),\n          ),\n      )\n    }\n\n    return {\n      ...baseFlattenedSchema,\n      type: 'object',\n      properties: mergedProperties,\n      required: commonRequiredFields,\n    }\n  }\n}\n","import { z } from 'zod'\n\nexport const ParameterSchema = z.object({\n  name: z.string(),\n  in: z.enum(['query', 'header', 'path', 'cookie']),\n  description: z.string().default(''),\n  required: z.boolean().default(false),\n  schema: z\n    .object({\n      type: z.string(),\n      format: z.string().optional(),\n    })\n    .optional(),\n  deprecated: z.boolean().default(false),\n  'x-undocumented': z.string().default(''),\n  'x-deprecated': z.string().default(''),\n  'x-draft': z.string().default(''),\n})\n\nconst ResponseSchema = z.record(\n  z.string(),\n  z.object({\n    description: z.string(),\n    content: z\n      .record(\n        z.string(),\n        z.object({\n          schema: z.object({\n            $ref: z.string().optional(),\n            type: z.string().optional(),\n            items: z\n              .object({\n                $ref: z.string(),\n              })\n              .optional(),\n          }),\n        }),\n      )\n      .optional(),\n  }),\n)\n\nexport const AuthMethodSchema = z\n  .enum([\n    'api_key',\n    'client_session',\n    'console_session_token_with_workspace',\n    'console_session_token_without_workspace',\n    'pat_with_workspace',\n    'pat_without_workspace',\n    'publishable_key',\n    'unknown',\n  ])\n  .catch('unknown')\n\nexport const OpenapiOperationSchema = z.object({\n  operationId: z.string(),\n  summary: z.string().optional(),\n  description: z.string().default(''),\n  parameters: z.array(ParameterSchema).optional(),\n  requestBody: z\n    .object({\n      content: z.record(\n        z.string(),\n        z.object({\n          schema: z.object({\n            $ref: z.string().optional(),\n            type: z.string().optional(),\n          }),\n        }),\n      ),\n    })\n    .optional(),\n  responses: ResponseSchema,\n  security: z\n    .array(z.record(z.string().pipe(AuthMethodSchema), z.array(z.never())))\n    .default([]),\n  deprecated: z.boolean().default(false),\n  'x-response-key': z.string().nullable().optional(),\n  'x-title': z.string().default(''),\n  'x-undocumented': z.string().default(''),\n  'x-deprecated': z.string().default(''),\n  'x-draft': z.string().default(''),\n  'x-action-attempt-type': z.string().optional(),\n})\n\nexport const EnumValueSchema = z.object({\n  description: z.string().default(''),\n  undocumented: z.string().default(''),\n  deprecated: z.string().default(''),\n  draft: z.string().default(''),\n})\n\nconst PropertyGroupSchema = z\n  .record(\n    z.string(),\n    z.object({\n      name: z.string(),\n    }),\n  )\n  .default({})\n\nconst VariantGroupSchema = PropertyGroupSchema\n\nconst commonPropertyFields = {\n  description: z.string().default(''),\n  deprecated: z.boolean().default(false),\n  default: z.any().optional(),\n  'x-undocumented': z.string().default(''),\n  'x-deprecated': z.string().default(''),\n  'x-draft': z.string().default(''),\n  'x-property-group-key': z.string().default(''),\n  'x-property-groups': PropertyGroupSchema,\n  'x-variant-groups': VariantGroupSchema,\n}\n\nexport const PropertySchema: z.ZodSchema<any> = z.union([\n  z.object({\n    type: z.enum(['string', 'number', 'integer', 'boolean', 'array', 'object']),\n    ...commonPropertyFields,\n    enum: z.array(z.string().or(z.boolean())).optional(),\n    'x-enums': z.record(z.string(), EnumValueSchema).optional(),\n    format: z.string().optional(),\n    $ref: z.string().optional(),\n  }),\n\n  z.object({\n    oneOf: z.array(z.lazy(() => PropertySchema)),\n    ...commonPropertyFields,\n    discriminator: z.object({ propertyName: z.string() }).optional(),\n  }),\n\n  z.object({\n    allOf: z.array(z.lazy(() => PropertySchema)),\n    ...commonPropertyFields,\n  }),\n])\n\nexport const ResourceSchema = z.object({\n  type: z.literal('object'),\n  properties: z.record(z.string(), PropertySchema),\n  required: z.array(z.string()).default([]),\n  description: z.string().default(''),\n  'x-route-path': z.string().default(''),\n  'x-undocumented': z.string().default(''),\n  'x-deprecated': z.string().default(''),\n  'x-draft': z.string().default(''),\n  'x-property-groups': PropertyGroupSchema,\n  'x-variant-groups': VariantGroupSchema,\n})\n\nexport const EventResourceSchema = z.object({\n  'x-route-path': z.string().default(''),\n  discriminator: z.object({ propertyName: z.string() }),\n  oneOf: z.array(ResourceSchema),\n})\n","import { z } from 'zod'\n\nimport type { Endpoint } from 'lib/blueprint.js'\nimport { JsonSchema } from 'lib/json.js'\n\nimport { createCsharpRequest, createCsharpResponse } from './csharp.js'\nimport { createCurlRequest, createCurlResponse } from './curl.js'\nimport { formatCodeRecords } from './format.js'\nimport { createGoRequest, createGoResponse } from './go.js'\nimport { createJavaRequest, createJavaResponse } from './java.js'\nimport {\n  createJavascriptRequest,\n  createJavascriptResponse,\n} from './javascript.js'\nimport { createPhpRequest, createPhpResponse } from './php.js'\nimport { createPythonRequest, createPythonResponse } from './python.js'\nimport { createRubyRequest, createRubyResponse } from './ruby.js'\nimport { createSeamCliRequest, createSeamCliResponse } from './seam-cli.js'\nimport { SdkNameSchema, type SyntaxName, SyntaxNameSchema } from './syntax.js'\n\nexport const CodeSampleDefinitionSchema = z.object({\n  title: z.string().trim().min(1),\n  description: z.string().trim().min(1),\n  request: z.object({\n    path: z\n      .string()\n      .startsWith('/')\n      .regex(\n        /^[a-z_/]+$/,\n        'Can only contain the lowercase letters a-z, underscores, and forward slashes.',\n      ),\n    parameters: z.record(z.string().min(1), JsonSchema).optional().default({}),\n  }),\n  response: z.object({\n    body: z.record(z.string().min(1), JsonSchema).nullable(),\n  }),\n})\n\nexport type CodeSampleDefinitionInput = z.input<\n  typeof CodeSampleDefinitionSchema\n>\n\nexport type CodeSampleDefinition = z.output<typeof CodeSampleDefinitionSchema>\n\nconst CodeSchema = z.record(\n  SdkNameSchema,\n  z.object({\n    title: z.string().min(1),\n    sdkName: SdkNameSchema,\n    request: z.string(),\n    response: z.string(),\n    request_syntax: SyntaxNameSchema,\n    response_syntax: SyntaxNameSchema,\n  }),\n)\n\nexport type Code = z.infer<typeof CodeSchema>\n\nconst CodeSampleSchema = CodeSampleDefinitionSchema.extend({\n  code: CodeSchema,\n})\n\nexport type CodeSample = z.output<typeof CodeSampleSchema>\n\nexport interface CodeSampleContext {\n  endpoint: Omit<Endpoint, 'codeSamples'>\n  formatCode: (content: string, syntax: SyntaxName) => Promise<string>\n}\n\nexport const createCodeSample = async (\n  codeSampleDefinition: CodeSampleDefinition,\n  context: CodeSampleContext,\n): Promise<CodeSample> => {\n  const isVoidResponse = context.endpoint.response.responseType === 'void'\n  const code: Code = {\n    javascript: {\n      title: 'JavaScript',\n      sdkName: 'javascript',\n      request: createJavascriptRequest(codeSampleDefinition, context),\n      response: isVoidResponse\n        ? '// void'\n        : createJavascriptResponse(codeSampleDefinition, context),\n      request_syntax: 'javascript',\n      response_syntax: isVoidResponse ? 'javascript' : 'json',\n    },\n    python: {\n      title: 'Python',\n      sdkName: 'python',\n      request: createPythonRequest(codeSampleDefinition, context),\n      response: createPythonResponse(codeSampleDefinition, context),\n      request_syntax: 'python',\n      response_syntax: 'python',\n    },\n    ruby: {\n      title: 'Ruby',\n      sdkName: 'ruby',\n      request: createRubyRequest(codeSampleDefinition, context),\n      response: createRubyResponse(codeSampleDefinition, context),\n      request_syntax: 'ruby',\n      response_syntax: 'ruby',\n    },\n    php: {\n      title: 'PHP',\n      sdkName: 'php',\n      request: createPhpRequest(codeSampleDefinition, context),\n      response: createPhpResponse(codeSampleDefinition, context),\n      request_syntax: 'php',\n      response_syntax: 'php',\n    },\n    seam_cli: {\n      title: 'Seam CLI',\n      sdkName: 'seam_cli',\n      request: createSeamCliRequest(codeSampleDefinition, context),\n      response: createSeamCliResponse(codeSampleDefinition, context),\n      request_syntax: 'bash',\n      response_syntax: 'json',\n    },\n    go: {\n      title: 'Go',\n      sdkName: 'go',\n      request: createGoRequest(codeSampleDefinition, context),\n      response: createGoResponse(codeSampleDefinition, context),\n      request_syntax: 'go',\n      response_syntax: 'go',\n    },\n    java: {\n      title: 'Java',\n      sdkName: 'java',\n      request: createJavaRequest(codeSampleDefinition, context),\n      response: createJavaResponse(codeSampleDefinition, context),\n      request_syntax: 'java',\n      response_syntax: 'json',\n    },\n    csharp: {\n      title: 'C#',\n      sdkName: 'csharp',\n      request: createCsharpRequest(codeSampleDefinition, context),\n      response: createCsharpResponse(codeSampleDefinition, context),\n      request_syntax: 'csharp',\n      response_syntax: 'json',\n    },\n    curl: {\n      title: 'cURL',\n      sdkName: 'curl',\n      request: createCurlRequest(codeSampleDefinition, context),\n      response: createCurlResponse(codeSampleDefinition, context),\n      request_syntax: 'bash',\n      response_syntax: 'json',\n    },\n  }\n\n  return {\n    ...codeSampleDefinition,\n    code: await formatCodeRecords(code, context),\n  }\n}\n","import { z } from 'zod'\n\n// https://zod.dev/?id=json-type\nconst LiteralSchema = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\ntype Literal = z.infer<typeof LiteralSchema>\n\nexport type Json = Literal | { [key: string]: Json } | Json[]\n\nexport type NonNullJson = Exclude<Json, null>\n\nexport const JsonSchema: z.ZodType<Json> = z.lazy(() =>\n  z.union([LiteralSchema, z.array(JsonSchema), z.record(JsonSchema)]),\n)\n","import { camelCase, pascalCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport { createJsonResponse } from './json.js'\n\nexport const createCsharpRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/').slice(1)\n  const requestArgs = formatCsharpArgs(request.parameters)\n\n  return `seam.${parts.map((p) => pascalCase(p)).join('.')}(${requestArgs})`\n}\n\nconst formatCsharpArgs = (jsonParams: NonNullJson): string =>\n  Object.entries(jsonParams as Record<string, Json>)\n    .map(([key, value]) => {\n      const formattedValue = formatCsharpValue(key, value)\n      return `${camelCase(key)}: ${formattedValue}`\n    })\n    .join(', ')\n\nconst formatCsharpValue = (key: string, value: Json): string => {\n  if (value == null) return 'null'\n  if (typeof value === 'boolean') return value.toString()\n  if (typeof value === 'number') return value.toString()\n  if (typeof value === 'string') return `\"${value}\"`\n  if (Array.isArray(value)) {\n    return formatCsharpArray(key, value)\n  }\n  if (typeof value === 'object') {\n    return formatCsharpObject(value)\n  }\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n\nconst formatCsharpArray = (key: string, value: Json[]): string => {\n  if (value.length === 0) {\n    return 'new object[] { }'\n  }\n\n  const formattedItems = value.map((v) => formatCsharpValue(key, v))\n  const item = value[0]\n  if (item == null) {\n    throw new Error(`Null value in response array for '${key}'`)\n  }\n\n  const arrayType = isPrimitiveValue(item)\n    ? getPrimitiveTypeName(item)\n    : 'object'\n\n  return `new ${arrayType}[] { ${formattedItems.join(', ')}} `\n}\n\nconst isPrimitiveValue = (value: Json): boolean =>\n  value !== null && typeof value !== 'object'\n\nconst getPrimitiveTypeName = (value: Json): string => {\n  switch (typeof value) {\n    case 'string':\n      return 'string'\n    case 'number':\n      return 'float'\n    case 'boolean':\n      return 'bool'\n    default:\n      throw new Error(`Unsupported type: ${typeof value}`)\n  }\n}\n\nconst formatCsharpObject = (value: Record<string, Json>): string => {\n  if (Object.keys(value).length === 0) {\n    return 'new { }'\n  }\n\n  const formattedEntries = Object.entries(value)\n    .map(\n      ([objKey, val]) =>\n        `${camelCase(objKey)} = ${formatCsharpValue(objKey, val)}`,\n    )\n    .join(', ')\n\n  return `new { ${formattedEntries} }`\n}\n\nexport const createCsharpResponse = createJsonResponse\n","import type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport type {\n  ResourceSampleContext,\n  ResourceSampleDefinition,\n} from './resource-sample.js'\n\nexport const createJsonResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n  if (endpoint.response.responseType === 'void') {\n    return JSON.stringify({})\n  }\n  const { responseKey } = endpoint.response\n  const data = response?.body?.[responseKey]\n  if (data == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n  return JSON.stringify(data)\n}\n\nexport const createJsonResourceData = (\n  { properties }: ResourceSampleDefinition,\n  _context: ResourceSampleContext,\n): string => {\n  return JSON.stringify(properties)\n}\n","import type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nconst BASE_URL = 'https://connect.getseam.com'\n\nexport const createCurlRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const method = 'POST'\n  const url = `${BASE_URL}${request.path}`\n\n  let curlCommand = `curl --include --request ${method} \"${url}\" \\\\\\n`\n  curlCommand += '  --header \"Authorization: Bearer $SEAM_API_KEY\"'\n\n  const params = request.parameters\n  const hasParams = Object.keys(params).length > 0\n\n  if (hasParams) {\n    curlCommand += ' \\\\\\n'\n    curlCommand += '  --json @- << EOF\\n'\n    curlCommand += JSON.stringify(request.parameters, null, 2)\n    curlCommand += '\\nEOF'\n  }\n\n  return curlCommand\n}\n\nexport const createCurlResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n  if (endpoint.response.responseType === 'void') {\n    return JSON.stringify({})\n  }\n  const { responseKey } = endpoint.response\n  const data = response?.body?.[responseKey]\n  if (data == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n  return JSON.stringify({ [responseKey]: data })\n}\n","import type { Code, CodeSampleContext } from './code-sample.js'\nimport type { Resource, ResourceSampleContext } from './resource-sample.js'\n\ntype CodeEntries = Entries<Code>\ntype CodeEntry = NonNullable<CodeEntries[number]>\n\nexport const formatCodeRecords = async (\n  code: Code,\n  context: CodeSampleContext,\n): Promise<Code> => {\n  const entries = Object.entries(code) as unknown as CodeEntries\n  const formattedEntries = await Promise.all(\n    entries.map(async (entry): Promise<CodeEntry> => {\n      if (entry == null) throw new Error('Unexpected null code entry')\n      return await formatCodeEntry(entry, context)\n    }),\n  )\n  return Object.fromEntries(formattedEntries)\n}\n\nconst formatCodeEntry = async (\n  [key, code]: CodeEntry,\n  { formatCode }: CodeSampleContext,\n): Promise<CodeEntry> => {\n  if (code == null) throw new Error(`Unexpected null in code object for ${key}`)\n  const [request, response] = await Promise.all([\n    await formatCode(code.request, code.request_syntax),\n    await formatCode(code.response, code.response_syntax),\n  ])\n  return [\n    key,\n    {\n      ...code,\n      request,\n      response,\n    },\n  ]\n}\n\ntype ResourceEntries = Entries<Resource>\ntype ResourceEntry = NonNullable<ResourceEntries[number]>\n\nexport const formatResourceRecords = async (\n  resource: Resource,\n  context: ResourceSampleContext,\n): Promise<Resource> => {\n  const entries = Object.entries(resource) as unknown as ResourceEntries\n  const formattedEntries = await Promise.all(\n    entries.map(async (entry): Promise<ResourceEntry> => {\n      if (entry == null) throw new Error('Unexpected null resource entry')\n      return await formatResourceEntry(entry, context)\n    }),\n  )\n  return Object.fromEntries(formattedEntries)\n}\n\nconst formatResourceEntry = async (\n  [key, resource]: ResourceEntry,\n  { formatCode }: ResourceSampleContext,\n): Promise<ResourceEntry> => {\n  if (resource == null) {\n    throw new Error(`Unexpected null in resource object for ${key}`)\n  }\n  const resourceData = await formatCode(\n    resource.resource_data,\n    resource.resource_data_syntax,\n  )\n  return [\n    key,\n    {\n      ...resource,\n      resource_data: resourceData,\n    },\n  ]\n}\n\ntype Entries<T> = Array<\n  {\n    [K in keyof T]: [K, T[K]]\n  }[keyof T]\n>\n","import { pascalCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nconst defaultGoPackageName = 'api'\nconst goPackageBasePath = 'github.com/seamapi/go'\n\nexport const createGoRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const isReqWithParams = Object.keys(request.parameters).length !== 0\n  const goPackageName = getGoPackageName(request.path)\n\n  const goSdkImports = generateImports({\n    goPackageName,\n    isReqWithParams,\n  })\n\n  const requestStructName = getRequestStructName(request.path)\n  const formattedArgs = formatGoRequestArgs(request.parameters, {\n    goPackageName,\n    requestStructName,\n  })\n  const goSdkRequestArgs = `context.Background()${isReqWithParams ? `,\\n${goPackageName}.${requestStructName}{\\n${formattedArgs},\\n}` : ''}`\n\n  const pathParts = request.path.split('/')\n\n  return `package main\n  ${goSdkImports}\n\n  func main() {\n  client${pathParts.map((p) => pascalCase(p)).join('.')}(${isReqWithParams ? '\\n' : ''}${goSdkRequestArgs},\\n)\n  }\n  `.trim()\n}\n\nconst getGoPackageName = (path: string): string => {\n  if (!isPathNested(path)) {\n    return defaultGoPackageName\n  }\n\n  const firstPathPart = path.split('/').slice(1)[1]\n\n  if (firstPathPart == null) {\n    throw new Error(`Invalid path: missing second part in \"${path}\"`)\n  }\n\n  return firstPathPart.replace(/_/g, '')\n}\n\nconst isPathNested = (path: string): boolean =>\n  path.split('/').slice(1).length > 2\n\nconst generateImports = ({\n  goPackageName,\n  isReqWithParams,\n}: {\n  goPackageName: string\n  isReqWithParams: boolean\n}): string => {\n  const imports: string[] = []\n\n  if (isReqWithParams) {\n    const defaultPackageImport = `import ${defaultGoPackageName} \"${goPackageBasePath}\"`\n    imports.push(defaultPackageImport)\n  }\n\n  if (goPackageName !== defaultGoPackageName && isReqWithParams) {\n    const nestedPackageImport = `import ${goPackageName} \"${goPackageBasePath}/${goPackageName}\"`\n    imports.push(nestedPackageImport)\n  }\n\n  return imports.join('\\n')\n}\n\nconst getRequestStructName = (path: string): string => {\n  const requestStructNameSuffix = 'Request'\n\n  return isPathNested(path)\n    ? `${pascalCase(removeUntilSecondSlash(path))}${requestStructNameSuffix}`\n    : `${pascalCase(path)}${requestStructNameSuffix}`\n}\n\nconst removeUntilSecondSlash = (str: string): string =>\n  str.replace(/^\\/[^/]*/, '')\n\ninterface GoContext {\n  goPackageName: string\n  requestStructName: string\n}\n\nconst formatGoRequestArgs = (\n  jsonParams: NonNullJson,\n  context: GoContext,\n): string =>\n  Object.entries(jsonParams as Record<string, Json>)\n    .map(([paramKey, paramValue]) => {\n      const formattedValue = formatGoRequestArgValue(\n        paramKey,\n        paramValue,\n        context,\n      )\n      return `${pascalCase(paramKey)}: ${formattedValue}`\n    })\n    .join(',\\n')\n\nconst formatGoRequestArgValue = (\n  key: string,\n  value: Json,\n  context: GoContext,\n): string => {\n  if (value == null) return 'nil'\n  if (typeof value === 'string')\n    return `${defaultGoPackageName}.String(\"${value}\")`\n  if (typeof value === 'boolean')\n    return `${defaultGoPackageName}.Bool(${value})`\n  if (typeof value === 'number')\n    return `${defaultGoPackageName}.Float64(${value})`\n\n  if (Array.isArray(value)) {\n    return formatGoRequestArrayValue(key, value, context)\n  }\n\n  if (typeof value === 'object') {\n    return formatGoRequestObjectValue(key, value, context)\n  }\n\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n\nconst formatGoRequestArrayValue = (\n  key: string,\n  value: Json[],\n  context: GoContext,\n): string => {\n  if (value.length === 0) {\n    // in Go there's no way define an empty array without specifying type\n    // and code samples definitions don't include the type annotations\n    return 'nil'\n  }\n\n  const formattedItems = value.map((v) =>\n    formatGoRequestArgValue(key, v, context),\n  )\n  const item = value[0]\n  if (item == null) {\n    throw new Error(`Null value in response array for '${key}'`)\n  }\n\n  const { goPackageName, requestStructName } = context\n\n  const arrayType = isPrimitiveValue(item)\n    ? getPrimitiveTypeName(item)\n    : `${goPackageName}.${pascalCase(`${requestStructName} ${key}`)}Item`\n\n  return `[${value.length}]${arrayType}{${formattedItems.join(', ')}}`\n}\n\nconst isPrimitiveValue = (value: Json): value is string | number | boolean =>\n  typeof value !== 'object' && value !== null\n\nconst getPrimitiveTypeName = (value: string | number | boolean): string => {\n  switch (typeof value) {\n    case 'string':\n      return 'string'\n    case 'number':\n      return 'float64'\n    case 'boolean':\n      return 'bool'\n  }\n}\n\nconst formatGoRequestObjectValue = (\n  key: string,\n  value: Record<string, Json>,\n  context: GoContext,\n): string => {\n  if (Object.keys(value).length === 0) {\n    return 'struct{}{}'\n  }\n\n  const formattedEntries = Object.entries(value)\n    .map(\n      ([objKey, val]) =>\n        `${pascalCase(objKey)}: ${formatGoRequestArgValue(objKey, val, context)}`,\n    )\n    .join(', ')\n\n  const { goPackageName, requestStructName } = context\n\n  return `${goPackageName}.${pascalCase(`${requestStructName} ${key}`)}{${formattedEntries}}`\n}\n\nexport const createGoResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n\n  if (endpoint.response.responseType === 'void') return 'nil'\n\n  const { responseKey, resourceType } = endpoint.response\n  const responseValue = response?.body?.[responseKey]\n\n  if (responseValue == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n\n  const responseResourceGoStructName = pascalCase(resourceType)\n\n  return Array.isArray(responseValue)\n    ? formatGoArrayResponse(responseValue, responseResourceGoStructName, title)\n    : formatGoResponse(responseValue, responseResourceGoStructName)\n}\n\nconst formatGoArrayResponse = (\n  responseArray: Json[],\n  responseResourceGoStructName: string,\n  title: string,\n): string => {\n  const formattedItems = responseArray\n    .map((v) => {\n      if (v == null) {\n        throw new Error(`Null value in response array for '${title}'`)\n      }\n      return formatGoResponse(v, responseResourceGoStructName)\n    })\n    .join(', ')\n\n  return `[]${defaultGoPackageName}.${responseResourceGoStructName}{${formattedItems}}`\n}\n\nconst formatGoResponse = (\n  responseParams: NonNullJson,\n  responseResourceGoStructName: string,\n): string => {\n  const params = formatGoResponseParams(\n    responseParams,\n    responseResourceGoStructName,\n  )\n  return `${defaultGoPackageName}.${responseResourceGoStructName}{${params}}`\n}\n\nconst formatGoResponseParams = (\n  jsonParams: NonNullJson,\n  responseResourceGoStructName: string,\n): string =>\n  Object.entries(jsonParams as Record<string, Json>)\n    .map(([paramKey, paramValue]) => {\n      const formattedValue = formatGoResponseParamValue(\n        {\n          key: paramKey,\n          value: paramValue,\n          propertyChain: [],\n        },\n        responseResourceGoStructName,\n      )\n      return `${pascalCase(paramKey)}: ${formattedValue}`\n    })\n    .join(', ')\n\nconst formatGoResponseParamValue = (\n  {\n    key,\n    value,\n    propertyChain,\n  }: { key: string; value: Json; propertyChain: string[] },\n  responseResourceGoStructName: string,\n): string => {\n  if (value === null) return 'nil'\n  if (typeof value === 'boolean') return value.toString()\n  if (typeof value === 'number') return value.toString()\n  if (typeof value === 'string') return `\"${value}\"`\n\n  if (Array.isArray(value)) {\n    return formatGoResponseArrayValue(\n      { key, value, propertyChain },\n      responseResourceGoStructName,\n    )\n  }\n\n  if (typeof value === 'object') {\n    return formatGoResponseObjectValue(\n      { key, value, propertyChain },\n      responseResourceGoStructName,\n    )\n  }\n\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n\nconst formatGoResponseArrayValue = (\n  {\n    key,\n    value,\n    propertyChain,\n  }: { key: string; value: Json[]; propertyChain: string[] },\n  responseResourceGoStructName: string,\n): string => {\n  if (value.length === 0) {\n    return 'nil'\n  }\n\n  const rawItem = value[0]\n  if (rawItem == null) {\n    throw new Error(`Null value in response array for '${key}'`)\n  }\n\n  const updatedPropertyChain = [...propertyChain, key]\n\n  const formattedItems = value.map((v) =>\n    formatGoResponseParamValue(\n      { key, value: v, propertyChain: updatedPropertyChain },\n      responseResourceGoStructName,\n    ),\n  )\n\n  if (isPrimitiveValue(rawItem)) {\n    const arrayType = getPrimitiveTypeName(rawItem)\n\n    return `[]${arrayType}{${formattedItems.join(', ')}}`\n  } else {\n    const structName = getStructName(\n      updatedPropertyChain,\n      responseResourceGoStructName,\n    )\n\n    return `[]${structName}{${formattedItems.join(', ')}}`\n  }\n}\n\nconst formatGoResponseObjectValue = (\n  {\n    key,\n    value,\n    propertyChain,\n  }: { key: string; value: Record<string, Json>; propertyChain: string[] },\n  responseResourceGoStructName: string,\n): string => {\n  if (Object.keys(value).length === 0) {\n    return 'struct{}{}'\n  }\n\n  const updatedPropertyChain = [...propertyChain, key]\n  const structName = getStructName(\n    updatedPropertyChain,\n    responseResourceGoStructName,\n  )\n\n  const formattedEntries = Object.entries(value)\n    .map(([objKey, val]) => {\n      const formattedValue = formatGoResponseParamValue(\n        {\n          key: objKey,\n          value: val,\n          propertyChain: updatedPropertyChain,\n        },\n        responseResourceGoStructName,\n      )\n      return `${pascalCase(objKey)}: ${formattedValue}`\n    })\n    .join(', ')\n\n  return `${defaultGoPackageName}.${structName}{${formattedEntries}}`\n}\n\nconst getStructName = (\n  propertyChain: string[],\n  responseResourceGoStructName: string,\n): string => {\n  const fullPropertyChain = [responseResourceGoStructName, ...propertyChain]\n  return pascalCase(fullPropertyChain.join('_'))\n}\n","import { camelCase, pascalCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport { createJsonResponse } from './json.js'\n\ninterface JavaRequestBuilderOptions {\n  path: string\n  parameters: NonNullJson\n}\n\nexport const createJavaRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const pathParts = request.path.split('/').slice(1)\n  const requestBuilderOptions: JavaRequestBuilderOptions = {\n    path: request.path,\n    parameters: request.parameters,\n  }\n  const clientArgs = createJavaRequestBuilder(requestBuilderOptions)\n\n  return `seam.${pathParts.map((p) => camelCase(p)).join('().')}(${clientArgs});`\n}\n\nconst createJavaRequestBuilder = ({\n  path,\n  parameters,\n}: JavaRequestBuilderOptions): string => {\n  const requestBuilderName = getRequestBuilderName(path)\n  const isReqWithParams = Object.keys(parameters).length !== 0\n\n  if (!isReqWithParams) return ''\n\n  const formattedParams = formatJavaArgs(parameters)\n  return `${requestBuilderName}.builder()${formattedParams}.build()`\n}\n\nconst getRequestBuilderName = (path: string): string => {\n  const requestBuilderNameSuffix = 'Request'\n  const pathParts = path.split('/').slice(1)\n\n  return isPathNested(pathParts)\n    ? `${pascalCase(pathParts.slice(1).join('_'))}${requestBuilderNameSuffix}`\n    : `${pascalCase(path)}${requestBuilderNameSuffix}`\n}\n\nconst isPathNested = (pathParts: string[]): boolean => pathParts.length > 2\n\nconst formatJavaArgs = (jsonParams: NonNullJson): string =>\n  Object.entries(jsonParams as Record<string, Json>)\n    .map(([paramKey, paramValue]) => {\n      const formattedValue = formatJavaValue(paramValue)\n      return `.${camelCase(paramKey)}(${formattedValue})`\n    })\n    .join('\\n')\n\nconst formatJavaValue = (value: Json): string => {\n  if (value === null) return 'null'\n  if (typeof value === 'boolean') return value.toString()\n  if (typeof value === 'number') return value.toString()\n  if (typeof value === 'string') return `\"${value}\"`\n  if (Array.isArray(value)) {\n    const formattedItems = value.map(formatJavaValue).join(', ')\n    return `List.of(${formattedItems})`\n  }\n  if (typeof value === 'object') {\n    const formattedEntries = Object.entries(value)\n      .map(([key, val]) => `\"${key}\", ${formatJavaValue(val)}`)\n      .join(', ')\n    return `Map.of(${formattedEntries})`\n  }\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n\nexport const createJavaResponse = createJsonResponse\n","import { camelCase } from 'change-case'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport { createJsonResponse } from './json.js'\n\nexport const createJavascriptRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const isWithoutParams = Object.keys(request.parameters).length === 0\n  const formattedParams = isWithoutParams\n    ? ''\n    : JSON.stringify(request.parameters)\n\n  return `await seam${parts.map((p) => camelCase(p)).join('.')}(${formattedParams})`\n}\n\nexport const createJavascriptResponse = createJsonResponse\n","import { snakeCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nexport const createPhpRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const requestParams = Object.entries(request.parameters)\n    .map(([key, value]) => `${key}: ${formatPhpValue(value)}`)\n    .join(',')\n\n  return `<?php\\n$seam${parts.map((p) => snakeCase(p)).join('->')}(${requestParams})`\n}\n\nexport const createPhpResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n\n  if (endpoint.response.responseType === 'void') return 'null'\n\n  const { responseKey } = endpoint.response\n  const responseValue = response?.body?.[responseKey]\n\n  if (responseValue == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n\n  const formattedResponse = Array.isArray(responseValue)\n    ? formatPhpArrayResponse(responseValue, title)\n    : formatPhpResponse(responseValue)\n\n  return `<?php\\n${formattedResponse}`\n}\n\nconst formatPhpArrayResponse = (\n  responseArray: Json[],\n  title: string,\n): string => {\n  const formattedItems = responseArray\n    .map((item) => {\n      if (item == null) {\n        throw new Error(`Null value in response array for '${title}'`)\n      }\n      return formatPhpResponse(item)\n    })\n    .join(',\\n')\n\n  return `[${formattedItems}]`\n}\n\nconst formatPhpResponse = (responseParams: NonNullJson): string => {\n  const values = Object.entries(responseParams as Record<string, Json>).map(\n    ([paramKey, paramValue]) =>\n      `\"${snakeCase(paramKey)}\" => ${formatPhpValue(paramValue)}`,\n  )\n  return `[${values.join(',')}]`\n}\n\nconst formatPhpValue = (value: Json): string => {\n  if (value == null) return 'null'\n  if (typeof value === 'boolean') return value ? 'true' : 'false'\n  if (typeof value === 'number') return value.toString()\n  if (typeof value === 'string') return `\"${value}\"`\n  if (Array.isArray(value)) {\n    const formattedItems = value.map(formatPhpValue).join(', ')\n    return `[${formattedItems}]`\n  }\n  if (typeof value === 'object') {\n    const formattedEntries = Object.entries(value)\n      .map(([key, val]) => `\"${snakeCase(key)}\" => ${formatPhpValue(val)}`)\n      .join(', ')\n    return `[${formattedEntries}]`\n  }\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n","import { pascalCase, snakeCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nconst responseKeyToPythonResourceNameMap: Readonly<Record<string, string>> = {\n  event: 'SeamEvent',\n}\n\nexport const createPythonRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const params = formatPythonArgs(request.parameters)\n\n  return `seam${parts.map((p) => snakeCase(p)).join('.')}(${params})`\n}\n\nconst formatPythonArgs = (jsonParams: NonNullJson): string =>\n  Object.entries(jsonParams)\n    .map(([paramKey, paramValue]) => {\n      const formattedValue =\n        paramValue == null ? 'None' : JSON.stringify(paramValue)\n\n      return `${snakeCase(paramKey)}=${formattedValue}`\n    })\n    .join(', ')\n\nexport const createPythonResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n\n  if (endpoint.response.responseType === 'void') return 'None'\n\n  const { responseKey, resourceType } = endpoint.response\n  const responseValue = response?.body?.[responseKey]\n\n  if (responseValue == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n\n  const responsePythonClassName = pascalCase(\n    responseKeyToPythonResourceNameMap[resourceType] ?? resourceType,\n  )\n\n  return Array.isArray(responseValue)\n    ? formatPythonArrayResponse(responseValue, responsePythonClassName, title)\n    : formatPythonResponse(responseValue, responsePythonClassName)\n}\n\nconst formatPythonArrayResponse = (\n  responseArray: Json[],\n  responsePythonClassName: string,\n  title: string,\n): string => {\n  const formattedItems = responseArray\n    .map((v) => {\n      if (v == null) {\n        throw new Error(`Null value in response array for '${title}'`)\n      }\n      return formatPythonResponse(v, responsePythonClassName)\n    })\n    .join(', ')\n\n  return `[${formattedItems}]`\n}\n\nconst formatPythonResponse = (\n  responseParams: NonNullJson,\n  responsePythonClassName: string,\n): string => {\n  const params = formatPythonArgs(responseParams)\n  return `${responsePythonClassName}(${params})`\n}\n","import { snakeCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nexport const createRubyRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const params = Object.entries(request.parameters)\n    .map(([key, value]) => `${snakeCase(key)}: ${formatRubyValue(value)}`)\n    .join(', ')\n\n  return `seam${parts.map((p) => snakeCase(p)).join('.')}(${params})`\n}\n\nconst formatRubyValue = (value: Json): string =>\n  value == null ? 'nil' : JSON.stringify(value)\n\nexport const createRubyResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n\n  if (endpoint.response.responseType === 'void') return 'nil'\n\n  const { responseKey } = endpoint.response\n  const responseValue = response?.body?.[responseKey]\n\n  if (responseValue == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n\n  return Array.isArray(responseValue)\n    ? formatRubyArrayResponse(responseValue, title)\n    : formatRubyResponse(responseValue)\n}\n\nconst formatRubyArrayResponse = (\n  responseArray: Json[],\n  title: string,\n): string => {\n  const formattedItems = responseArray\n    .map((item) => {\n      if (item == null) {\n        throw new Error(`Null value in response array for '${title}'`)\n      }\n      return formatRubyResponse(item)\n    })\n    .join(',\\n')\n\n  return `[${formattedItems}]`\n}\n\nconst formatRubyResponse = (responseParams: NonNullJson): string => {\n  const values = Object.entries(responseParams as Record<string, Json>).map(\n    ([paramKey, paramValue]) =>\n      `\"${snakeCase(paramKey)}\" => ${formatRubyValue(paramValue)}`,\n  )\n  return `{${values.join(',')}}`\n}\n","import { kebabCase } from 'change-case'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport { createJsonResourceData, createJsonResponse } from './json.js'\n\nexport const createSeamCliRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const requestParams = Object.entries(request.parameters)\n    .map(([key, value]) => `--${key} ${JSON.stringify(value)}`)\n    .join(' ')\n\n  return `seam${parts.map((p) => kebabCase(p)).join(' ')} ${requestParams}`\n}\n\nexport const createSeamCliResponse = createJsonResponse\n\nexport const createSeamCliResourceData = createJsonResourceData\n","import { z } from 'zod'\n\nexport const SdkNameSchema = z.enum([\n  'javascript',\n  'python',\n  'php',\n  'ruby',\n  'seam_cli',\n  'go',\n  'java',\n  'csharp',\n  'curl',\n])\n\nexport const SyntaxNameSchema = z.enum([\n  'javascript',\n  'json',\n  'python',\n  'php',\n  'ruby',\n  'bash',\n  'go',\n  'java',\n  'csharp',\n])\n\nexport type SyntaxName = z.infer<typeof SyntaxNameSchema>\n\nexport type SdkName = z.infer<typeof SdkNameSchema>\n","import { z, type ZodSchema } from 'zod'\n\nimport type { Resource as BlueprintResource } from 'lib/blueprint.js'\nimport { JsonSchema } from 'lib/json.js'\n\nimport { formatResourceRecords } from './format.js'\nimport { createSeamCliResourceData } from './seam-cli.js'\nimport { SdkNameSchema, type SyntaxName, SyntaxNameSchema } from './syntax.js'\n\nexport const ResourceSampleDefinitionSchema = z.object({\n  title: z.string().trim().min(1),\n  description: z.string().trim().min(1),\n  resource_type: z.string().trim().min(1),\n  properties: z.record(z.string().min(1), JsonSchema),\n})\n\nexport type ResourceSampleDefinitionInput = z.input<\n  typeof ResourceSampleDefinitionSchema\n>\n\nexport type ResourceSampleDefinition = z.output<\n  typeof ResourceSampleDefinitionSchema\n>\n\nexport interface ResourceSampleContext {\n  resource: Omit<BlueprintResource, 'resourceSamples'>\n  schemas: Record<string, unknown>\n  formatCode: (content: string, syntax: SyntaxName) => Promise<string>\n}\n\nconst ResourceSchema = z.record(\n  SdkNameSchema,\n  z.object({\n    title: z.string().min(1),\n    resource_data: z.string(),\n    resource_data_syntax: SyntaxNameSchema,\n  }),\n)\n\nexport type Resource = z.infer<typeof ResourceSchema>\n\nconst ResourceSampleSchema = ResourceSampleDefinitionSchema.extend({\n  resource: ResourceSchema,\n})\n\nexport type ResourceSample = z.output<typeof ResourceSampleSchema>\n\nexport const createResourceSample = async (\n  resourceSampleDefinition: ResourceSampleDefinition,\n  context: ResourceSampleContext,\n): Promise<ResourceSample> => {\n  const resourceType = resourceSampleDefinition.resource_type\n  const schema = toPartialZodSchema(context.schemas[resourceType])\n  if (schema != null) {\n    const { success, error } = schema.safeParse(\n      resourceSampleDefinition.properties,\n    )\n    if (!success) {\n      throw new Error(\n        `Invalid properties for resource sample definition of type '${resourceType}': ${error.message}`,\n      )\n    }\n  } else {\n    // eslint-disable-next-line no-console\n    console.warn(`Missing Zod schema for resource ${resourceType}.`)\n  }\n\n  const resource: Resource = {\n    seam_cli: {\n      title: 'Seam CLI',\n      resource_data: createSeamCliResourceData(\n        resourceSampleDefinition,\n        context,\n      ),\n      resource_data_syntax: 'json',\n    },\n  }\n\n  return {\n    ...resourceSampleDefinition,\n    resource: await formatResourceRecords(resource, context),\n  }\n}\n\nconst toPartialZodSchema = (input: unknown): ZodSchema | null => {\n  if (typeof input !== 'object') return null\n  if (input == null) return null\n  if ('deepPartial' in input) return input as unknown as ZodSchema\n  return null\n}\n","import type { KnownOpenapiAuthMethod } from './openapi/types.js'\n\nexport type SeamWorkspaceScope = 'none' | 'optional' | 'required'\n\nexport type SeamAuthMethod =\n  | 'api_key'\n  | 'personal_access_token'\n  | 'console_session_token'\n  | 'client_session_token'\n  | 'publishable_key'\n\nexport const mapOpenapiToSeamAuthMethod = (\n  method: string,\n): SeamAuthMethod | undefined => {\n  const AUTH_METHOD_MAPPING: Record<KnownOpenapiAuthMethod, SeamAuthMethod> = {\n    api_key: 'api_key',\n    pat_with_workspace: 'personal_access_token',\n    pat_without_workspace: 'personal_access_token',\n    console_session_token_with_workspace: 'console_session_token',\n    console_session_token_without_workspace: 'console_session_token',\n    client_session: 'client_session_token',\n    publishable_key: 'publishable_key',\n  } as const\n\n  return AUTH_METHOD_MAPPING[method as KnownOpenapiAuthMethod]\n}\n"]}