@financial-times/cp-content-pipeline-schema 3.10.0 → 3.12.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.
- package/CHANGELOG.md +15 -0
- package/lib/generated/index.d.ts +23 -4
- package/lib/model/Content.d.ts +3 -0
- package/lib/model/Content.js +24 -0
- package/lib/model/Content.js.map +1 -1
- package/lib/model/Content.test.js +66 -0
- package/lib/model/Content.test.js.map +1 -1
- package/lib/model/schemas/capi/article.d.ts +5 -1
- package/lib/model/schemas/capi/article.js +1 -0
- package/lib/model/schemas/capi/article.js.map +1 -1
- package/lib/model/schemas/capi/audio.d.ts +2 -0
- package/lib/model/schemas/capi/base-schema.d.ts +5 -0
- package/lib/model/schemas/capi/base-schema.js +8 -0
- package/lib/model/schemas/capi/base-schema.js.map +1 -1
- package/lib/model/schemas/capi/content-package.d.ts +2 -0
- package/lib/model/schemas/capi/custom-code-component.d.ts +3 -0
- package/lib/model/schemas/capi/index.d.ts +13 -0
- package/lib/model/schemas/capi/live-blog-package.d.ts +2 -0
- package/lib/model/schemas/capi/placeholder.d.ts +2 -0
- package/lib/model/schemas/capi/video.d.ts +2 -0
- package/lib/resolvers/content-tree/Workarounds.d.ts +2 -8
- package/lib/resolvers/content-tree/references/Video.d.ts +3 -3
- package/lib/resolvers/content-tree/tagMappings.js +0 -1
- package/lib/resolvers/content-tree/tagMappings.js.map +1 -1
- package/lib/resolvers/content.d.ts +5 -0
- package/lib/resolvers/content.js +5 -0
- package/lib/resolvers/content.js.map +1 -1
- package/lib/resolvers/index.d.ts +6 -0
- package/lib/resolvers/scalars.d.ts +2 -0
- package/lib/resolvers/scalars.js +11 -1
- package/lib/resolvers/scalars.js.map +1 -1
- package/package.json +2 -2
- package/queries/article.graphql +3 -0
- package/src/generated/index.ts +21 -4
- package/src/model/Content.test.ts +82 -0
- package/src/model/Content.ts +32 -0
- package/src/model/schemas/capi/article.ts +1 -0
- package/src/model/schemas/capi/base-schema.ts +8 -0
- package/src/resolvers/content-tree/Workarounds.ts +2 -9
- package/src/resolvers/content-tree/tagMappings.ts +0 -1
- package/src/resolvers/content.ts +5 -0
- package/src/resolvers/scalars.ts +18 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/typedefs/content.graphql +9 -0
- package/typedefs/scalars.graphql +1 -0
package/src/generated/index.ts
CHANGED
|
@@ -12,7 +12,7 @@ import type { LeadFlourish as LeadFlourishModel } from '../model/LeadFlourish';
|
|
|
12
12
|
import type { FlourishSource as FlourishSourceModel } from '../model/FlourishSource';
|
|
13
13
|
import type { ContentTree } from '@financial-times/content-tree';
|
|
14
14
|
import type { ReferenceWithCAPIData } from '../resolvers/content-tree/references';
|
|
15
|
-
import type {
|
|
15
|
+
import type { Author as AuthorNode, ClipSet as ClipSetNode, OldClip as OldClipNode, RawImage as RawImageNode } from '../resolvers/content-tree/Workarounds';
|
|
16
16
|
import type { QueryContext } from '../';
|
|
17
17
|
export type Maybe<T> = T | null;
|
|
18
18
|
export type InputMaybe<T> = Maybe<T>;
|
|
@@ -34,6 +34,7 @@ export type Scalars = {
|
|
|
34
34
|
CanBeSyndicated: { input: 'yes' | 'no' | 'verify' | 'withContributorPayment' | 'unknown'; output: 'yes' | 'no' | 'verify' | 'withContributorPayment' | 'unknown'; }
|
|
35
35
|
ClipFormat: { input: 'standard-inline' | 'mobile'; output: 'standard-inline' | 'mobile'; }
|
|
36
36
|
ContentType: { input: 'Article' | 'Placeholder' | 'Video' | 'Audio' | 'LiveBlogPackage' | 'LiveBlogPost' | 'ContentPackage' | 'Content' | 'MediaResource' | 'CustomCodeComponent'; output: 'Article' | 'Placeholder' | 'Video' | 'Audio' | 'LiveBlogPackage' | 'LiveBlogPost' | 'ContentPackage' | 'Content' | 'MediaResource' | 'CustomCodeComponent'; }
|
|
37
|
+
DisclaimerType: { input: 'co-created-content' | 'client-supplied-content' | 'ft-studios-risky' | 'auditor'; output: 'co-created-content' | 'client-supplied-content' | 'ft-studios-risky' | 'auditor'; }
|
|
37
38
|
FollowButtonVariant: { input: 'standard' | 'inverse' | 'opinion' | 'alphaville' | 'monochrome' | 'inverse-monochrome'; output: 'standard' | 'inverse' | 'opinion' | 'alphaville' | 'monochrome' | 'inverse-monochrome'; }
|
|
38
39
|
ImageFormat: { input: 'standard' | 'standard-inline' | 'desktop' | 'mobile' | 'wide' | 'square' | 'square-ftedit' | 'portrait' | 'landscape'; output: 'standard' | 'standard-inline' | 'desktop' | 'mobile' | 'wide' | 'square' | 'square-ftedit' | 'portrait' | 'landscape'; }
|
|
39
40
|
ImageType: { input: 'image' | 'graphic'; output: 'image' | 'graphic'; }
|
|
@@ -87,6 +88,8 @@ export type Article = Content & {
|
|
|
87
88
|
readonly containedIn?: Maybe<Content>;
|
|
88
89
|
/** A design object containing the theme and layout of the article. */
|
|
89
90
|
readonly design?: Maybe<Design>;
|
|
91
|
+
/** Disclaimer type for commercial Partner Content articles */
|
|
92
|
+
readonly disclaimerType?: Maybe<Scalars['DisclaimerType']['output']>;
|
|
90
93
|
/** The editorial division the article belongs to, eg. 'FT-SpecialReports'. */
|
|
91
94
|
readonly editorialDesk?: Maybe<Scalars['String']['output']>;
|
|
92
95
|
/** The first ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
|
|
@@ -1054,8 +1057,12 @@ export type ImageWideSourceSetArgs = {
|
|
|
1054
1057
|
};
|
|
1055
1058
|
|
|
1056
1059
|
export type Indicators = {
|
|
1060
|
+
/** Whether an article is in an archived state */
|
|
1061
|
+
readonly isArchived?: Maybe<Scalars['Boolean']['output']>;
|
|
1057
1062
|
/** Whether the article is included in an FT Edit editorial curation. */
|
|
1058
1063
|
readonly isFTEdit?: Maybe<Scalars['Boolean']['output']>;
|
|
1064
|
+
/** Whether an article is a Live Q&A */
|
|
1065
|
+
readonly isLiveQandA?: Maybe<Scalars['Boolean']['output']>;
|
|
1059
1066
|
/** Whether the content is an opinion piece. */
|
|
1060
1067
|
readonly isOpinion?: Maybe<Scalars['Boolean']['output']>;
|
|
1061
1068
|
/** Whether the content is Commercial Partner Content. */
|
|
@@ -1990,7 +1997,7 @@ export type ResolversInterfaceTypes<RefType extends Record<string, unknown>> = R
|
|
|
1990
1997
|
Content: ( ContentModel ) | ( ContentModel ) | ( ContentModel ) | ( ContentModel ) | ( ContentModel ) | ( ContentModel ) | ( ContentModel );
|
|
1991
1998
|
Image: ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel );
|
|
1992
1999
|
Picture: ( PictureModel ) | ( PictureModel ) | ( PictureModel );
|
|
1993
|
-
Reference: ( ReferenceWithCAPIData<AuthorNode> ) | ( ReferenceWithCAPIData<ClipSetNode|OldClipNode> ) | ( ReferenceWithCAPIData<ContentTree.CustomCodeComponent> ) | ( ReferenceWithCAPIData<ContentTree.Flourish> ) | ( ReferenceWithCAPIData<ContentTree.ImageSet> ) | ( ReferenceWithCAPIData<ContentTree.LayoutImage> ) | ( ReferenceWithCAPIData<ContentTree.ImageSet> ) | ( ReferenceWithCAPIData<RawImageNode> ) | ( ReferenceWithCAPIData<ContentTree.Recommended> ) | ( ReferenceWithCAPIData<ContentTree.ScrollyImage> ) | ( ReferenceWithCAPIData<ContentTree.Tweet> ) | ( ReferenceWithCAPIData<
|
|
2000
|
+
Reference: ( ReferenceWithCAPIData<AuthorNode> ) | ( ReferenceWithCAPIData<ClipSetNode|OldClipNode> ) | ( ReferenceWithCAPIData<ContentTree.CustomCodeComponent> ) | ( ReferenceWithCAPIData<ContentTree.Flourish> ) | ( ReferenceWithCAPIData<ContentTree.ImageSet> ) | ( ReferenceWithCAPIData<ContentTree.LayoutImage> ) | ( ReferenceWithCAPIData<ContentTree.ImageSet> ) | ( ReferenceWithCAPIData<RawImageNode> ) | ( ReferenceWithCAPIData<ContentTree.Recommended> ) | ( ReferenceWithCAPIData<ContentTree.ScrollyImage> ) | ( ReferenceWithCAPIData<ContentTree.Tweet> ) | ( ReferenceWithCAPIData<ContentTree.Video> );
|
|
1994
2001
|
Topper: ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel );
|
|
1995
2002
|
TopperWithBrand: ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel ) | ( TopperModel );
|
|
1996
2003
|
TopperWithHeadshot: ( TopperModel ) | ( TopperModel );
|
|
@@ -2029,6 +2036,7 @@ export type ResolversTypes = ResolversObject<{
|
|
|
2029
2036
|
DeepLandscapeTopper: ResolverTypeWrapper<TopperModel>;
|
|
2030
2037
|
DeepPortraitTopper: ResolverTypeWrapper<TopperModel>;
|
|
2031
2038
|
Design: ResolverTypeWrapper<Design>;
|
|
2039
|
+
DisclaimerType: ResolverTypeWrapper<Scalars['DisclaimerType']['output']>;
|
|
2032
2040
|
Float: ResolverTypeWrapper<Scalars['Float']['output']>;
|
|
2033
2041
|
Flourish: ResolverTypeWrapper<ReferenceWithCAPIData<ContentTree.Flourish>>;
|
|
2034
2042
|
FlourishSource: ResolverTypeWrapper<FlourishSourceModel>;
|
|
@@ -2097,7 +2105,7 @@ export type ResolversTypes = ResolversObject<{
|
|
|
2097
2105
|
TopperWithTheme: ResolverTypeWrapper<TopperModel>;
|
|
2098
2106
|
Tweet: ResolverTypeWrapper<ReferenceWithCAPIData<ContentTree.Tweet>>;
|
|
2099
2107
|
Video: ResolverTypeWrapper<ContentModel>;
|
|
2100
|
-
VideoReference: ResolverTypeWrapper<ReferenceWithCAPIData<
|
|
2108
|
+
VideoReference: ResolverTypeWrapper<ReferenceWithCAPIData<ContentTree.Video>>;
|
|
2101
2109
|
}>;
|
|
2102
2110
|
|
|
2103
2111
|
/** Mapping between all available schema types and the resolvers parents */
|
|
@@ -2130,6 +2138,7 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
2130
2138
|
DeepLandscapeTopper: TopperModel;
|
|
2131
2139
|
DeepPortraitTopper: TopperModel;
|
|
2132
2140
|
Design: Design;
|
|
2141
|
+
DisclaimerType: Scalars['DisclaimerType']['output'];
|
|
2133
2142
|
Float: Scalars['Float']['output'];
|
|
2134
2143
|
Flourish: ReferenceWithCAPIData<ContentTree.Flourish>;
|
|
2135
2144
|
FlourishSource: FlourishSourceModel;
|
|
@@ -2198,7 +2207,7 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
2198
2207
|
TopperWithTheme: TopperModel;
|
|
2199
2208
|
Tweet: ReferenceWithCAPIData<ContentTree.Tweet>;
|
|
2200
2209
|
Video: ContentModel;
|
|
2201
|
-
VideoReference: ReferenceWithCAPIData<
|
|
2210
|
+
VideoReference: ReferenceWithCAPIData<ContentTree.Video>;
|
|
2202
2211
|
}>;
|
|
2203
2212
|
|
|
2204
2213
|
export interface AccessLevelScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['AccessLevel'], any> {
|
|
@@ -2234,6 +2243,7 @@ export type ArticleResolvers<ContextType = QueryContext, ParentType extends Reso
|
|
|
2234
2243
|
commentsEnabled: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2235
2244
|
containedIn: Resolver<Maybe<ResolversTypes['Content']>, ParentType, ContextType>;
|
|
2236
2245
|
design: Resolver<Maybe<ResolversTypes['Design']>, ParentType, ContextType>;
|
|
2246
|
+
disclaimerType: Resolver<Maybe<ResolversTypes['DisclaimerType']>, ParentType, ContextType>;
|
|
2237
2247
|
editorialDesk: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2238
2248
|
firstPublishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
|
2239
2249
|
id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
|
@@ -2547,6 +2557,10 @@ export type DesignResolvers<ContextType = QueryContext, ParentType extends Resol
|
|
|
2547
2557
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
2548
2558
|
}>;
|
|
2549
2559
|
|
|
2560
|
+
export interface DisclaimerTypeScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['DisclaimerType'], any> {
|
|
2561
|
+
name: 'DisclaimerType';
|
|
2562
|
+
}
|
|
2563
|
+
|
|
2550
2564
|
export type FlourishResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Flourish'] = ResolversParentTypes['Flourish']> = ResolversObject<{
|
|
2551
2565
|
fallbackImage: Resolver<Maybe<ResolversTypes['FlourishSource']>, ParentType, ContextType>;
|
|
2552
2566
|
type: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
|
@@ -2746,7 +2760,9 @@ export type ImageWideResolvers<ContextType = QueryContext, ParentType extends Re
|
|
|
2746
2760
|
}>;
|
|
2747
2761
|
|
|
2748
2762
|
export type IndicatorsResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Indicators'] = ResolversParentTypes['Indicators']> = ResolversObject<{
|
|
2763
|
+
isArchived: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2749
2764
|
isFTEdit: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2765
|
+
isLiveQandA: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2750
2766
|
isOpinion: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2751
2767
|
isPartnerContent: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2752
2768
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
@@ -3261,6 +3277,7 @@ export type Resolvers<ContextType = QueryContext> = ResolversObject<{
|
|
|
3261
3277
|
DeepLandscapeTopper: DeepLandscapeTopperResolvers<ContextType>;
|
|
3262
3278
|
DeepPortraitTopper: DeepPortraitTopperResolvers<ContextType>;
|
|
3263
3279
|
Design: DesignResolvers<ContextType>;
|
|
3280
|
+
DisclaimerType: GraphQLScalarType;
|
|
3264
3281
|
Flourish: FlourishResolvers<ContextType>;
|
|
3265
3282
|
FlourishSource: FlourishSourceResolvers<ContextType>;
|
|
3266
3283
|
FollowButtonVariant: GraphQLScalarType;
|
|
@@ -325,4 +325,86 @@ describe('Content', () => {
|
|
|
325
325
|
expect(capiResponse.isFTEdit()).toBe(false)
|
|
326
326
|
})
|
|
327
327
|
})
|
|
328
|
+
|
|
329
|
+
describe('isLiveQandA', () => {
|
|
330
|
+
test('identifies articles that are Live Q&As', () => {
|
|
331
|
+
const article = cloneDeep({
|
|
332
|
+
...baseCapiObject,
|
|
333
|
+
internalAnalyticsTags: 'someStringHereisLiveQandAsomethingElse',
|
|
334
|
+
})
|
|
335
|
+
const capiResponse = new Content(article, context)
|
|
336
|
+
|
|
337
|
+
expect(capiResponse.isLiveQandA()).toBe(true)
|
|
338
|
+
})
|
|
339
|
+
|
|
340
|
+
test('ignores articles that are not Live Q&As', () => {
|
|
341
|
+
const article = cloneDeep({
|
|
342
|
+
...baseCapiObject,
|
|
343
|
+
internalAnalyticsTags: 'testSomethingThatisNotALiveQ&A',
|
|
344
|
+
})
|
|
345
|
+
const capiResponse = new Content(article, context)
|
|
346
|
+
|
|
347
|
+
expect(capiResponse.isLiveQandA()).toBe(false)
|
|
348
|
+
})
|
|
349
|
+
|
|
350
|
+
test('handles missing `internalAnalyticsTags` property', () => {
|
|
351
|
+
const article = cloneDeep({
|
|
352
|
+
...baseCapiObject,
|
|
353
|
+
})
|
|
354
|
+
const capiResponse = new Content(article, context)
|
|
355
|
+
|
|
356
|
+
expect(capiResponse.isLiveQandA()).toBe(false)
|
|
357
|
+
})
|
|
358
|
+
|
|
359
|
+
test('is case-insensitive', () => {
|
|
360
|
+
const article = cloneDeep({
|
|
361
|
+
...baseCapiObject,
|
|
362
|
+
internalAnalyticsTags: 'LIVeQaNdA',
|
|
363
|
+
})
|
|
364
|
+
const capiResponse = new Content(article, context)
|
|
365
|
+
|
|
366
|
+
expect(capiResponse.isLiveQandA()).toBe(true)
|
|
367
|
+
})
|
|
368
|
+
})
|
|
369
|
+
|
|
370
|
+
describe('isArchived', () => {
|
|
371
|
+
test('identifies articles that are archived', () => {
|
|
372
|
+
const article = cloneDeep({
|
|
373
|
+
...baseCapiObject,
|
|
374
|
+
internalAnalyticsTags: 'something archived somethng else',
|
|
375
|
+
})
|
|
376
|
+
const capiResponse = new Content(article, context)
|
|
377
|
+
|
|
378
|
+
expect(capiResponse.isArchived()).toBe(true)
|
|
379
|
+
})
|
|
380
|
+
|
|
381
|
+
test('ignores articles that are not archived', () => {
|
|
382
|
+
const article = cloneDeep({
|
|
383
|
+
...baseCapiObject,
|
|
384
|
+
internalAnalyticsTags: 'archive will not match, it misses the d',
|
|
385
|
+
})
|
|
386
|
+
const capiResponse = new Content(article, context)
|
|
387
|
+
|
|
388
|
+
expect(capiResponse.isArchived()).toBe(false)
|
|
389
|
+
})
|
|
390
|
+
|
|
391
|
+
test('handles missing `internalAnalyticsTags` property', () => {
|
|
392
|
+
const article = cloneDeep({
|
|
393
|
+
...baseCapiObject,
|
|
394
|
+
})
|
|
395
|
+
const capiResponse = new Content(article, context)
|
|
396
|
+
|
|
397
|
+
expect(capiResponse.isArchived()).toBe(false)
|
|
398
|
+
})
|
|
399
|
+
|
|
400
|
+
test('is case-insensitive', () => {
|
|
401
|
+
const article = cloneDeep({
|
|
402
|
+
...baseCapiObject,
|
|
403
|
+
internalAnalyticsTags: 'ArChIvEd',
|
|
404
|
+
})
|
|
405
|
+
const capiResponse = new Content(article, context)
|
|
406
|
+
|
|
407
|
+
expect(capiResponse.isArchived()).toBe(true)
|
|
408
|
+
})
|
|
409
|
+
})
|
|
328
410
|
})
|
package/src/model/Content.ts
CHANGED
|
@@ -941,6 +941,32 @@ export class Content {
|
|
|
941
941
|
return false
|
|
942
942
|
}
|
|
943
943
|
|
|
944
|
+
isLiveQandA(): boolean {
|
|
945
|
+
if (
|
|
946
|
+
'internalAnalyticsTags' in this.capiData &&
|
|
947
|
+
this.capiData.internalAnalyticsTags
|
|
948
|
+
) {
|
|
949
|
+
return this.capiData.internalAnalyticsTags
|
|
950
|
+
.toLowerCase()
|
|
951
|
+
.includes('liveqanda')
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
return false
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
isArchived(): boolean {
|
|
958
|
+
if (
|
|
959
|
+
'internalAnalyticsTags' in this.capiData &&
|
|
960
|
+
this.capiData.internalAnalyticsTags
|
|
961
|
+
) {
|
|
962
|
+
return this.capiData.internalAnalyticsTags
|
|
963
|
+
.toLowerCase()
|
|
964
|
+
.includes('archived')
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
return false
|
|
968
|
+
}
|
|
969
|
+
|
|
944
970
|
design(): Design {
|
|
945
971
|
if ('design' in this.capiData && this.capiData.design.theme) {
|
|
946
972
|
return { theme: this.capiData.design.theme }
|
|
@@ -976,4 +1002,10 @@ export class Content {
|
|
|
976
1002
|
}
|
|
977
1003
|
return null
|
|
978
1004
|
}
|
|
1005
|
+
disclaimerType() {
|
|
1006
|
+
if ('disclaimerType' in this.capiData && this.capiData.disclaimerType) {
|
|
1007
|
+
return this.capiData.disclaimerType
|
|
1008
|
+
}
|
|
1009
|
+
return null
|
|
1010
|
+
}
|
|
979
1011
|
}
|
|
@@ -235,6 +235,14 @@ export const baseMetadataSchema = z.object({
|
|
|
235
235
|
.optional(),
|
|
236
236
|
publication: z.array(z.string()).optional(),
|
|
237
237
|
clientName: z.string().optional(),
|
|
238
|
+
disclaimerType: z
|
|
239
|
+
.union([
|
|
240
|
+
z.literal('co-created-content'),
|
|
241
|
+
z.literal('client-supplied-content'),
|
|
242
|
+
z.literal('ft-studios-risky'),
|
|
243
|
+
z.literal('auditor'),
|
|
244
|
+
])
|
|
245
|
+
.optional(),
|
|
238
246
|
internalAnalyticsTags: z.string().optional(),
|
|
239
247
|
})
|
|
240
248
|
|
|
@@ -68,13 +68,6 @@ export type MainImageRaw = Omit<RawImage, 'type'> & {
|
|
|
68
68
|
type: 'main-image-raw'
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
export interface Video extends ContentTree.Node {
|
|
72
|
-
type: 'video'
|
|
73
|
-
id: string
|
|
74
|
-
title?: string
|
|
75
|
-
embedded: boolean
|
|
76
|
-
}
|
|
77
|
-
|
|
78
71
|
export interface CccFallbackText extends ContentTree.Node {
|
|
79
72
|
type: 'ccc-fallback-text'
|
|
80
73
|
children: ContentTree.Paragraph[]
|
|
@@ -205,7 +198,7 @@ export type BodyBlock =
|
|
|
205
198
|
| Table
|
|
206
199
|
| Recommended
|
|
207
200
|
| ContentTree.Tweet
|
|
208
|
-
| Video
|
|
201
|
+
| ContentTree.Video
|
|
209
202
|
| ContentTree.YoutubeVideo
|
|
210
203
|
|
|
211
204
|
export type AnyNode =
|
|
@@ -247,7 +240,7 @@ export type AnyNode =
|
|
|
247
240
|
| TableBody
|
|
248
241
|
| TableRow
|
|
249
242
|
| TableCell
|
|
250
|
-
| Video
|
|
243
|
+
| ContentTree.Video
|
|
251
244
|
| ContentTree.YoutubeVideo
|
|
252
245
|
| MainImage
|
|
253
246
|
| MainImageRaw
|
package/src/resolvers/content.ts
CHANGED
|
@@ -95,10 +95,13 @@ const resolvers = {
|
|
|
95
95
|
containedIn: (parent) => parent.containedIn(),
|
|
96
96
|
publication: (parent) => parent.publication() ?? null,
|
|
97
97
|
clientName: (parent) => parent.clientName() ?? null,
|
|
98
|
+
disclaimerType: (parent) => parent.disclaimerType() ?? null,
|
|
98
99
|
indicators: (parent) => {
|
|
99
100
|
return {
|
|
100
101
|
isPartnerContent: parent.isPartnerContent(),
|
|
101
102
|
isFTEdit: parent.isFTEdit(),
|
|
103
|
+
isLiveQandA: parent.isLiveQandA(),
|
|
104
|
+
isArchived: parent.isArchived(),
|
|
102
105
|
}
|
|
103
106
|
},
|
|
104
107
|
},
|
|
@@ -197,6 +200,8 @@ const resolvers = {
|
|
|
197
200
|
isFTEdit: (parent) => parent.isFTEdit ?? null,
|
|
198
201
|
isOpinion: (parent) => parent.isOpinion ?? null,
|
|
199
202
|
isPartnerContent: (parent) => parent.isPartnerContent ?? null,
|
|
203
|
+
isLiveQandA: (parent) => parent.isLiveQandA ?? null,
|
|
204
|
+
isArchived: (parent) => parent.isArchived ?? null,
|
|
200
205
|
},
|
|
201
206
|
|
|
202
207
|
Media: {
|
package/src/resolvers/scalars.ts
CHANGED
|
@@ -175,6 +175,23 @@ export const LayoutHint = new LiteralUnionScalar<
|
|
|
175
175
|
values: ['standaloneimage', 'landscape', 'bigstory', 'assassination'],
|
|
176
176
|
})
|
|
177
177
|
|
|
178
|
+
export const DisclaimerType = new LiteralUnionScalar<
|
|
179
|
+
[
|
|
180
|
+
'co-created-content',
|
|
181
|
+
'client-supplied-content',
|
|
182
|
+
'ft-studios-risky',
|
|
183
|
+
'auditor'
|
|
184
|
+
]
|
|
185
|
+
>({
|
|
186
|
+
name: 'DisclaimerType',
|
|
187
|
+
values: [
|
|
188
|
+
'co-created-content',
|
|
189
|
+
'client-supplied-content',
|
|
190
|
+
'ft-studios-risky',
|
|
191
|
+
'auditor',
|
|
192
|
+
],
|
|
193
|
+
})
|
|
194
|
+
|
|
178
195
|
const resolvers = {
|
|
179
196
|
ClipFormat,
|
|
180
197
|
ImageFormat,
|
|
@@ -188,6 +205,7 @@ const resolvers = {
|
|
|
188
205
|
ContentType,
|
|
189
206
|
ListType,
|
|
190
207
|
LayoutHint,
|
|
208
|
+
DisclaimerType,
|
|
191
209
|
JSON: new GraphQLScalarType({ name: 'JSON' }),
|
|
192
210
|
}
|
|
193
211
|
|