@fern-api/fdr-sdk 1.2.44-ef8582fd87 → 1.2.45-1a67633024

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/api-definition/migrators/v1ToV2.d.ts.map +1 -1
  2. package/dist/api-definition/migrators/v1ToV2.js +1 -0
  3. package/dist/api-definition/migrators/v1ToV2.js.map +1 -1
  4. package/dist/converters/db/convertAPIDefinitionToDb.d.ts.map +1 -1
  5. package/dist/converters/db/convertAPIDefinitionToDb.js +1 -0
  6. package/dist/converters/db/convertAPIDefinitionToDb.js.map +1 -1
  7. package/dist/converters/read/convertDbAPIDefinitionToRead.d.ts +1 -0
  8. package/dist/converters/read/convertDbAPIDefinitionToRead.d.ts.map +1 -1
  9. package/dist/converters/read/convertDbAPIDefinitionToRead.js +1 -0
  10. package/dist/converters/read/convertDbAPIDefinitionToRead.js.map +1 -1
  11. package/dist/js/api-definition/index.js +3 -0
  12. package/dist/js/api-definition/index.js.map +1 -1
  13. package/dist/js/api-definition/index.mjs +3 -0
  14. package/dist/js/api-definition/index.mjs.map +1 -1
  15. package/dist/js/client/FdrClient.js +3 -0
  16. package/dist/js/client/FdrClient.js.map +1 -1
  17. package/dist/js/client/FdrClient.mjs +3 -0
  18. package/dist/js/client/FdrClient.mjs.map +1 -1
  19. package/dist/js/client/types.js +4 -0
  20. package/dist/js/client/types.js.map +1 -1
  21. package/dist/js/client/types.mjs +4 -0
  22. package/dist/js/client/types.mjs.map +1 -1
  23. package/dist/js/converters/index.js +16 -2
  24. package/dist/js/converters/index.js.map +1 -1
  25. package/dist/js/converters/index.mjs +16 -2
  26. package/dist/js/converters/index.mjs.map +1 -1
  27. package/dist/js/index.js +16 -2
  28. package/dist/js/index.js.map +1 -1
  29. package/dist/js/index.mjs +16 -2
  30. package/dist/js/index.mjs.map +1 -1
  31. package/dist/js/navigation/index.js +14 -2
  32. package/dist/js/navigation/index.js.map +1 -1
  33. package/dist/js/navigation/index.mjs +14 -2
  34. package/dist/js/navigation/index.mjs.map +1 -1
  35. package/dist/js/navigation/ledger-root-builder.js +18 -5
  36. package/dist/js/navigation/ledger-root-builder.js.map +1 -1
  37. package/dist/js/navigation/ledger-root-builder.mjs +18 -5
  38. package/dist/js/navigation/ledger-root-builder.mjs.map +1 -1
  39. package/dist/js/orpc-client.js +4 -0
  40. package/dist/js/orpc-client.js.map +1 -1
  41. package/dist/js/orpc-client.mjs +4 -0
  42. package/dist/js/orpc-client.mjs.map +1 -1
  43. package/dist/navigation/__test__/ledger-root-builder.contentfulRedirectRepro.test.d.ts +2 -0
  44. package/dist/navigation/__test__/ledger-root-builder.contentfulRedirectRepro.test.d.ts.map +1 -0
  45. package/dist/navigation/__test__/ledger-root-builder.contentfulRedirectRepro.test.js +308 -0
  46. package/dist/navigation/__test__/ledger-root-builder.contentfulRedirectRepro.test.js.map +1 -0
  47. package/dist/navigation/__test__/ledger-root-builder.pointsTo.test.js +122 -10
  48. package/dist/navigation/__test__/ledger-root-builder.pointsTo.test.js.map +1 -1
  49. package/dist/navigation/__test__/ledger-root-builder.skipSlugSiblingSection.test.js +317 -0
  50. package/dist/navigation/__test__/ledger-root-builder.skipSlugSiblingSection.test.js.map +1 -1
  51. package/dist/navigation/ledger-root-builder.d.ts.map +1 -1
  52. package/dist/navigation/ledger-root-builder.js +28 -6
  53. package/dist/navigation/ledger-root-builder.js.map +1 -1
  54. package/dist/navigation/utils/toApis.d.ts +1 -0
  55. package/dist/navigation/utils/toApis.d.ts.map +1 -1
  56. package/dist/navigation/utils/updatePointsTo.d.ts.map +1 -1
  57. package/dist/navigation/utils/updatePointsTo.js +12 -4
  58. package/dist/navigation/utils/updatePointsTo.js.map +1 -1
  59. package/dist/orpc-client/api/contract-db.d.ts +3 -0
  60. package/dist/orpc-client/api/contract-db.d.ts.map +1 -1
  61. package/dist/orpc-client/api/contract-db.js +1 -0
  62. package/dist/orpc-client/api/contract-db.js.map +1 -1
  63. package/dist/orpc-client/api/contract-latest.d.ts +6 -0
  64. package/dist/orpc-client/api/contract-latest.d.ts.map +1 -1
  65. package/dist/orpc-client/api/contract-latest.js +1 -0
  66. package/dist/orpc-client/api/contract-latest.js.map +1 -1
  67. package/dist/orpc-client/api/contract-read.d.ts +3 -0
  68. package/dist/orpc-client/api/contract-read.d.ts.map +1 -1
  69. package/dist/orpc-client/api/contract-read.js +1 -0
  70. package/dist/orpc-client/api/contract-read.js.map +1 -1
  71. package/dist/orpc-client/api/contract-register.d.ts +3 -0
  72. package/dist/orpc-client/api/contract-register.d.ts.map +1 -1
  73. package/dist/orpc-client/api/contract-register.js +1 -0
  74. package/dist/orpc-client/api/contract-register.js.map +1 -1
  75. package/dist/tsconfig.tsbuildinfo +1 -1
  76. package/dist/types/api-definition/migrators/v1ToV2.d.ts.map +1 -1
  77. package/dist/types/converters/db/convertAPIDefinitionToDb.d.ts.map +1 -1
  78. package/dist/types/converters/read/convertDbAPIDefinitionToRead.d.ts +1 -0
  79. package/dist/types/converters/read/convertDbAPIDefinitionToRead.d.ts.map +1 -1
  80. package/dist/types/navigation/__test__/ledger-root-builder.contentfulRedirectRepro.test.d.ts +2 -0
  81. package/dist/types/navigation/__test__/ledger-root-builder.contentfulRedirectRepro.test.d.ts.map +1 -0
  82. package/dist/types/navigation/ledger-root-builder.d.ts.map +1 -1
  83. package/dist/types/navigation/utils/toApis.d.ts +1 -0
  84. package/dist/types/navigation/utils/toApis.d.ts.map +1 -1
  85. package/dist/types/navigation/utils/updatePointsTo.d.ts.map +1 -1
  86. package/dist/types/orpc-client/api/contract-db.d.ts +3 -0
  87. package/dist/types/orpc-client/api/contract-db.d.ts.map +1 -1
  88. package/dist/types/orpc-client/api/contract-latest.d.ts +6 -0
  89. package/dist/types/orpc-client/api/contract-latest.d.ts.map +1 -1
  90. package/dist/types/orpc-client/api/contract-read.d.ts +3 -0
  91. package/dist/types/orpc-client/api/contract-read.d.ts.map +1 -1
  92. package/dist/types/orpc-client/api/contract-register.d.ts +3 -0
  93. package/dist/types/orpc-client/api/contract-register.d.ts.map +1 -1
  94. package/package.json +3 -3
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ledger-root-builder.contentfulRedirectRepro.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger-root-builder.contentfulRedirectRepro.test.d.ts","sourceRoot":"","sources":["../../../src/navigation/__test__/ledger-root-builder.contentfulRedirectRepro.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,308 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { FernNavigation } from "../../index.js";
3
+ import { buildFullRootFromSegments } from "../ledger-root-builder.js";
4
+ /**
5
+ * Reproduction test for the contentful extensibility redirect regression.
6
+ *
7
+ * The extensibility product has this V1 sidebar structure:
8
+ * SidebarGroup:
9
+ * [0] Section "App Framework" (collapsed: true) -> contains "Overview" page
10
+ * [1] Section "Field Editors" (collapsed: true) -> contains pages
11
+ * [2] Page "OAuth"
12
+ * [3] Section "Webhooks" (collapsed: true) -> contains pages
13
+ *
14
+ * V2 (reads V1 tree directly) redirects /extensibility -> first child of
15
+ * first section -> app-framework/overview.
16
+ *
17
+ * Ledger (reconstructs from segments) should produce the same redirect target.
18
+ *
19
+ * ROOT CAUSE: The publisher's hashSegment uses sequential order (not
20
+ * childPosition) for displaySortOrder in the hash. When childPosition was
21
+ * added, the tabRoot segment hash didn't change, so old nav entries with
22
+ * display_sort_order=0 persisted (INSERT ON CONFLICT DO NOTHING). The reader
23
+ * then sorts OAuth(pos=0) before AppFramework(childIndex=0) due to the seq
24
+ * tiebreaker (tabRoot items have lower seq).
25
+ *
26
+ * FIX: The reader's sort tiebreaker now prefers sections over pages at equal
27
+ * positions. Additionally, the publisher hash now includes childPosition so
28
+ * republishing produces a new segment hash and correct nav entries.
29
+ */
30
+ function pageRoute(opts) {
31
+ return {
32
+ type: "markdown",
33
+ fullPath: opts.fullPath,
34
+ hidden: false,
35
+ metadata: { title: opts.title, pageId: `pg-${opts.title.toLowerCase().replace(/ /g, "-")}` },
36
+ ...(opts.displaySortOrder != null ? { displaySortOrder: opts.displaySortOrder } : {})
37
+ };
38
+ }
39
+ function segment(opts) {
40
+ return {
41
+ segmentId: opts.segmentHash,
42
+ segmentHash: opts.segmentHash,
43
+ section: opts.section,
44
+ locale: "en",
45
+ sortOrder: opts.sortOrder,
46
+ hidden: false,
47
+ metadata: opts.metadata,
48
+ product: opts.product
49
+ ? {
50
+ id: opts.product.id,
51
+ displayName: opts.product.displayName,
52
+ icon: null,
53
+ sortOrder: 0,
54
+ hidden: false,
55
+ viewers: [],
56
+ orphaned: false,
57
+ featureFlags: [],
58
+ metadata: { slug: opts.product.slug, default: opts.product.isDefault ?? false }
59
+ }
60
+ : null,
61
+ version: null,
62
+ variant: null,
63
+ tab: null
64
+ };
65
+ }
66
+ const PRODUCT = {
67
+ id: "product:extensibility",
68
+ displayName: "Extensibility",
69
+ slug: "extensibility",
70
+ isDefault: false
71
+ };
72
+ describe("contentful extensibility redirect regression", () => {
73
+ /**
74
+ * Ideal case: sections have childIndex=0,1,3 and OAuth has
75
+ * displaySortOrder=2 (its correct global position).
76
+ * The sort correctly interleaves them.
77
+ */
78
+ it("correct data: redirects to first section's first page (app-framework/overview)", () => {
79
+ const root = buildFullRootFromSegments({
80
+ basePath: "developers/docs",
81
+ title: "Contentful",
82
+ segments: [
83
+ segment({
84
+ segmentHash: "seg-root",
85
+ section: "",
86
+ sortOrder: 0,
87
+ metadata: { type: "tabRoot" },
88
+ product: PRODUCT
89
+ }),
90
+ segment({
91
+ segmentHash: "seg-app-framework",
92
+ section: "app-framework",
93
+ sortOrder: 1,
94
+ metadata: {
95
+ type: "section",
96
+ title: "App Framework",
97
+ childIndex: 0,
98
+ collapsed: true,
99
+ sidebarDepth: 0
100
+ },
101
+ product: PRODUCT
102
+ }),
103
+ segment({
104
+ segmentHash: "seg-field-editors",
105
+ section: "field-editors",
106
+ sortOrder: 2,
107
+ metadata: {
108
+ type: "section",
109
+ title: "Field Editors",
110
+ childIndex: 1,
111
+ collapsed: true,
112
+ sidebarDepth: 0
113
+ },
114
+ product: PRODUCT
115
+ }),
116
+ segment({
117
+ segmentHash: "seg-webhooks",
118
+ section: "webhooks",
119
+ sortOrder: 3,
120
+ metadata: { type: "section", title: "Webhooks", childIndex: 3, collapsed: true, sidebarDepth: 0 },
121
+ product: PRODUCT
122
+ })
123
+ ],
124
+ navBySegment: new Map([
125
+ [
126
+ "seg-root",
127
+ [pageRoute({ fullPath: "extensibility/oauth", title: "OAuth", displaySortOrder: 2 })]
128
+ ],
129
+ [
130
+ "seg-app-framework",
131
+ [pageRoute({ fullPath: "extensibility/app-framework/overview", title: "Overview" })]
132
+ ],
133
+ [
134
+ "seg-field-editors",
135
+ [
136
+ pageRoute({ fullPath: "extensibility/field-editors/overview", title: "Field Editors Overview" })
137
+ ]
138
+ ],
139
+ [
140
+ "seg-webhooks",
141
+ [pageRoute({ fullPath: "extensibility/webhooks/overview", title: "Webhooks Overview" })]
142
+ ]
143
+ ])
144
+ });
145
+ FernNavigation.utils.mutableUpdatePointsTo(root);
146
+ const productGroup = root.child;
147
+ expect(productGroup.type).toBe("productgroup");
148
+ const product = productGroup.children[0];
149
+ expect(product.type).toBe("product");
150
+ expect(product.pointsTo).toBe("developers/docs/extensibility/app-framework/overview");
151
+ });
152
+ /**
153
+ * THE BUG: Sections have childIndex (republished with new publisher code)
154
+ * but the tabRoot segment hash didn't change, so the old nav entry with
155
+ * display_sort_order=0 persists. Sort fires (both have positions), but
156
+ * OAuth(pos=0) ties with AppFramework(childIndex=0). The fix's tiebreaker
157
+ * prefers sections over pages at equal positions.
158
+ */
159
+ it("stale tabRoot data: sections have childIndex but OAuth stuck at displaySortOrder=0", () => {
160
+ const root = buildFullRootFromSegments({
161
+ basePath: "developers/docs",
162
+ title: "Contentful",
163
+ segments: [
164
+ segment({
165
+ segmentHash: "seg-root",
166
+ section: "",
167
+ sortOrder: 0,
168
+ metadata: { type: "tabRoot" },
169
+ product: PRODUCT
170
+ }),
171
+ segment({
172
+ segmentHash: "seg-app-framework",
173
+ section: "app-framework",
174
+ sortOrder: 1,
175
+ metadata: {
176
+ type: "section",
177
+ title: "App Framework",
178
+ childIndex: 0,
179
+ collapsed: true,
180
+ sidebarDepth: 0
181
+ },
182
+ product: PRODUCT
183
+ }),
184
+ segment({
185
+ segmentHash: "seg-field-editors",
186
+ section: "field-editors",
187
+ sortOrder: 2,
188
+ metadata: {
189
+ type: "section",
190
+ title: "Field Editors",
191
+ childIndex: 1,
192
+ collapsed: true,
193
+ sidebarDepth: 0
194
+ },
195
+ product: PRODUCT
196
+ }),
197
+ segment({
198
+ segmentHash: "seg-webhooks",
199
+ section: "webhooks",
200
+ sortOrder: 3,
201
+ metadata: { type: "section", title: "Webhooks", childIndex: 3, collapsed: true, sidebarDepth: 0 },
202
+ product: PRODUCT
203
+ })
204
+ ],
205
+ navBySegment: new Map([
206
+ // STALE: displaySortOrder=0 (sequential index) instead of 2 (childPosition)
207
+ [
208
+ "seg-root",
209
+ [pageRoute({ fullPath: "extensibility/oauth", title: "OAuth", displaySortOrder: 0 })]
210
+ ],
211
+ [
212
+ "seg-app-framework",
213
+ [pageRoute({ fullPath: "extensibility/app-framework/overview", title: "Overview" })]
214
+ ],
215
+ [
216
+ "seg-field-editors",
217
+ [
218
+ pageRoute({ fullPath: "extensibility/field-editors/overview", title: "Field Editors Overview" })
219
+ ]
220
+ ],
221
+ [
222
+ "seg-webhooks",
223
+ [pageRoute({ fullPath: "extensibility/webhooks/overview", title: "Webhooks Overview" })]
224
+ ]
225
+ ])
226
+ });
227
+ FernNavigation.utils.mutableUpdatePointsTo(root);
228
+ const productGroup = root.child;
229
+ expect(productGroup.type).toBe("productgroup");
230
+ const product = productGroup.children[0];
231
+ expect(product.type).toBe("product");
232
+ // FIX: tiebreaker prefers sections over pages at equal positions
233
+ expect(product.pointsTo).toBe("developers/docs/extensibility/app-framework/overview");
234
+ });
235
+ /**
236
+ * Fully old data: sections have NO childIndex at all. The sort condition
237
+ * (hasLeafPos && hasSegmentPos) is not met, so iteration order is used.
238
+ * Without childIndex, the reader can't know the V1 order, so it falls back
239
+ * to segment sortOrder which puts tabRoot first -> OAuth appears first.
240
+ * This case requires a republish with the fixed publisher to resolve.
241
+ */
242
+ it("fully old data (no childIndex): falls back to iteration order", () => {
243
+ const root = buildFullRootFromSegments({
244
+ basePath: "developers/docs",
245
+ title: "Contentful",
246
+ segments: [
247
+ segment({
248
+ segmentHash: "seg-root",
249
+ section: "",
250
+ sortOrder: 0,
251
+ metadata: { type: "tabRoot" },
252
+ product: PRODUCT
253
+ }),
254
+ segment({
255
+ segmentHash: "seg-app-framework",
256
+ section: "app-framework",
257
+ sortOrder: 1,
258
+ metadata: { type: "section", title: "App Framework", collapsed: true },
259
+ product: PRODUCT
260
+ }),
261
+ segment({
262
+ segmentHash: "seg-field-editors",
263
+ section: "field-editors",
264
+ sortOrder: 2,
265
+ metadata: { type: "section", title: "Field Editors", collapsed: true },
266
+ product: PRODUCT
267
+ }),
268
+ segment({
269
+ segmentHash: "seg-webhooks",
270
+ section: "webhooks",
271
+ sortOrder: 3,
272
+ metadata: { type: "section", title: "Webhooks", collapsed: true },
273
+ product: PRODUCT
274
+ })
275
+ ],
276
+ navBySegment: new Map([
277
+ [
278
+ "seg-root",
279
+ [pageRoute({ fullPath: "extensibility/oauth", title: "OAuth", displaySortOrder: 0 })]
280
+ ],
281
+ [
282
+ "seg-app-framework",
283
+ [pageRoute({ fullPath: "extensibility/app-framework/overview", title: "Overview" })]
284
+ ],
285
+ [
286
+ "seg-field-editors",
287
+ [
288
+ pageRoute({ fullPath: "extensibility/field-editors/overview", title: "Field Editors Overview" })
289
+ ]
290
+ ],
291
+ [
292
+ "seg-webhooks",
293
+ [pageRoute({ fullPath: "extensibility/webhooks/overview", title: "Webhooks Overview" })]
294
+ ]
295
+ ])
296
+ });
297
+ FernNavigation.utils.mutableUpdatePointsTo(root);
298
+ const productGroup = root.child;
299
+ expect(productGroup.type).toBe("productgroup");
300
+ const product = productGroup.children[0];
301
+ expect(product.type).toBe("product");
302
+ // Without childIndex, hasSegmentPos=false, so the sort doesn't fire.
303
+ // Iteration order puts OAuth first (tabRoot processed before sections).
304
+ // This is a known limitation — requires republish with fixed publisher.
305
+ expect(product.pointsTo).toBe("developers/docs/extensibility/oauth");
306
+ });
307
+ });
308
+ //# sourceMappingURL=ledger-root-builder.contentfulRedirectRepro.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger-root-builder.contentfulRedirectRepro.test.js","sourceRoot":"","sources":["../../../src/navigation/__test__/ledger-root-builder.contentfulRedirectRepro.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,24 @@
1
1
  import { describe, expect, it } from "vitest";
