Skip to content

Commit

Permalink
feat: add new api docs for hcp identity (#2589)
Browse files Browse the repository at this point in the history
  • Loading branch information
LeahMarieBush authored Oct 18, 2024
1 parent bdf546b commit 2898133
Showing 1 changed file with 110 additions and 0 deletions.
110 changes: 110 additions & 0 deletions src/pages/hcp/api-docs/identity/[[...page]].tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/

// Lib
import { fetchCloudApiVersionData } from 'lib/api-docs/fetch-cloud-api-version-data'
// View
import OpenApiDocsView from 'views/open-api-docs-view'
import {
getStaticPaths,
getStaticProps as getOpenApiDocsStaticProps,
} from 'views/open-api-docs-view/server'
// Types
import type { GetStaticProps, GetStaticPropsContext } from 'next'
import type { OpenAPIV3 } from 'openapi-types'
import type {
OpenApiDocsParams,
OpenApiDocsViewProps,
OpenApiDocsPageConfig,
} from 'views/open-api-docs-view/types'
import {
schemaModComponent,
shortenProtobufAnyDescription,
} from 'views/open-api-docs-view/utils/massage-schema-utils'

/**
* OpenApiDocsView server-side page configuration
*/
const PAGE_CONFIG: OpenApiDocsPageConfig = {
productSlug: 'hcp',
serviceProductSlug: 'hcp',
basePath: '/hcp/api-docs/identity',
githubSourceDirectory: {
owner: 'hashicorp',
repo: 'hcp-specs',
path: 'specs/cloud-iam',
ref: 'main',
},
groupOperationsByPath: true,
navResourceItems: [
{
title: 'Tutorial Library',
href: '/tutorials/library?edition=hcp',
},
{
title: 'Community',
href: 'https://discuss.hashicorp.com/',
},
{
title: 'Support',
href: 'https://www.hashicorp.com/customer-success',
},
],

/**
* Massage the schema data a little bit
*/
massageSchemaForClient: (schemaData: OpenAPIV3.Document) => {
/**
* Shorten the description of the protobufAny schema
*
* Note: ideally this would be done at the content source,
* but until we've got that work done, this shortening
* seems necessary to ensure incremental static regeneration works
* for past versions of the API docs. Without this shortening,
* it seems the response size ends up crossing a threshold that
* causes the serverless function that renders the page to fail.
*
* Related task:
* https://app.asana.com/0/1207339219333499/1207339701271604/f
*/
const withShortProtobufDocs = schemaModComponent(
schemaData,
'google.protobuf.Any',
shortenProtobufAnyDescription
)
// Return the schema data with modifications
return withShortProtobufDocs
},
}

/**
* Get static paths, using `versionData` fetched from GitHub.
*/
export { getStaticPaths }

/**
* Get static props, using `versionData` fetched from GitHub.
*
* We need all version data for the version selector,
* and of course we need specific data for the current version.
*/
export const getStaticProps: GetStaticProps<
OpenApiDocsViewProps,
OpenApiDocsParams
> = async ({ params }: GetStaticPropsContext<OpenApiDocsParams>) => {
// Fetch all version data, based on remote `stable` & `preview` subfolders
const versionData = await fetchCloudApiVersionData(
PAGE_CONFIG.githubSourceDirectory
)
// Generate static props based on page configuration, params, and versionData
return await getOpenApiDocsStaticProps({
...PAGE_CONFIG,
context: { params },
versionData,
})
}

export default OpenApiDocsView

0 comments on commit 2898133

Please sign in to comment.