@fern-api/fdr-sdk 1.2.38-cc77d6a840 → 1.2.39-4f09cc17dc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/js/client/FdrClient.js +27 -7
- package/dist/js/client/FdrClient.js.map +1 -1
- package/dist/js/client/FdrClient.mjs +27 -7
- package/dist/js/client/FdrClient.mjs.map +1 -1
- package/dist/js/index.js +27 -7
- package/dist/js/index.js.map +1 -1
- package/dist/js/index.mjs +27 -7
- package/dist/js/index.mjs.map +1 -1
- package/dist/js/navigation/ledger-root-builder.js +273 -33
- package/dist/js/navigation/ledger-root-builder.js.map +1 -1
- package/dist/js/navigation/ledger-root-builder.mjs +273 -33
- package/dist/js/navigation/ledger-root-builder.mjs.map +1 -1
- package/dist/js/orpc-client.js +29 -7
- package/dist/js/orpc-client.js.map +1 -1
- package/dist/js/orpc-client.mjs +29 -7
- package/dist/js/orpc-client.mjs.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/navigation/__test__/ledger-root-builder.unversionedPointsTo.test.d.ts +2 -0
- package/dist/types/navigation/__test__/ledger-root-builder.unversionedPointsTo.test.d.ts.map +1 -0
- package/dist/types/navigation/ledger-root-builder.d.ts.map +1 -1
- package/dist/types/orpc-client/docs-ledger/contract.d.ts +2140 -170
- package/dist/types/orpc-client/docs-ledger/contract.d.ts.map +1 -1
- package/dist/types/orpc-client/docs-ledger/ledger-manifest.d.ts +3444 -104
- package/dist/types/orpc-client/docs-ledger/ledger-manifest.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -94,6 +94,9 @@ var AuthSchemeIdSchema = z2.string();
|
|
|
94
94
|
var SubpackageIdSchema = z2.string();
|
|
95
95
|
var WebSocketMessageIdSchema = z2.string();
|
|
96
96
|
var FileIdSchema = z2.string();
|
|
97
|
+
function FileId(value) {
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
97
100
|
var MultipleAuthTypeSchema = z2.object({
|
|
98
101
|
schemes: z2.array(AuthSchemeIdSchema)
|
|
99
102
|
});
|
|
@@ -657,6 +660,77 @@ function getChildren(node) {
|
|
|
657
660
|
}
|
|
658
661
|
}
|
|
659
662
|
|
|
663
|
+
// ../commons/core-utils/dist/assertNever.js
|
|
664
|
+
function assertNever(x) {
|
|
665
|
+
throw new Error("Unexpected value: " + JSON.stringify(x));
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
// ../commons/core-utils/dist/visitDiscriminatedUnion.js
|
|
669
|
+
function visitDiscriminatedUnion(item, discriminant = "type") {
|
|
670
|
+
return {
|
|
671
|
+
_visit: (visitor) => {
|
|
672
|
+
const visit = visitor[item[discriminant]];
|
|
673
|
+
if (visit != null) {
|
|
674
|
+
return visit(item);
|
|
675
|
+
} else {
|
|
676
|
+
if (visitor._other == null) {
|
|
677
|
+
assertNever(item);
|
|
678
|
+
}
|
|
679
|
+
return visitor._other(item);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
var visitDiscriminatedUnion_default = visitDiscriminatedUnion;
|
|
685
|
+
|
|
686
|
+
// src/navigation/versions/latest/getPageId.ts
|
|
687
|
+
var RETURN_PAGEID = (node) => node.pageId;
|
|
688
|
+
var RETURN_OVERVIEW_PAGEID = (node) => node.overviewPageId;
|
|
689
|
+
var RETURN_UNDEFINED = () => void 0;
|
|
690
|
+
function getPageId(node) {
|
|
691
|
+
return visitDiscriminatedUnion_default(node)._visit({
|
|
692
|
+
section: RETURN_OVERVIEW_PAGEID,
|
|
693
|
+
apiReference: RETURN_OVERVIEW_PAGEID,
|
|
694
|
+
changelog: RETURN_OVERVIEW_PAGEID,
|
|
695
|
+
apiPackage: RETURN_OVERVIEW_PAGEID,
|
|
696
|
+
changelogEntry: RETURN_PAGEID,
|
|
697
|
+
page: RETURN_PAGEID,
|
|
698
|
+
landingPage: RETURN_PAGEID,
|
|
699
|
+
// if the following changes, make sure to update the algolia records generator
|
|
700
|
+
endpoint: RETURN_UNDEFINED,
|
|
701
|
+
webSocket: RETURN_UNDEFINED,
|
|
702
|
+
webhook: RETURN_UNDEFINED,
|
|
703
|
+
grpc: RETURN_UNDEFINED,
|
|
704
|
+
graphql: RETURN_UNDEFINED,
|
|
705
|
+
graphqlType: RETURN_UNDEFINED
|
|
706
|
+
// changelogYear: RETURN_UNDEFINED,
|
|
707
|
+
// changelogMonth: RETURN_UNDEFINED,
|
|
708
|
+
});
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
// src/navigation/versions/latest/NavigationNodeSection.ts
|
|
712
|
+
function isSection(node) {
|
|
713
|
+
return node.type === "section" || node.type === "apiReference" || node.type === "changelog" || node.type === "apiPackage";
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// src/navigation/versions/latest/NavigationNodeSectionOverview.ts
|
|
717
|
+
function isSectionOverview(node) {
|
|
718
|
+
return isSection(node) && node.overviewPageId != null;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
// src/navigation/versions/latest/NavigationNodeMarkdown.ts
|
|
722
|
+
function hasMarkdown(node) {
|
|
723
|
+
return isMarkdownLeaf(node) || isSectionOverview(node);
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
// src/navigation/versions/latest/NavigationNodePage.ts
|
|
727
|
+
function isPage(node) {
|
|
728
|
+
return isApiLeaf(node) || node.type === "changelog" || // TODO: Uncomment when changelog years and months are visitable
|
|
729
|
+
// node.type === "changelogYear" ||
|
|
730
|
+
// node.type === "changelogMonth" ||
|
|
731
|
+
hasMarkdown(node);
|
|
732
|
+
}
|
|
733
|
+
|
|
660
734
|
// src/navigation/versions/latest/NavigationNodeWithMetadata.ts
|
|
661
735
|
function hasMetadata(node) {
|
|
662
736
|
return typeof node.title === "string" && typeof node.slug === "string";
|
|
@@ -794,6 +868,13 @@ function metaStrArr(metadata, key) {
|
|
|
794
868
|
}
|
|
795
869
|
return void 0;
|
|
796
870
|
}
|
|
871
|
+
function metaFeatureFlags(metadata) {
|
|
872
|
+
if (metadata != null && typeof metadata === "object" && "featureFlags" in metadata) {
|
|
873
|
+
const v = metadata.featureFlags;
|
|
874
|
+
return Array.isArray(v) && v.length > 0 ? v : void 0;
|
|
875
|
+
}
|
|
876
|
+
return void 0;
|
|
877
|
+
}
|
|
797
878
|
function toViewers(viewers) {
|
|
798
879
|
if (viewers == null || viewers.length === 0) {
|
|
799
880
|
return void 0;
|
|
@@ -829,17 +910,17 @@ function scopeKey(seg) {
|
|
|
829
910
|
return [seg.product?.id ?? "", seg.version?.id ?? "", seg.variant?.id ?? "", seg.tab?.id ?? ""].join("|");
|
|
830
911
|
}
|
|
831
912
|
function withMetadataDefaults(base) {
|
|
832
|
-
const { viewers, ...rest } = base;
|
|
913
|
+
const { viewers, featureFlags, ...rest } = base;
|
|
833
914
|
return {
|
|
834
915
|
...rest,
|
|
835
916
|
canonicalSlug: void 0,
|
|
836
|
-
authed: void 0,
|
|
917
|
+
authed: base.authed === true ? true : void 0,
|
|
837
918
|
collapsed: void 0,
|
|
838
919
|
// Normalise empty arrays to undefined so unrestricted nodes don't add
|
|
839
920
|
// filter-level noise; a non-empty array engages the RBAC view gate.
|
|
840
921
|
viewers: viewers != null && viewers.length > 0 ? viewers : void 0,
|
|
841
|
-
orphaned: void 0,
|
|
842
|
-
featureFlags: void 0
|
|
922
|
+
orphaned: base.orphaned === true ? true : void 0,
|
|
923
|
+
featureFlags: featureFlags != null && featureFlags.length > 0 ? featureFlags : void 0
|
|
843
924
|
};
|
|
844
925
|
}
|
|
845
926
|
function artifactToNode(ctx, route) {
|
|
@@ -862,7 +943,10 @@ function artifactToNode(ctx, route) {
|
|
|
862
943
|
slug,
|
|
863
944
|
icon,
|
|
864
945
|
hidden: route.hidden,
|
|
865
|
-
|
|
946
|
+
authed: metaBool(md, "authed"),
|
|
947
|
+
viewers,
|
|
948
|
+
orphaned: metaBool(md, "orphaned"),
|
|
949
|
+
featureFlags: metaFeatureFlags(md)
|
|
866
950
|
}),
|
|
867
951
|
pageId: PageId(pageId),
|
|
868
952
|
noindex: metaBool(md, "noindex"),
|
|
@@ -878,7 +962,7 @@ function artifactToNode(ctx, route) {
|
|
|
878
962
|
title,
|
|
879
963
|
icon,
|
|
880
964
|
url: Url(metaStr(md, "url") ?? ""),
|
|
881
|
-
target:
|
|
965
|
+
target: metaStr(md, "target")
|
|
882
966
|
};
|
|
883
967
|
return node;
|
|
884
968
|
}
|
|
@@ -913,7 +997,10 @@ function apiLeafNodeFromNavRouteInternal(ctx, route, segmentApiDefinitionId2) {
|
|
|
913
997
|
slug,
|
|
914
998
|
icon,
|
|
915
999
|
hidden: route.hidden,
|
|
916
|
-
|
|
1000
|
+
authed: metaBool(md, "authed"),
|
|
1001
|
+
viewers,
|
|
1002
|
+
orphaned: metaBool(md, "orphaned"),
|
|
1003
|
+
featureFlags: metaFeatureFlags(md)
|
|
917
1004
|
});
|
|
918
1005
|
if (route.type === "rest") {
|
|
919
1006
|
const endpointId = metaStr(md, "endpointId");
|
|
@@ -928,7 +1015,7 @@ function apiLeafNodeFromNavRouteInternal(ctx, route, segmentApiDefinitionId2) {
|
|
|
928
1015
|
endpointId: EndpointId(endpointId),
|
|
929
1016
|
apiDefinitionId,
|
|
930
1017
|
isResponseStream: metaBool(md, "isResponseStream"),
|
|
931
|
-
availability:
|
|
1018
|
+
availability: metaStr(md, "availability"),
|
|
932
1019
|
playground: void 0
|
|
933
1020
|
};
|
|
934
1021
|
}
|
|
@@ -944,7 +1031,7 @@ function apiLeafNodeFromNavRouteInternal(ctx, route, segmentApiDefinitionId2) {
|
|
|
944
1031
|
method,
|
|
945
1032
|
webhookId: WebhookId(webhookId),
|
|
946
1033
|
apiDefinitionId,
|
|
947
|
-
availability:
|
|
1034
|
+
availability: metaStr(md, "availability")
|
|
948
1035
|
};
|
|
949
1036
|
}
|
|
950
1037
|
if (route.type === "asyncapi") {
|
|
@@ -957,7 +1044,7 @@ function apiLeafNodeFromNavRouteInternal(ctx, route, segmentApiDefinitionId2) {
|
|
|
957
1044
|
...meta,
|
|
958
1045
|
webSocketId: WebSocketId(webSocketId),
|
|
959
1046
|
apiDefinitionId,
|
|
960
|
-
availability:
|
|
1047
|
+
availability: metaStr(md, "availability"),
|
|
961
1048
|
playground: void 0
|
|
962
1049
|
};
|
|
963
1050
|
}
|
|
@@ -973,7 +1060,7 @@ function apiLeafNodeFromNavRouteInternal(ctx, route, segmentApiDefinitionId2) {
|
|
|
973
1060
|
method,
|
|
974
1061
|
grpcId: GrpcId(grpcId),
|
|
975
1062
|
apiDefinitionId,
|
|
976
|
-
availability:
|
|
1063
|
+
availability: metaStr(md, "availability")
|
|
977
1064
|
};
|
|
978
1065
|
}
|
|
979
1066
|
if (route.type === "graphql") {
|
|
@@ -989,7 +1076,7 @@ function apiLeafNodeFromNavRouteInternal(ctx, route, segmentApiDefinitionId2) {
|
|
|
989
1076
|
graphqlOperationId: GraphQlOperationId(graphqlOperationId),
|
|
990
1077
|
graphqlOperationIds: void 0,
|
|
991
1078
|
apiDefinitionId,
|
|
992
|
-
availability:
|
|
1079
|
+
availability: metaStr(md, "availability"),
|
|
993
1080
|
playground: void 0
|
|
994
1081
|
};
|
|
995
1082
|
}
|
|
@@ -1084,8 +1171,9 @@ function sectionNode(ctx, scoped, sectionChildren, scopePrefix) {
|
|
|
1084
1171
|
const { seg, nav } = scoped;
|
|
1085
1172
|
const overview = overviewRoute(nav) ?? overviewRouteFromSegmentMeta(seg, nav);
|
|
1086
1173
|
const overviewPageId = overview != null ? metaStr(overview.metadata, "pageId") : void 0;
|
|
1087
|
-
|
|
1088
|
-
|
|
1174
|
+
const relSection = stripLeadingScopePrefix(seg.section, scopePrefix);
|
|
1175
|
+
let slug = structuralNodeSlug(ctx, overview?.fullPath, relSection, scopePrefix);
|
|
1176
|
+
if (relSection === "" && overview?.fullPath == null) {
|
|
1089
1177
|
slug = inferSectionSlugFromNav(ctx, nav, scopePrefix) ?? slug;
|
|
1090
1178
|
}
|
|
1091
1179
|
const metaPointsTo = metaStr(seg.metadata, "pointsTo");
|
|
@@ -1095,17 +1183,20 @@ function sectionNode(ctx, scoped, sectionChildren, scopePrefix) {
|
|
|
1095
1183
|
slug,
|
|
1096
1184
|
icon: metaStr(seg.metadata, "icon"),
|
|
1097
1185
|
hidden: seg.hidden,
|
|
1098
|
-
|
|
1186
|
+
authed: metaBool(seg.metadata, "authed"),
|
|
1187
|
+
viewers: mergeVariantViewers(seg),
|
|
1188
|
+
orphaned: metaBool(seg.metadata, "orphaned"),
|
|
1189
|
+
featureFlags: metaFeatureFlags(seg.metadata)
|
|
1099
1190
|
});
|
|
1100
1191
|
return {
|
|
1101
1192
|
type: "section",
|
|
1102
1193
|
...defaults,
|
|
1103
1194
|
collapsed: metaCollapsed(seg.metadata) ?? defaults.collapsed,
|
|
1104
1195
|
overviewPageId: overviewPageId != null ? PageId(overviewPageId) : void 0,
|
|
1105
|
-
noindex:
|
|
1196
|
+
noindex: metaBool(overview?.metadata, "noindex") ?? metaBool(seg.metadata, "noindex"),
|
|
1106
1197
|
collapsible: metaBool(seg.metadata, "collapsible") ?? (metaCollapsed(seg.metadata) != null ? true : void 0),
|
|
1107
1198
|
collapsedByDefault: metaBool(seg.metadata, "collapsedByDefault") ?? (metaCollapsed(seg.metadata) === true ? true : void 0),
|
|
1108
|
-
availability:
|
|
1199
|
+
availability: metaStr(seg.metadata, "availability"),
|
|
1109
1200
|
pointsTo: metaPointsTo != null ? pointsToSlug(metaPointsTo) : void 0,
|
|
1110
1201
|
children: mergeChildrenByPosition(ctx, nav, sectionChildren)
|
|
1111
1202
|
};
|
|
@@ -1166,7 +1257,12 @@ function apiPackageChildNode(ctx, scoped, scopeSegs, parentApiDefinitionId, scop
|
|
|
1166
1257
|
const overview = overviewRoute(nav);
|
|
1167
1258
|
const overviewPageId = overview != null ? metaStr(overview.metadata, "pageId") : void 0;
|
|
1168
1259
|
const apiDefinitionId = metaStr(seg.metadata, "apiDefinitionId") ?? parentApiDefinitionId;
|
|
1169
|
-
const slug = structuralNodeSlug(
|
|
1260
|
+
const slug = structuralNodeSlug(
|
|
1261
|
+
ctx,
|
|
1262
|
+
overview?.fullPath,
|
|
1263
|
+
stripLeadingScopePrefix(seg.section, scopePrefix),
|
|
1264
|
+
scopePrefix
|
|
1265
|
+
);
|
|
1170
1266
|
const metaPointsTo = metaStr(seg.metadata, "pointsTo");
|
|
1171
1267
|
const children = buildApiChildren(ctx, scoped, scopeSegs, apiDefinitionId, scopePrefix);
|
|
1172
1268
|
return {
|
|
@@ -1177,12 +1273,15 @@ function apiPackageChildNode(ctx, scoped, scopeSegs, parentApiDefinitionId, scop
|
|
|
1177
1273
|
slug,
|
|
1178
1274
|
icon: metaStr(seg.metadata, "icon"),
|
|
1179
1275
|
hidden: seg.hidden,
|
|
1180
|
-
|
|
1276
|
+
authed: metaBool(seg.metadata, "authed"),
|
|
1277
|
+
viewers: toViewers(metaStrArr(seg.metadata, "viewers")),
|
|
1278
|
+
orphaned: metaBool(seg.metadata, "orphaned"),
|
|
1279
|
+
featureFlags: metaFeatureFlags(seg.metadata)
|
|
1181
1280
|
}),
|
|
1182
1281
|
apiDefinitionId: ApiDefinitionId(apiDefinitionId),
|
|
1183
1282
|
availability: metaStr(seg.metadata, "availability"),
|
|
1184
1283
|
overviewPageId: overviewPageId != null ? PageId(overviewPageId) : void 0,
|
|
1185
|
-
noindex:
|
|
1284
|
+
noindex: metaBool(overview?.metadata, "noindex") ?? metaBool(seg.metadata, "noindex"),
|
|
1186
1285
|
pointsTo: metaPointsTo != null ? pointsToSlug(metaPointsTo) : void 0,
|
|
1187
1286
|
children,
|
|
1188
1287
|
playground: void 0
|
|
@@ -1245,7 +1344,12 @@ function apiReferenceNode(ctx, scoped, scopeSegs, scopePrefix) {
|
|
|
1245
1344
|
const overview = overviewRoute(nav);
|
|
1246
1345
|
const overviewPageId = overview != null ? metaStr(overview.metadata, "pageId") : void 0;
|
|
1247
1346
|
const apiDefinitionId = metaStr(seg.metadata, "apiDefinitionId") ?? "";
|
|
1248
|
-
const slug = structuralNodeSlug(
|
|
1347
|
+
const slug = structuralNodeSlug(
|
|
1348
|
+
ctx,
|
|
1349
|
+
overview?.fullPath,
|
|
1350
|
+
stripLeadingScopePrefix(seg.section, scopePrefix),
|
|
1351
|
+
scopePrefix
|
|
1352
|
+
);
|
|
1249
1353
|
const metaPointsTo = metaStr(seg.metadata, "pointsTo");
|
|
1250
1354
|
const children = buildApiChildren(ctx, scoped, scopeSegs, apiDefinitionId, scopePrefix);
|
|
1251
1355
|
const changelog = attachedApiChangelogNode(ctx, scoped, scopeSegs, apiDefinitionId, scopePrefix);
|
|
@@ -1257,12 +1361,15 @@ function apiReferenceNode(ctx, scoped, scopeSegs, scopePrefix) {
|
|
|
1257
1361
|
slug,
|
|
1258
1362
|
icon: metaStr(seg.metadata, "icon"),
|
|
1259
1363
|
hidden: seg.hidden,
|
|
1260
|
-
|
|
1364
|
+
authed: metaBool(seg.metadata, "authed"),
|
|
1365
|
+
viewers: mergeVariantViewers(seg),
|
|
1366
|
+
orphaned: metaBool(seg.metadata, "orphaned"),
|
|
1367
|
+
featureFlags: metaFeatureFlags(seg.metadata)
|
|
1261
1368
|
}),
|
|
1262
1369
|
apiDefinitionId: ApiDefinitionId(apiDefinitionId),
|
|
1263
|
-
availability:
|
|
1370
|
+
availability: metaStr(seg.metadata, "availability"),
|
|
1264
1371
|
overviewPageId: overviewPageId != null ? PageId(overviewPageId) : void 0,
|
|
1265
|
-
noindex:
|
|
1372
|
+
noindex: metaBool(overview?.metadata, "noindex") ?? metaBool(seg.metadata, "noindex"),
|
|
1266
1373
|
paginated: true,
|
|
1267
1374
|
showErrors: metaBool(seg.metadata, "showErrors"),
|
|
1268
1375
|
hideTitle: metaBool(seg.metadata, "hideTitle"),
|
|
@@ -1315,10 +1422,13 @@ function changelogNode(ctx, scoped, scopePrefix) {
|
|
|
1315
1422
|
slug: ctx.contentSlug(r.fullPath ?? ""),
|
|
1316
1423
|
icon: metaStr(r.metadata, "icon"),
|
|
1317
1424
|
hidden: r.hidden,
|
|
1318
|
-
|
|
1425
|
+
authed: metaBool(r.metadata, "authed"),
|
|
1426
|
+
viewers: toViewers(metaStrArr(r.metadata, "viewers")),
|
|
1427
|
+
orphaned: metaBool(r.metadata, "orphaned"),
|
|
1428
|
+
featureFlags: metaFeatureFlags(r.metadata)
|
|
1319
1429
|
}),
|
|
1320
1430
|
pageId: PageId(metaStr(r.metadata, "pageId") ?? ""),
|
|
1321
|
-
noindex:
|
|
1431
|
+
noindex: metaBool(r.metadata, "noindex"),
|
|
1322
1432
|
date: dateStr ?? "",
|
|
1323
1433
|
tags: void 0
|
|
1324
1434
|
};
|
|
@@ -1364,10 +1474,13 @@ function changelogNode(ctx, scoped, scopePrefix) {
|
|
|
1364
1474
|
slug: baseSlug,
|
|
1365
1475
|
icon: metaStr(seg.metadata, "icon"),
|
|
1366
1476
|
hidden: seg.hidden,
|
|
1367
|
-
|
|
1477
|
+
authed: metaBool(seg.metadata, "authed"),
|
|
1478
|
+
viewers: mergeVariantViewers(seg),
|
|
1479
|
+
orphaned: metaBool(seg.metadata, "orphaned"),
|
|
1480
|
+
featureFlags: metaFeatureFlags(seg.metadata)
|
|
1368
1481
|
}),
|
|
1369
1482
|
overviewPageId: overviewPageId != null ? PageId(overviewPageId) : void 0,
|
|
1370
|
-
noindex:
|
|
1483
|
+
noindex: metaBool(overview?.metadata, "noindex") ?? metaBool(seg.metadata, "noindex"),
|
|
1371
1484
|
children: years
|
|
1372
1485
|
};
|
|
1373
1486
|
}
|
|
@@ -1553,6 +1666,24 @@ function buildFullRootFromSegments(options) {
|
|
|
1553
1666
|
} else if (child.type === "versioned") {
|
|
1554
1667
|
const defaultVersion = child.children.find((v) => v.default) ?? child.children[0];
|
|
1555
1668
|
rootPointsTo = defaultVersion?.pointsTo;
|
|
1669
|
+
} else if (child.type === "unversioned") {
|
|
1670
|
+
if (tabs.length > 0) {
|
|
1671
|
+
const firstTab = tabs[0];
|
|
1672
|
+
const pt = firstTab != null ? metaStr(firstTab.metadata, "pointsTo") : void 0;
|
|
1673
|
+
rootPointsTo = pt != null ? pointsToSlug(pt) : void 0;
|
|
1674
|
+
} else {
|
|
1675
|
+
const sorted = [...scoped].sort((a, b) => a.seg.sortOrder - b.seg.sortOrder);
|
|
1676
|
+
for (const s of sorted) {
|
|
1677
|
+
if (s.seg.hidden) {
|
|
1678
|
+
continue;
|
|
1679
|
+
}
|
|
1680
|
+
const pt = metaStr(s.seg.metadata, "pointsTo");
|
|
1681
|
+
if (pt != null) {
|
|
1682
|
+
rootPointsTo = pointsToSlug(pt);
|
|
1683
|
+
break;
|
|
1684
|
+
}
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1556
1687
|
}
|
|
1557
1688
|
const root = {
|
|
1558
1689
|
type: "root",
|
|
@@ -1613,7 +1744,7 @@ function buildVariantedNode(ctx, variants, scopeSegs, scopePrefix) {
|
|
|
1613
1744
|
default: detailIsDefault(variant),
|
|
1614
1745
|
variantId: VariantId(String(variant.id)),
|
|
1615
1746
|
subtitle: metaStr(variant.metadata, "subtitle") ?? void 0,
|
|
1616
|
-
image: void 0,
|
|
1747
|
+
image: metaStr(variant.metadata, "image") != null ? FileId(metaStr(variant.metadata, "image")) : void 0,
|
|
1617
1748
|
pointsTo: metaPointsTo != null ? pointsToSlug(metaPointsTo) : void 0,
|
|
1618
1749
|
children
|
|
1619
1750
|
};
|
|
@@ -1650,7 +1781,10 @@ function buildTabbedOrSidebar(ctx, scopeSegs, tabsPresent, scopePrefix) {
|
|
|
1650
1781
|
const tabDetails = uniqueDetails(scopeSegs, "tab");
|
|
1651
1782
|
const children = tabDetails.map((tab) => {
|
|
1652
1783
|
const tabType = metaStr(tab.metadata, "tab_type");
|
|
1653
|
-
const
|
|
1784
|
+
const rawTabSlug = detailSlug(tab);
|
|
1785
|
+
const versionDetail = scopeSegs[0]?.seg.version;
|
|
1786
|
+
const versionSlugStr = versionDetail != null ? detailSlug(versionDetail) : void 0;
|
|
1787
|
+
const tabSlug = versionSlugStr != null && rawTabSlug !== "" && (rawTabSlug === versionSlugStr || rawTabSlug.startsWith(versionSlugStr + "/")) ? asSlug(rawTabSlug) : asSlug(scopeSlugPrefix(scopePrefix, tab));
|
|
1654
1788
|
if (tabType === "link") {
|
|
1655
1789
|
return {
|
|
1656
1790
|
type: "link",
|
|
@@ -1659,7 +1793,7 @@ function buildTabbedOrSidebar(ctx, scopeSegs, tabsPresent, scopePrefix) {
|
|
|
1659
1793
|
title: tab.displayName,
|
|
1660
1794
|
icon: tab.icon ?? void 0,
|
|
1661
1795
|
url: Url(metaStr(tab.metadata, "url") ?? ""),
|
|
1662
|
-
target:
|
|
1796
|
+
target: metaStr(tab.metadata, "target")
|
|
1663
1797
|
};
|
|
1664
1798
|
}
|
|
1665
1799
|
if (tabType === "changelog") {
|
|
@@ -1747,7 +1881,7 @@ function buildVersioned(ctx, versions, scoped, rootSlug, productPrefix) {
|
|
|
1747
1881
|
default: detailIsDefault(version),
|
|
1748
1882
|
versionId: VersionId(version.id),
|
|
1749
1883
|
availability: void 0,
|
|
1750
|
-
landingPage:
|
|
1884
|
+
landingPage: buildVersionLandingPage(ctx, versionSegs, asSlug(slug)),
|
|
1751
1885
|
announcement: void 0,
|
|
1752
1886
|
pointsTo: metaStr(version.metadata, "pointsTo") != null ? pointsToSlug(metaStr(version.metadata, "pointsTo")) : void 0,
|
|
1753
1887
|
// The version's full slug roots structural sections so the whole
|
|
@@ -1759,6 +1893,7 @@ function buildVersioned(ctx, versions, scoped, rootSlug, productPrefix) {
|
|
|
1759
1893
|
}
|
|
1760
1894
|
return node;
|
|
1761
1895
|
});
|
|
1896
|
+
markCrossVersionCanonicalSlugs(children);
|
|
1762
1897
|
return {
|
|
1763
1898
|
type: "versioned",
|
|
1764
1899
|
id: ctx.nodeId(`versioned:${productPrefix ?? "root"}`),
|
|
@@ -1784,6 +1919,111 @@ function markDefaultVersionCanonicalSlugs(node, pruneSlug, versionSlug) {
|
|
|
1784
1919
|
return;
|
|
1785
1920
|
});
|
|
1786
1921
|
}
|
|
1922
|
+
function unversionedParents(parents) {
|
|
1923
|
+
let versionIdx = -1;
|
|
1924
|
+
for (let i = parents.length - 1; i >= 0; i--) {
|
|
1925
|
+
if (parents[i].type === "version") {
|
|
1926
|
+
versionIdx = i;
|
|
1927
|
+
break;
|
|
1928
|
+
}
|
|
1929
|
+
}
|
|
1930
|
+
return versionIdx >= 0 ? parents.slice(versionIdx + 1) : parents;
|
|
1931
|
+
}
|
|
1932
|
+
function crossVersionDedupKeys(node, parents) {
|
|
1933
|
+
const keys = [];
|
|
1934
|
+
const uParents = unversionedParents(parents);
|
|
1935
|
+
const pid = getPageId(node);
|
|
1936
|
+
if (pid != null) {
|
|
1937
|
+
keys.push(`pid:${pid}`);
|
|
1938
|
+
}
|
|
1939
|
+
if (node.type === "endpoint" || node.type === "webSocket" || node.type === "webhook" || node.type === "grpc" || node.type === "graphql") {
|
|
1940
|
+
const apiParentTitles = uParents.filter(
|
|
1941
|
+
(p) => p.type === "apiReference"
|
|
1942
|
+
).map((p) => p.title.replaceAll(" ", ""));
|
|
1943
|
+
const apiPrefix = apiParentTitles.join(":");
|
|
1944
|
+
if (node.type === "endpoint") {
|
|
1945
|
+
keys.push(`${apiPrefix}:api:endpoint:${node.method}:${node.endpointId}`);
|
|
1946
|
+
} else if (node.type === "webSocket") {
|
|
1947
|
+
keys.push(`${apiPrefix}:api:websocket:${node.webSocketId}`);
|
|
1948
|
+
} else if (node.type === "webhook") {
|
|
1949
|
+
keys.push(`${apiPrefix}:api:webhook:${node.method}:${node.webhookId}`);
|
|
1950
|
+
} else if (node.type === "grpc") {
|
|
1951
|
+
keys.push(`${apiPrefix}:api:grpc:${node.method}:${node.grpcId}`);
|
|
1952
|
+
} else if (node.type === "graphql") {
|
|
1953
|
+
keys.push(`${apiPrefix}:api:graphql:${node.id}`);
|
|
1954
|
+
}
|
|
1955
|
+
}
|
|
1956
|
+
const parentTitles = [];
|
|
1957
|
+
for (const p of uParents) {
|
|
1958
|
+
if (hasMetadata(p)) {
|
|
1959
|
+
parentTitles.push(p.title);
|
|
1960
|
+
}
|
|
1961
|
+
}
|
|
1962
|
+
keys.push([...parentTitles, node.title].join("###"));
|
|
1963
|
+
return keys;
|
|
1964
|
+
}
|
|
1965
|
+
function buildVersionLandingPage(ctx, versionSegs, versionSlug) {
|
|
1966
|
+
const tablessSegs = versionSegs.filter((s) => s.seg.tab == null);
|
|
1967
|
+
if (tablessSegs.length === 0) {
|
|
1968
|
+
return void 0;
|
|
1969
|
+
}
|
|
1970
|
+
for (const s of tablessSegs) {
|
|
1971
|
+
for (const r of s.nav) {
|
|
1972
|
+
if (r.type === "markdown" && r.fullPath != null) {
|
|
1973
|
+
const md = r.metadata;
|
|
1974
|
+
const pageId = metaStr(md, "pageId") ?? "";
|
|
1975
|
+
const slug = ctx.contentSlug(r.fullPath);
|
|
1976
|
+
return {
|
|
1977
|
+
type: "landingPage",
|
|
1978
|
+
...withMetadataDefaults({
|
|
1979
|
+
id: ctx.nodeId(`landing:${slug}`),
|
|
1980
|
+
title: metaStr(md, "title") ?? "",
|
|
1981
|
+
slug,
|
|
1982
|
+
icon: metaStr(md, "icon"),
|
|
1983
|
+
hidden: r.hidden,
|
|
1984
|
+
viewers: toViewers(metaStrArr(md, "viewers"))
|
|
1985
|
+
}),
|
|
1986
|
+
pageId: PageId(pageId),
|
|
1987
|
+
noindex: metaBool(md, "noindex")
|
|
1988
|
+
};
|
|
1989
|
+
}
|
|
1990
|
+
}
|
|
1991
|
+
}
|
|
1992
|
+
return void 0;
|
|
1993
|
+
}
|
|
1994
|
+
function markCrossVersionCanonicalSlugs(versionNodes) {
|
|
1995
|
+
const keyToCanonical = /* @__PURE__ */ new Map();
|
|
1996
|
+
const sorted = [...versionNodes].sort((a, b) => {
|
|
1997
|
+
if (a.default !== b.default) {
|
|
1998
|
+
return a.default ? -1 : 1;
|
|
1999
|
+
}
|
|
2000
|
+
return 0;
|
|
2001
|
+
});
|
|
2002
|
+
for (const version of sorted) {
|
|
2003
|
+
traverseDF(version, (child, parents) => {
|
|
2004
|
+
if (hasMetadata(child) && isPage(child)) {
|
|
2005
|
+
const keys = crossVersionDedupKeys(child, parents);
|
|
2006
|
+
let matched = false;
|
|
2007
|
+
for (const key of keys) {
|
|
2008
|
+
const canonical = keyToCanonical.get(key);
|
|
2009
|
+
if (canonical != null && !version.default) {
|
|
2010
|
+
child.canonicalSlug = canonical;
|
|
2011
|
+
matched = true;
|
|
2012
|
+
break;
|
|
2013
|
+
}
|
|
2014
|
+
}
|
|
2015
|
+
if (!matched) {
|
|
2016
|
+
const canonical = child.canonicalSlug ?? child.slug;
|
|
2017
|
+
for (const key of keys) {
|
|
2018
|
+
if (!keyToCanonical.has(key)) {
|
|
2019
|
+
keyToCanonical.set(key, canonical);
|
|
2020
|
+
}
|
|
2021
|
+
}
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
2024
|
+
});
|
|
2025
|
+
}
|
|
2026
|
+
}
|
|
1787
2027
|
function buildProductGroup(ctx, products, scoped, rootSlug) {
|
|
1788
2028
|
const children = products.map((product) => {
|
|
1789
2029
|
const productSegs = scoped.filter((s) => s.seg.product?.id === product.id);
|
|
@@ -1809,7 +2049,7 @@ function buildProductGroup(ctx, products, scoped, rootSlug) {
|
|
|
1809
2049
|
// here; sourcing it from the hash makes that filter match nothing.
|
|
1810
2050
|
productId: ProductId(product.displayName),
|
|
1811
2051
|
subtitle: metaStr(product.metadata, "subtitle") ?? "",
|
|
1812
|
-
image: void 0,
|
|
2052
|
+
image: metaStr(product.metadata, "image") != null ? FileId(metaStr(product.metadata, "image")) : void 0,
|
|
1813
2053
|
announcement: void 0,
|
|
1814
2054
|
pointsTo: metaStr(product.metadata, "pointsTo") != null ? pointsToSlug(metaStr(product.metadata, "pointsTo")) : void 0,
|
|
1815
2055
|
child: productChild
|