2
+ import * as FernNavigation from "../index.js";
2
3
  import { buildFullRootFromSegments } from "../ledger-root-builder";
3
4
  /**
4
5
  * Minimal `Segment` (pointer-shape) builder for the ledger root builder. Only
5
6
  * the fields the builder reads are populated; the rest are cast away. Each test
6
7
  * asserts on slug strings, so the loose typing is intentional and contained.
7
8
  */
9
+ function productDetail(opts) {
10
+ return {
11
+ id: `product:${opts.productSlug}`,
12
+ displayName: opts.productSlug,
13
+ icon: null,
14
+ sortOrder: 0,
15
+ hidden: false,
16
+ viewers: [],
17
+ orphaned: false,
18
+ featureFlags: [],
19
+ metadata: { slug: opts.productSlug, default: opts.isDefault ?? false, pointsTo: opts.pointsTo }
20
+ };
21
+ }
8
22
  function productSegment(opts) {
9
23
  return {
10
24
  segmentId: opts.segmentHash,
@@ -14,22 +28,38 @@ function productSegment(opts) {
14
28
  sortOrder: 0,
15
29
  hidden: false,
16
30
  metadata: {},
17
- product: {
18
- id: `product:${opts.productSlug}`,
19
- displayName: opts.productSlug,
20
- icon: null,
21
- sortOrder: 0,
22
- hidden: false,
23
- viewers: [],
24
- orphaned: false,
25
- featureFlags: [],
26
- metadata: { slug: opts.productSlug, default: opts.isDefault ?? false, pointsTo: opts.pointsTo }
31
+ product: productDetail(opts),
32
+ version: null,
33
+ variant: null,
34
+ tab: null
35
+ };
36
+ }
37
+ function scopedSegment(opts) {
38
+ return {
39
+ segmentId: opts.segmentHash,
40
+ segmentHash: opts.segmentHash,
41
+ section: opts.section,
42
+ locale: "en",
43
+ sortOrder: opts.sortOrder,
44
+ hidden: false,
45
+ metadata: {
46
+ type: opts.type,
47
+ ...(opts.title != null ? { title: opts.title } : {}),
48
+ ...(opts.pointsTo != null ? { pointsTo: opts.pointsTo } : {})
27
49
  },
50
+ product: productDetail({
51
+ productSlug: opts.productSlug,
52
+ pointsTo: opts.productPointsTo,
53
+ isDefault: opts.productDefault
54
+ }),
28
55
  version: null,
29
56
  variant: null,
30
57
  tab: null
31
58
  };
32
59
  }
60
+ function markdownRoute(fullPath, title, pageId) {
61
+ return { type: "markdown", fullPath, hidden: false, metadata: { title, pageId } };
62
+ }
33
63
  describe("buildFullRootFromSegments — pointsTo basepath handling (ADR 0016)", () => {
34
64
  // `metadata.pointsTo` is stored basepath-ABSOLUTE (a V1 accumulated slug
35
65
  // rooted at the basepath), exactly like routes/routing/versionFirstRoute.
@@ -90,5 +120,87 @@ describe("buildFullRootFromSegments — pointsTo basepath handling (ADR 0016)",
90
120
  const product = root.child.children[0];
91
121
  expect(product.pointsTo).toBe("alpha/overview");
92
122
  });
123
+ it("recomputes product metadata pointsTo when the target is absent from the current tree", () => {
124
+ const root = buildFullRootFromSegments({
125
+ basePath: "developers/docs",
126
+ title: "Contentful",
127
+ segments: [
128
+ scopedSegment({
129
+ segmentHash: "seg-root",
130
+ section: "",
131
+ type: "tabRoot",
132
+ sortOrder: 0,
133
+ productSlug: "extensibility",
134
+ productPointsTo: "developers/docs/extensibility/protected",
135
+ productDefault: true
136
+ })
137
+ ],
138
+ navBySegment: new Map([
139
+ ["seg-root", [markdownRoute("extensibility/public", "Public", "pg-public")]]
140
+ ])
141
+ });
142
+ const product = root.child.children[0];
143
+ FernNavigation.utils.mutableUpdatePointsTo(root);
144
+ expect(product.pointsTo).toBe("developers/docs/extensibility/public");
145
+ expect(root.pointsTo).toBe("developers/docs/extensibility/public");
146
+ });
147
+ it("preserves product metadata pointsTo when old manifests cannot reconstruct root child order", () => {
148
+ const productPointsTo = "developers/docs/extensibility/app-framework/overview";
149
+ const root = buildFullRootFromSegments({
150
+ basePath: "developers/docs",
151
+ title: "Contentful",
152
+ segments: [
153
+ scopedSegment({
154
+ segmentHash: "seg-root",
155
+ section: "",
156
+ type: "tabRoot",
157
+ sortOrder: 0,
158
+ productSlug: "extensibility",
159
+ productPointsTo,
160
+ productDefault: true
161
+ }),
162
+ scopedSegment({
163
+ segmentHash: "seg-app-framework",
164
+ section: "app-framework",
165
+ type: "section",
166
+ title: "App Framework",
167
+ sortOrder: 1,
168
+ productSlug: "extensibility",
169
+ productPointsTo,
170
+ productDefault: true,
171
+ pointsTo: productPointsTo
172
+ }),
173
+ scopedSegment({
174
+ segmentHash: "seg-field-editors",
175
+ section: "field-editors",
176
+ type: "section",
177
+ title: "Field editors",
178
+ sortOrder: 2,
179
+ productSlug: "extensibility",
180
+ productPointsTo,
181
+ productDefault: true,
182
+ pointsTo: "developers/docs/extensibility/field-editors/overview"
183
+ })
184
+ ],
185
+ navBySegment: new Map([
186
+ ["seg-root", [markdownRoute("extensibility/oauth", "OAuth", "pg-oauth")]],
187
+ [
188
+ "seg-app-framework",
189
+ [markdownRoute("extensibility/app-framework/overview", "Overview", "pg-app-framework")]
190
+ ],
191
+ [
192
+ "seg-field-editors",
193
+ [markdownRoute("extensibility/field-editors/overview", "Overview", "pg-field-editors")]
194
+ ]
195
+ ])
196
+ });
197
+ const product = root.child.children[0];
198
+ expect(product.type).toBe("product");
199
+ expect(product.pointsTo).toBe(productPointsTo);
200
+ expect(root.pointsTo).toBe(productPointsTo);
201
+ FernNavigation.utils.mutableUpdatePointsTo(root);
202
+ expect(product.pointsTo).toBe(productPointsTo);
203
+ expect(root.pointsTo).toBe(productPointsTo);
204
+ });
93
205
  });
94
206
  //# sourceMappingURL=ledger-root-builder.pointsTo.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger-root-builder.pointsTo.test.js","sourceRoot":"","sources":["../../../src/navigation/__test__/ledger-root-builder.pointsTo.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger-root-builder.pointsTo.test.js","sourceRoot":"","sources":["../../../src/navigation/__test__/ledger-root-builder.pointsTo.test.ts"],"names":[],"mappings":"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"}