@financial-times/cp-content-pipeline-schema 3.7.3 → 3.9.0

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 (106) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/lib/datasources/capi.d.ts +4 -4
  3. package/lib/datasources/capi.js +4 -4
  4. package/lib/datasources/capi.js.map +1 -1
  5. package/lib/datasources/capi.test.js +3 -3
  6. package/lib/datasources/capi.test.js.map +1 -1
  7. package/lib/fixtures/dummyContext.js +2 -2
  8. package/lib/fixtures/dummyContext.js.map +1 -1
  9. package/lib/generated/index.d.ts +44 -23
  10. package/lib/model/Byline.d.ts +2 -2
  11. package/lib/model/Byline.js.map +1 -1
  12. package/lib/model/{CapiResponse.d.ts → Content.d.ts} +13 -12
  13. package/lib/model/{CapiResponse.js → Content.js} +14 -7
  14. package/lib/model/Content.js.map +1 -0
  15. package/lib/model/{CapiResponse.test.js → Content.test.js} +56 -15
  16. package/lib/model/Content.test.js.map +1 -0
  17. package/lib/model/LeadFlourish.d.ts +2 -2
  18. package/lib/model/LeadFlourish.js.map +1 -1
  19. package/lib/model/LeadFlourish.test.js +3 -3
  20. package/lib/model/LeadFlourish.test.js.map +1 -1
  21. package/lib/model/{CapiList.d.ts → List.d.ts} +5 -5
  22. package/lib/model/{CapiList.js → List.js} +5 -5
  23. package/lib/model/List.js.map +1 -0
  24. package/lib/model/RichText.d.ts +2 -2
  25. package/lib/model/RichText.js.map +1 -1
  26. package/lib/model/Topper.d.ts +2 -2
  27. package/lib/model/Topper.js.map +1 -1
  28. package/lib/model/Topper.test.js +22 -22
  29. package/lib/model/Topper.test.js.map +1 -1
  30. package/lib/model/schemas/capi/article.d.ts +5 -1
  31. package/lib/model/schemas/capi/article.js +1 -0
  32. package/lib/model/schemas/capi/article.js.map +1 -1
  33. package/lib/model/schemas/capi/audio.d.ts +5 -1
  34. package/lib/model/schemas/capi/audio.js +1 -0
  35. package/lib/model/schemas/capi/audio.js.map +1 -1
  36. package/lib/model/schemas/capi/base-schema.d.ts +5 -0
  37. package/lib/model/schemas/capi/base-schema.js +1 -0
  38. package/lib/model/schemas/capi/base-schema.js.map +1 -1
  39. package/lib/model/schemas/capi/content-package.d.ts +5 -1
  40. package/lib/model/schemas/capi/content-package.js +1 -0
  41. package/lib/model/schemas/capi/content-package.js.map +1 -1
  42. package/lib/model/schemas/capi/custom-code-component.d.ts +3 -0
  43. package/lib/model/schemas/capi/index.d.ts +28 -5
  44. package/lib/model/schemas/capi/live-blog-package.d.ts +5 -1
  45. package/lib/model/schemas/capi/live-blog-package.js +1 -0
  46. package/lib/model/schemas/capi/live-blog-package.js.map +1 -1
  47. package/lib/model/schemas/capi/placeholder.d.ts +5 -1
  48. package/lib/model/schemas/capi/placeholder.js +1 -0
  49. package/lib/model/schemas/capi/placeholder.js.map +1 -1
  50. package/lib/model/schemas/capi/video.d.ts +5 -1
  51. package/lib/model/schemas/capi/video.js +1 -0
  52. package/lib/model/schemas/capi/video.js.map +1 -1
  53. package/lib/resolvers/content-tree/references/CustomCodeComponent.js.map +1 -1
  54. package/lib/resolvers/content-tree/references/Recommended.d.ts +1 -1
  55. package/lib/resolvers/content-tree/references/index.d.ts +2 -2
  56. package/lib/resolvers/content-tree/tagMappings.d.ts +2 -2
  57. package/lib/resolvers/content-tree/tagMappings.js.map +1 -1
  58. package/lib/resolvers/content-tree/updateTreeWithReferenceIds.d.ts +2 -2
  59. package/lib/resolvers/content-tree/updateTreeWithReferenceIds.js.map +1 -1
  60. package/lib/resolvers/content.d.ts +251 -235
  61. package/lib/resolvers/content.js +27 -0
  62. package/lib/resolvers/content.js.map +1 -1
  63. package/lib/resolvers/core.d.ts +4 -4
  64. package/lib/resolvers/core.js +2 -2
  65. package/lib/resolvers/core.js.map +1 -1
  66. package/lib/resolvers/index.d.ts +278 -260
  67. package/lib/resolvers/list.d.ts +9 -9
  68. package/lib/resolvers/teaser.d.ts +15 -13
  69. package/lib/resolvers/teaser.js +2 -0
  70. package/lib/resolvers/teaser.js.map +1 -1
  71. package/package.json +1 -1
  72. package/queries/article.graphql +20 -0
  73. package/src/datasources/capi.test.ts +3 -3
  74. package/src/datasources/capi.ts +6 -9
  75. package/src/fixtures/dummyContext.ts +2 -2
  76. package/src/generated/index.ts +44 -23
  77. package/src/model/Byline.ts +2 -2
  78. package/src/model/{CapiResponse.test.ts → Content.test.ts} +65 -17
  79. package/src/model/{CapiResponse.ts → Content.ts} +24 -17
  80. package/src/model/LeadFlourish.test.ts +6 -5
  81. package/src/model/LeadFlourish.ts +2 -5
  82. package/src/model/{CapiList.ts → List.ts} +5 -5
  83. package/src/model/RichText.ts +2 -2
  84. package/src/model/Topper.test.ts +23 -26
  85. package/src/model/Topper.ts +2 -5
  86. package/src/model/schemas/capi/article.ts +1 -0
  87. package/src/model/schemas/capi/audio.ts +1 -0
  88. package/src/model/schemas/capi/base-schema.ts +1 -0
  89. package/src/model/schemas/capi/content-package.ts +1 -0
  90. package/src/model/schemas/capi/live-blog-package.ts +1 -0
  91. package/src/model/schemas/capi/placeholder.ts +1 -0
  92. package/src/model/schemas/capi/video.ts +1 -0
  93. package/src/resolvers/content-tree/references/CustomCodeComponent.ts +2 -2
  94. package/src/resolvers/content-tree/references/index.ts +2 -2
  95. package/src/resolvers/content-tree/tagMappings.ts +2 -2
  96. package/src/resolvers/content-tree/updateTreeWithReferenceIds.ts +2 -2
  97. package/src/resolvers/content.ts +27 -0
  98. package/src/resolvers/core.ts +2 -2
  99. package/src/resolvers/teaser.ts +2 -0
  100. package/tsconfig.tsbuildinfo +1 -1
  101. package/typedefs/content.graphql +19 -1
  102. package/typedefs/teaser.graphql +3 -0
  103. package/lib/model/CapiList.js.map +0 -1
  104. package/lib/model/CapiResponse.js.map +0 -1
  105. package/lib/model/CapiResponse.test.js.map +0 -1
  106. /package/lib/model/{CapiResponse.test.d.ts → Content.test.d.ts} +0 -0
