Skip to content

Commit

Permalink
fix: subpackages should recursively expand its children (#3875)
Browse files Browse the repository at this point in the history
fix: subpackages should recursively expand its children in step 2
  • Loading branch information
abvthecity authored Jun 18, 2024
1 parent 026e796 commit f459d03
Show file tree
Hide file tree
Showing 13 changed files with 183 additions and 42 deletions.
20 changes: 10 additions & 10 deletions .pnp.cjs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.
2 changes: 1 addition & 1 deletion packages/cli/configuration/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
},
"dependencies": {
"@fern-api/core-utils": "workspace:*",
"@fern-api/fdr-sdk": "0.98.0-rc1",
"@fern-api/fdr-sdk": "0.98.2-d590e2c8a",
"@fern-api/fs-utils": "workspace:*",
"@fern-api/task-context": "workspace:*",
"@fern-fern/fiddle-sdk": "^0.0.552",
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/docs-preview/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
},
"dependencies": {
"@fern-api/docs-resolver": "workspace:*",
"@fern-api/fdr-sdk": "0.98.0-rc1",
"@fern-api/fdr-sdk": "0.98.2-d590e2c8a",
"@fern-api/fs-utils": "workspace:*",
"@fern-api/ir-sdk": "workspace:*",
"@fern-api/logger": "workspace:*",
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/docs-resolver/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"dependencies": {
"@fern-api/configuration": "workspace:*",
"@fern-api/core-utils": "workspace:*",
"@fern-api/fdr-sdk": "0.98.0-rc1",
"@fern-api/fdr-sdk": "0.98.2-d590e2c8a",
"@fern-api/fs-utils": "workspace:*",
"@fern-api/ir-generator": "workspace:*",
"@fern-api/ir-sdk": "workspace:*",
Expand Down
27 changes: 15 additions & 12 deletions packages/cli/docs-resolver/src/ApiReferenceNodeConverter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export class ApiReferenceNodeConverter {

// Step 2. Fill in the any missing navigation items from the API definition
this.#children = this.#mergeAndFilterChildren(
this.#children.map((child) => this.#convertApiPackageChild(child, this.#slug)),
this.#children.map((child) => this.#enrichApiPackageChild(child)),
this.#convertApiDefinitionPackage(this.#holder.api.rootPackage, this.#slug)
);
}
Expand Down Expand Up @@ -363,6 +363,8 @@ export class ApiReferenceNodeConverter {
this.taskContext.logger.error(`Duplicate endpoint found in the API Reference layout: ${endpointId}`);
}
this.#visitedEndpoints.add(endpointId);
const endpointSlug =
endpointItem.slug != null ? parentSlug.append(endpointItem.slug) : parentSlug.apply(endpoint);
return {
id: idgen.append(endpoint.id).get(),
type: "endpoint",
Expand All @@ -372,10 +374,7 @@ export class ApiReferenceNodeConverter {
availability: FernNavigation.utils.convertAvailability(endpoint.availability),
isResponseStream: endpoint.response?.type.type === "stream",
title: endpointItem.title ?? endpoint.name ?? stringifyEndpointPathParts(endpoint.path.parts),
slug: (endpointItem.slug != null
? parentSlug.append(endpointItem.slug)
: parentSlug.apply(endpoint)
).get(),
slug: endpointSlug.get(),
icon: endpointItem.icon,
hidden: endpointItem.hidden
};
Expand Down Expand Up @@ -458,18 +457,20 @@ export class ApiReferenceNodeConverter {
);
}

#convertApiPackageChild(
child: FernNavigation.ApiPackageChild,
parentSlug: FernNavigation.SlugGenerator
): FernNavigation.ApiPackageChild {
#enrichApiPackageChild(child: FernNavigation.ApiPackageChild): FernNavigation.ApiPackageChild {
if (child.type === "apiPackage") {
const slug = parentSlug.set(child.slug);
// expand the subpackage to include children that haven't been visited yet
const slug = FernNavigation.SlugGenerator.init(child.slug);
const subpackageIds = this.#nodeIdToSubpackageId.get(child.id) ?? [];
const subpackageChildren = subpackageIds.flatMap((subpackageId) =>
this.#convertApiDefinitionPackageId(subpackageId, slug)
);

const children = this.#mergeAndFilterChildren(child.children, subpackageChildren);
// recursively apply enrichment to children
const enrichedChildren = child.children.map((innerChild) => this.#enrichApiPackageChild(innerChild));

// combine children with subpackage (tacked on at the end to preserve order)
const children = this.#mergeAndFilterChildren(enrichedChildren, subpackageChildren);

return {
...child,
Expand All @@ -495,6 +496,8 @@ export class ApiReferenceNodeConverter {
if (this.#visitedEndpoints.has(endpointId)) {
return;
}

const endpointSlug = parentSlug.apply(endpoint);
additionalChildren.push({
id: FernNavigation.NodeId(`${this.apiDefinitionId}:${endpointId}`),
type: "endpoint",
Expand All @@ -504,7 +507,7 @@ export class ApiReferenceNodeConverter {
availability: FernNavigation.utils.convertAvailability(endpoint.availability),
isResponseStream: endpoint.response?.type.type === "stream",
title: endpoint.name ?? stringifyEndpointPathParts(endpoint.path.parts),
slug: parentSlug.apply(endpoint).get(),
slug: endpointSlug.get(),
icon: undefined,
hidden: undefined
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,72 @@ exports[`converts to api reference node 1`] = `
"apiDefinitionId": "550e8400-e29b-41d4-a716-446655440000",
"availability": undefined,
"children": [
{
"apiDefinitionId": "550e8400-e29b-41d4-a716-446655440000",
"availability": undefined,
"children": [
{
"apiDefinitionId": "550e8400-e29b-41d4-a716-446655440000",
"availability": undefined,
"endpointId": "endpoint_trailers.createTrailer",
"hidden": undefined,
"icon": undefined,
"id": "550e8400-e29b-41d4-a716-446655440000:endpoint_trailers.createTrailer",
"isResponseStream": false,
"method": "POST",
"slug": "base/path/api-reference/imdb/trailers/create-trailer",
"title": "Create Trailer",
"type": "endpoint",
},
{
"apiDefinitionId": "550e8400-e29b-41d4-a716-446655440000",
"availability": undefined,
"endpointId": "endpoint_trailers.getTrailer",
"hidden": undefined,
"icon": undefined,
"id": "550e8400-e29b-41d4-a716-446655440000:endpoint_trailers.getTrailer",
"isResponseStream": false,
"method": "GET",
"slug": "base/path/api-reference/imdb/trailers/get-trailer",
"title": "Get Trailer",
"type": "endpoint",
},
{
"apiDefinitionId": "550e8400-e29b-41d4-a716-446655440000",
"availability": undefined,
"endpointId": "endpoint_trailers.getTrailerForMovie",
"hidden": undefined,
"icon": undefined,
"id": "550e8400-e29b-41d4-a716-446655440000:endpoint_trailers.getTrailerForMovie",
"isResponseStream": false,
"method": "GET",
"slug": "base/path/api-reference/imdb/trailers/get-trailer-for-movie",
"title": "Get Trailer For Movie",
"type": "endpoint",
},
{
"apiDefinitionId": "550e8400-e29b-41d4-a716-446655440000",
"availability": undefined,
"endpointId": "endpoint_trailers.deleteTrailer",
"hidden": undefined,
"icon": undefined,
"id": "550e8400-e29b-41d4-a716-446655440000:endpoint_trailers.deleteTrailer",
"isResponseStream": false,
"method": "DELETE",
"slug": "base/path/api-reference/imdb/trailers/delete-trailer",
"title": "Delete Trailer",
"type": "endpoint",
},
],
"hidden": undefined,
"icon": undefined,
"id": "550e8400-e29b-41d4-a716-446655440000.subpackage_imdb.subpackage_trailers",
"overviewPageId": undefined,
"pointsTo": "base/path/api-reference/imdb/trailers/create-trailer",
"slug": "base/path/api-reference/imdb/trailers",
"title": "Trailers",
"type": "apiPackage",
},
{
"apiDefinitionId": "550e8400-e29b-41d4-a716-446655440000",
"availability": undefined,
Expand All @@ -66,9 +132,9 @@ exports[`converts to api reference node 1`] = `
],
"hidden": undefined,
"icon": undefined,
"id": "550e8400-e29b-41d4-a716-446655440000:subpackage_imdb",
"id": "550e8400-e29b-41d4-a716-446655440000.subpackage_imdb",
"overviewPageId": undefined,
"pointsTo": "base/path/api-reference/imdb/create-movie",
"pointsTo": "base/path/api-reference/imdb/trailers/create-trailer",
"slug": "base/path/api-reference/imdb",
"title": "Imdb",
"type": "apiPackage",
Expand Down Expand Up @@ -173,12 +239,27 @@ exports[`converts to api reference node: endpointsByLocator keys 1`] = `
"GET /movies/:id",
"DELETE /movies/{id}",
"DELETE /movies/:id",
"POST /trailers/create",
"GET /trailers/{id}",
"GET /trailers/:id",
"GET /trailers/movie/{id}",
"GET /trailers/movie/:id",
"DELETE /trailers/{id}",
"DELETE /trailers/:id",
"imdb.createMovie",
"imdb/createMovie",
"imdb.getMovie",
"imdb/getMovie",
"imdb.deleteMovie",
"imdb/deleteMovie",
"trailers.createTrailer",
"trailers/createTrailer",
"trailers.getTrailer",
"trailers/getTrailer",
"trailers.getTrailerForMovie",
"trailers/getTrailerForMovie",
"trailers.deleteTrailer",
"trailers/deleteTrailer",
]
`;

Expand Down Expand Up @@ -326,5 +407,7 @@ exports[`converts to api reference node: subpackagesByLocator keys 1`] = `
"__package__.yml",
"imdb",
"imdb.yml",
"trailers",
"trailers.yml",
]
`;
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json

imports:
imdb: ./imdb.yml

service:
auth: false
base-path: /trailers
endpoints:
createTrailer:
method: POST
path: /create
request: CreateTrailerRequest
response: TrailerId

getTrailer:
method: GET
path: /{id}
path-parameters:
id: TrailerId
response: Trailer

getTrailerForMovie:
method: GET
path: /movie/{id}
path-parameters:
id: imdb.MovieId
response: list<Trailer>

deleteTrailer:
method: DELETE
path: /{id}
path-parameters:
id: TrailerId

types:
TrailerId:
type: string
docs: The unique identifier for a trailer in the database

CreateTrailerRequest:
properties:
id: TrailerId
movieId: imdb.MovieId
title: string
url: string

Trailer:
properties:
movieId: imdb.MovieId
title: string
url: string
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ navigation:
contents:
- DELETE /movies/{id}
- GET /movies/{id}
- imdb:
contents:
- trailers
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"@fern-api/core": "workspace:*",
"@fern-api/core-utils": "workspace:*",
"@fern-api/docs-resolver": "workspace:*",
"@fern-api/fdr-sdk": "0.98.0-rc1",
"@fern-api/fdr-sdk": "0.98.2-d590e2c8a",
"@fern-api/fs-utils": "workspace:*",
"@fern-api/ir-generator": "workspace:*",
"@fern-api/ir-migrations": "workspace:*",
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/register/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"@fern-api/configuration": "workspace:*",
"@fern-api/core": "workspace:*",
"@fern-api/core-utils": "workspace:*",
"@fern-api/fdr-sdk": "0.98.0-rc1",
"@fern-api/fdr-sdk": "0.98.2-d590e2c8a",
"@fern-api/ir-generator": "workspace:*",
"@fern-api/ir-sdk": "workspace:*",
"@fern-api/task-context": "workspace:*",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"depcheck": "depcheck"
},
"dependencies": {
"@fern-api/fdr-sdk": "0.98.0-rc1",
"@fern-api/fdr-sdk": "0.98.2-d590e2c8a",
"@fern-api/venus-api-sdk": "0.0.38",
"@fern-fern/fdr-test-sdk": "^0.0.5297",
"@fern-fern/fiddle-sdk": "^0.0.552"
Expand Down
Loading

0 comments on commit f459d03

Please sign in to comment.