@@ -3,7 +3,7 @@ import { CustomCodeComponentResolvers } from '../../../generated'
3
3
  import { ReferenceWithCAPIData } from '.'
4
4
  import { ContentTree } from '@financial-times/content-tree'
5
5
  import { RichText } from '../../../model/RichText'
6
- import { CapiResponse } from '../../../model/CapiResponse'
6
+ import { Content } from '../../../model/Content'
7
7
  import type { QueryContext } from '../../..'
8
8
  import isError from '../../../helpers/isError'
9
9
  import { OperationalError } from '@dotcom-reliability-kit/errors'
@@ -18,7 +18,7 @@ async function getReferencesFromBody(
18
18
  return null
19
19
  }
20
20
 
21
- let customCodeComponentContentData: CapiResponse
21
+ let customCodeComponentContentData: Content
22
22
  try {
23
23
  customCodeComponentContentData = await context.dataSources.capi.getContent(
24
24
  uuidFromUrl(customCodeComponentEmbedData.apiUrl)
@@ -1,5 +1,5 @@
1
1
  import type { ContentTree } from '@financial-times/content-tree'
2
- import type { CapiResponse } from '../../../model/CapiResponse'
2
+ import type { Content } from '../../../model/Content'
3
3
 
4
4
  import { Reference } from './Reference'
5
5
 
@@ -35,7 +35,7 @@ import { Author } from './Author'
35
35
 
36
36
  export type ReferenceWithCAPIData<ReferenceType = ContentTree.Node> = {
37
37
  reference: ReferenceType
38
- contentApiData?: CapiResponse
38
+ contentApiData?: Content
39
39
  }
40
40
 
41
41
  export const resolvers: {
@@ -21,7 +21,7 @@ import {
21
21
 
22
22
  import * as scrollytelling from '@financial-times/n-scrollytelling-image/server'
23
23
  import { LiteralToPrimitiveDeep } from 'type-fest'
24
- import { CapiResponse } from '../../model/CapiResponse'
24
+ import { Content } from '../../model/Content'
25
25
  import type { Cheerio, Element } from 'cheerio'
26
26
 
27
27
  const tableResponsiveStyleMap: Record<string, Table['responsiveStyle']> = {
@@ -85,7 +85,7 @@ const validScrollytellingOption = <
85
85
  : false
86
86
  }
87
87
 
88
- const articleTagMappings = (capiData?: CapiResponse): TagMappings => ({
88
+ const articleTagMappings = (capiData?: Content): TagMappings => ({
89
89
  'body > ft-content[type="http://www.ft.com/ontology/content/ImageSet"]:first-child':
90
90
  ($el) => ({
91
91
  // CustomCodeComponent uses an inner bodyXML parsed as a RichText
@@ -1,5 +1,5 @@
1
1
  import { ContentTree } from '@financial-times/content-tree'
2
- import { CapiResponse } from '../../model/CapiResponse'
2
+ import { Content } from '../../model/Content'
3
3
  import { ReferenceWithCAPIData, mapNodeToReference } from './references'
4
4
 
5
5
  function isParent(node: ContentTree.Node): node is ContentTree.Parent {
@@ -12,7 +12,7 @@ const isValidReferenceType = (
12
12
 
13
13
  export default function updateTreeWithReferenceIds(
14
14
  tree: ContentTree.Parent,
15
- contentApiData?: CapiResponse
15
+ contentApiData?: Content
16
16
  ): {
17
17
  tree: ContentTree.Parent
18
18
  references: ReferenceWithCAPIData[]
@@ -98,6 +98,7 @@ const resolvers = {
98
98
  indicators: (parent) => {
99
99
  return {
100
100
  isPartnerContent: parent.isPartnerContent(),
101
+ isFTEdit: parent.isFTEdit(),
101
102
  }
102
103
  },
103
104
  },
@@ -105,6 +106,11 @@ const resolvers = {
105
106
  Placeholder: {
106
107
  ...contentResolvers,
107
108
  containedIn: (parent) => parent.containedIn(),
109
+ indicators(parent) {
110
+ return {
111
+ isFTEdit: parent.isFTEdit(),
112
+ }
113
+ },
108
114
  },
109
115
 
110
116
  LiveBlogPost: {
@@ -131,6 +137,11 @@ const resolvers = {
131
137
  }),
132
138
  pinnedPost: (parent) => parent.pinnedPost(),
133
139
  realtime: (parent) => parent.realtime(),
140
+ indicators(parent) {
141
+ return {
142
+ isFTEdit: parent.isFTEdit(),
143
+ }
144
+ },
134
145
  },
135
146
 
136
147
  ContentPackage: {
@@ -138,6 +149,11 @@ const resolvers = {
138
149
  contains: (parent, args) => parent.contains(args),
139
150
  tableOfContents: (parent) => parent.tableOfContents(),
140
151
  containsLength: (parent) => parent.containsLength(),
152
+ indicators(parent) {
153
+ return {
154
+ isFTEdit: parent.isFTEdit(),
155
+ }
156
+ },
141
157
  },
142
158
 
143
159
  Audio: {
@@ -146,10 +162,20 @@ const resolvers = {
146
162
  // TODO:20230712:IM should probably return captions too
147
163
  parent.media()?.filter(({ mediaType }) => mediaType === 'audio/mpeg') ??
148
164
  null,
165
+ indicators(parent) {
166
+ return {
167
+ isFTEdit: parent.isFTEdit(),
168
+ }
169
+ },
149
170
  },
150
171
 
151
172
  Video: {
152
173
  ...contentResolvers,
174
+ indicators(parent) {
175
+ return {
176
+ isFTEdit: parent.isFTEdit(),
177
+ }
178
+ },
153
179
  },
154
180
 
155
181
  AltStandfirst: {
@@ -168,6 +194,7 @@ const resolvers = {
168
194
  // TODO:20240829:IM Rename this to ContentIndicators to clearly differentiate
169
195
  // it from other Indicators types in the next major release.
170
196
  Indicators: {
197
+ isFTEdit: (parent) => parent.isFTEdit ?? null,
171
198
  isOpinion: (parent) => parent.isOpinion ?? null,
172
199
  isPartnerContent: (parent) => parent.isPartnerContent ?? null,
173
200
  },
@@ -1,7 +1,7 @@
1
1
  import fs from 'fs'
2
2
  import path from 'path'
3
3
  import { QueryResolvers, MutationResolvers } from '../generated'
4
- import { CapiResponse } from '../model/CapiResponse'
4
+ import { Content } from '../model/Content'
5
5
  import { BaseError, HttpError } from '@dotcom-reliability-kit/errors'
6
6
 
7
7
  const packageJson = JSON.parse(
@@ -59,7 +59,7 @@ const resolvers = {
59
59
  return context.dataSources.capi.getList(args.uuid)
60
60
  },
61
61
  contentFromJSON(_, { content }, context) {
62
- return CapiResponse.fromJSON(content, context)
62
+ return Content.fromJSON(content, context)
63
63
  },
64
64
  },
65
65
  Mutation: {
@@ -24,6 +24,7 @@ const resolvers = {
24
24
  isEditorsChoice: parent.isEditorsChoice(),
25
25
  isExclusive: parent.isExclusive(),
26
26
  isScoop: parent.isScoop(),
27
+ isFTEdit: parent.isFTEdit(),
27
28
  }
28
29
  },
29
30
  standfirst: (parent) => parent.standfirst(),
@@ -41,6 +42,7 @@ const resolvers = {
41
42
  isEditorsChoice: (parent) => parent.isEditorsChoice ?? null,
42
43
  isExclusive: (parent) => parent.isExclusive ?? null,
43
44
  isScoop: (parent) => parent.isScoop ?? null,
45
+ isFTEdit: (parent) => parent.isFTEdit ?? null,
44
46
  },
45
47
  } satisfies {
46
48
  Teaser: TeaserResolvers