@financial-times/cp-content-pipeline-schema 3.7.2 → 3.8.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 +19 -0
- package/lib/datasources/capi.d.ts +4 -4
- package/lib/datasources/capi.js +4 -4
- package/lib/datasources/capi.js.map +1 -1
- package/lib/datasources/capi.test.js +3 -3
- package/lib/datasources/capi.test.js.map +1 -1
- package/lib/fixtures/dummyContext.js +2 -2
- package/lib/fixtures/dummyContext.js.map +1 -1
- package/lib/generated/index.d.ts +41 -23
- package/lib/model/Byline.d.ts +2 -2
- package/lib/model/Byline.js.map +1 -1
- package/lib/model/{CapiResponse.d.ts → Content.d.ts} +13 -12
- package/lib/model/{CapiResponse.js → Content.js} +14 -7
- package/lib/model/Content.js.map +1 -0
- package/lib/model/{CapiResponse.test.js → Content.test.js} +56 -15
- package/lib/model/Content.test.js.map +1 -0
- package/lib/model/LeadFlourish.d.ts +2 -2
- package/lib/model/LeadFlourish.js.map +1 -1
- package/lib/model/LeadFlourish.test.js +3 -3
- package/lib/model/LeadFlourish.test.js.map +1 -1
- package/lib/model/{CapiList.d.ts → List.d.ts} +5 -5
- package/lib/model/{CapiList.js → List.js} +5 -5
- package/lib/model/List.js.map +1 -0
- package/lib/model/RichText.d.ts +2 -2
- package/lib/model/RichText.js.map +1 -1
- package/lib/model/Topper.d.ts +2 -2
- package/lib/model/Topper.js.map +1 -1
- package/lib/model/Topper.test.js +22 -22
- package/lib/model/Topper.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 +5 -1
- package/lib/model/schemas/capi/audio.js +1 -0
- package/lib/model/schemas/capi/audio.js.map +1 -1
- package/lib/model/schemas/capi/base-schema.d.ts +5 -0
- package/lib/model/schemas/capi/base-schema.js +1 -0
- package/lib/model/schemas/capi/base-schema.js.map +1 -1
- package/lib/model/schemas/capi/content-package.d.ts +5 -1
- package/lib/model/schemas/capi/content-package.js +1 -0
- package/lib/model/schemas/capi/content-package.js.map +1 -1
- package/lib/model/schemas/capi/custom-code-component.d.ts +3 -0
- package/lib/model/schemas/capi/index.d.ts +28 -5
- package/lib/model/schemas/capi/live-blog-package.d.ts +5 -1
- package/lib/model/schemas/capi/live-blog-package.js +1 -0
- package/lib/model/schemas/capi/live-blog-package.js.map +1 -1
- package/lib/model/schemas/capi/placeholder.d.ts +5 -1
- package/lib/model/schemas/capi/placeholder.js +1 -0
- package/lib/model/schemas/capi/placeholder.js.map +1 -1
- package/lib/model/schemas/capi/video.d.ts +5 -1
- package/lib/model/schemas/capi/video.js +1 -0
- package/lib/model/schemas/capi/video.js.map +1 -1
- package/lib/resolvers/content-tree/references/CustomCodeComponent.js.map +1 -1
- package/lib/resolvers/content-tree/references/Recommended.d.ts +1 -1
- package/lib/resolvers/content-tree/references/index.d.ts +2 -2
- package/lib/resolvers/content-tree/tagMappings.d.ts +2 -2
- package/lib/resolvers/content-tree/tagMappings.js.map +1 -1
- package/lib/resolvers/content-tree/updateTreeWithReferenceIds.d.ts +2 -2
- package/lib/resolvers/content-tree/updateTreeWithReferenceIds.js.map +1 -1
- package/lib/resolvers/content.d.ts +251 -235
- package/lib/resolvers/content.js +27 -0
- package/lib/resolvers/content.js.map +1 -1
- package/lib/resolvers/core.d.ts +4 -4
- package/lib/resolvers/core.js +12 -2
- package/lib/resolvers/core.js.map +1 -1
- package/lib/resolvers/index.d.ts +276 -260
- package/lib/resolvers/list.d.ts +9 -9
- package/lib/resolvers/teaser.d.ts +13 -13
- package/package.json +1 -1
- package/queries/article.graphql +19 -0
- package/src/datasources/capi.test.ts +3 -3
- package/src/datasources/capi.ts +6 -9
- package/src/fixtures/dummyContext.ts +2 -2
- package/src/generated/index.ts +41 -23
- package/src/model/Byline.ts +2 -2
- package/src/model/{CapiResponse.test.ts → Content.test.ts} +65 -17
- package/src/model/{CapiResponse.ts → Content.ts} +24 -17
- package/src/model/LeadFlourish.test.ts +6 -5
- package/src/model/LeadFlourish.ts +2 -5
- package/src/model/{CapiList.ts → List.ts} +5 -5
- package/src/model/RichText.ts +2 -2
- package/src/model/Topper.test.ts +23 -26
- package/src/model/Topper.ts +2 -5
- package/src/model/schemas/capi/article.ts +1 -0
- package/src/model/schemas/capi/audio.ts +1 -0
- package/src/model/schemas/capi/base-schema.ts +1 -0
- package/src/model/schemas/capi/content-package.ts +1 -0
- package/src/model/schemas/capi/live-blog-package.ts +1 -0
- package/src/model/schemas/capi/placeholder.ts +1 -0
- package/src/model/schemas/capi/video.ts +1 -0
- package/src/resolvers/content-tree/references/CustomCodeComponent.ts +2 -2
- package/src/resolvers/content-tree/references/index.ts +2 -2
- package/src/resolvers/content-tree/tagMappings.ts +2 -2
- package/src/resolvers/content-tree/updateTreeWithReferenceIds.ts +2 -2
- package/src/resolvers/content.ts +27 -0
- package/src/resolvers/core.ts +12 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/typedefs/content.graphql +19 -1
- package/lib/model/CapiList.js.map +0 -1
- package/lib/model/CapiResponse.js.map +0 -1
- package/lib/model/CapiResponse.test.js.map +0 -1
- /package/lib/model/{CapiResponse.test.d.ts → Content.test.d.ts} +0 -0
package/lib/resolvers/list.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
declare const _default: {
|
|
2
2
|
List: {
|
|
3
|
-
id: (parent: import("../model/
|
|
4
|
-
apiUrl: (parent: import("../model/
|
|
5
|
-
title: (parent: import("../model/
|
|
6
|
-
items: (parent: import("../model/
|
|
7
|
-
listType: (parent: import("../model/
|
|
8
|
-
publishedDate: (parent: import("../model/
|
|
9
|
-
layoutHint: (parent: import("../model/
|
|
10
|
-
publication: (parent: import("../model/
|
|
11
|
-
publishReference: (parent: import("../model/
|
|
3
|
+
id: (parent: import("../model/List").List) => string;
|
|
4
|
+
apiUrl: (parent: import("../model/List").List) => string;
|
|
5
|
+
title: (parent: import("../model/List").List) => string;
|
|
6
|
+
items: (parent: import("../model/List").List) => Promise<import("../model/Content").Content[]>;
|
|
7
|
+
listType: (parent: import("../model/List").List) => "OpinionAnalysis" | "Promotional" | "Recommended" | "TopStories" | "TopStoriesBeta" | "KeyDevelopments";
|
|
8
|
+
publishedDate: (parent: import("../model/List").List) => string;
|
|
9
|
+
layoutHint: (parent: import("../model/List").List) => "landscape" | "standaloneimage" | "bigstory" | "assassination" | null;
|
|
10
|
+
publication: (parent: import("../model/List").List) => string[] | null;
|
|
11
|
+
publishReference: (parent: import("../model/List").List) => string | null;
|
|
12
12
|
};
|
|
13
13
|
};
|
|
14
14
|
export default _default;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
declare const resolvers: {
|
|
2
2
|
Teaser: {
|
|
3
|
-
url: (parent: import("../model/
|
|
4
|
-
type: (parent: import("../model/
|
|
5
|
-
metaLink: (parent: import("../model/
|
|
6
|
-
metaAltLink: (parent: import("../model/
|
|
7
|
-
metaPrefixText: (parent: import("../model/
|
|
3
|
+
url: (parent: import("../model/Content").Content, args: Partial<import("../generated").TeaserUrlArgs>) => Promise<string>;
|
|
4
|
+
type: (parent: import("../model/Content").Content) => string;
|
|
5
|
+
metaLink: (parent: import("../model/Content").Content) => Promise<import("../model/Concept").Concept | import("../model/Content").Content | null>;
|
|
6
|
+
metaAltLink: (parent: import("../model/Content").Content) => Promise<import("../model/Concept").Concept | null>;
|
|
7
|
+
metaPrefixText: (parent: import("../model/Content").Content) => Promise<string | null>;
|
|
8
8
|
metaSuffixText: () => null;
|
|
9
|
-
image: (parent: import("../model/
|
|
10
|
-
indicators(parent: import("../model/
|
|
9
|
+
image: (parent: import("../model/Content").Content) => import("../model/Image").CAPIImage | null;
|
|
10
|
+
indicators(parent: import("../model/Content").Content): {
|
|
11
11
|
accessLevel: "premium" | "subscribed" | "registered" | "free";
|
|
12
12
|
isOpinion: boolean;
|
|
13
13
|
isColumn: boolean;
|
|
@@ -16,12 +16,12 @@ declare const resolvers: {
|
|
|
16
16
|
isExclusive: boolean;
|
|
17
17
|
isScoop: boolean;
|
|
18
18
|
};
|
|
19
|
-
standfirst: (parent: import("../model/
|
|
20
|
-
firstPublishedDate: (parent: import("../model/
|
|
21
|
-
id: (parent: import("../model/
|
|
22
|
-
publishedDate: (parent: import("../model/
|
|
23
|
-
theme: (parent: import("../model/
|
|
24
|
-
title: (parent: import("../model/
|
|
19
|
+
standfirst: (parent: import("../model/Content").Content) => string | null;
|
|
20
|
+
firstPublishedDate: (parent: import("../model/Content").Content) => string;
|
|
21
|
+
id: (parent: import("../model/Content").Content) => string;
|
|
22
|
+
publishedDate: (parent: import("../model/Content").Content) => string;
|
|
23
|
+
theme: (parent: import("../model/Content").Content) => "special-report" | "extra" | "basic" | "extra-wide";
|
|
24
|
+
title: (parent: import("../model/Content").Content) => string;
|
|
25
25
|
};
|
|
26
26
|
TeaserIndicators: {
|
|
27
27
|
accessLevel: (parent: import("../generated").TeaserIndicators) => "premium" | "subscribed" | "registered" | "free";
|
package/package.json
CHANGED
package/queries/article.graphql
CHANGED
|
@@ -506,6 +506,7 @@ fragment Media on Media {
|
|
|
506
506
|
|
|
507
507
|
fragment Indicators on Indicators {
|
|
508
508
|
isOpinion
|
|
509
|
+
isFTEdit
|
|
509
510
|
}
|
|
510
511
|
|
|
511
512
|
fragment BylineAuthor on AuthorReference {
|
|
@@ -649,12 +650,16 @@ fragment ArticleFields on Content {
|
|
|
649
650
|
clientName
|
|
650
651
|
indicators {
|
|
651
652
|
isPartnerContent
|
|
653
|
+
isFTEdit
|
|
652
654
|
}
|
|
653
655
|
}
|
|
654
656
|
... on Placeholder {
|
|
655
657
|
containedIn {
|
|
656
658
|
...PackageContainer
|
|
657
659
|
}
|
|
660
|
+
indicators {
|
|
661
|
+
isFTEdit
|
|
662
|
+
}
|
|
658
663
|
}
|
|
659
664
|
... on LiveBlogPost {
|
|
660
665
|
containedIn {
|
|
@@ -687,17 +692,31 @@ fragment ArticleFields on Content {
|
|
|
687
692
|
...PinnedPost
|
|
688
693
|
}
|
|
689
694
|
realtime
|
|
695
|
+
indicators {
|
|
696
|
+
isFTEdit
|
|
697
|
+
}
|
|
690
698
|
}
|
|
691
699
|
... on ContentPackage {
|
|
692
700
|
contains {
|
|
693
701
|
...Teaser
|
|
694
702
|
standfirst
|
|
695
703
|
}
|
|
704
|
+
indicators {
|
|
705
|
+
isFTEdit
|
|
706
|
+
}
|
|
696
707
|
}
|
|
697
708
|
... on Audio {
|
|
698
709
|
media {
|
|
699
710
|
...Media
|
|
700
711
|
}
|
|
712
|
+
indicators {
|
|
713
|
+
isFTEdit
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
... on Video {
|
|
717
|
+
indicators {
|
|
718
|
+
isFTEdit
|
|
719
|
+
}
|
|
701
720
|
}
|
|
702
721
|
}
|
|
703
722
|
|
|
@@ -2,7 +2,7 @@ import { Logger } from '@dotcom-reliability-kit/logger'
|
|
|
2
2
|
import { CapiDataSource } from './capi'
|
|
3
3
|
import { QueryContext } from '..'
|
|
4
4
|
import { KeyValueCache } from '@apollo/utils.keyvaluecache'
|
|
5
|
-
import {
|
|
5
|
+
import { Content } from '../model/Content'
|
|
6
6
|
import { ContentTypeSchemas } from '../model/schemas/capi/internal-content'
|
|
7
7
|
|
|
8
8
|
const logger = new Logger()
|
|
@@ -38,10 +38,10 @@ describe('CapiDataSource', () => {
|
|
|
38
38
|
)
|
|
39
39
|
|
|
40
40
|
jest
|
|
41
|
-
.spyOn(
|
|
41
|
+
.spyOn(Content, 'fromJSON')
|
|
42
42
|
.mockImplementation(
|
|
43
43
|
(content, context) =>
|
|
44
|
-
new
|
|
44
|
+
new Content(content as ContentTypeSchemas, context)
|
|
45
45
|
)
|
|
46
46
|
})
|
|
47
47
|
|
package/src/datasources/capi.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Content } from '../model/Content'
|
|
2
2
|
import { InstrumentedRESTDataSource } from './instrumented'
|
|
3
3
|
import { AugmentedRequest } from '@apollo/datasource-rest'
|
|
4
4
|
import {
|
|
5
5
|
KeyValueCache,
|
|
6
6
|
PrefixingKeyValueCache,
|
|
7
7
|
} from '@apollo/utils.keyvaluecache'
|
|
8
|
-
import {
|
|
8
|
+
import { List } from '../model/List'
|
|
9
9
|
import { Person } from '../model/Person'
|
|
10
10
|
|
|
11
11
|
const REQUEST_TIMEOUT = process.env.CAPI_DATASOURCE_REQUEST_TIMEOUT
|
|
@@ -46,10 +46,7 @@ export class CapiDataSource extends InstrumentedRESTDataSource {
|
|
|
46
46
|
request.headers['x-api-key'] = this.capiKey
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
async getContent(
|
|
50
|
-
uuid: string,
|
|
51
|
-
packageContainer?: CapiResponse
|
|
52
|
-
): Promise<CapiResponse> {
|
|
49
|
+
async getContent(uuid: string, packageContainer?: Content): Promise<Content> {
|
|
53
50
|
this.context.addSurrogateKeys([
|
|
54
51
|
{
|
|
55
52
|
prefix: 'contentPipelineArticle',
|
|
@@ -63,7 +60,7 @@ export class CapiDataSource extends InstrumentedRESTDataSource {
|
|
|
63
60
|
this.context.contentRequestedOnce = true
|
|
64
61
|
this.calls.push(uuid)
|
|
65
62
|
|
|
66
|
-
return
|
|
63
|
+
return Content.fromJSON(content, this.context, packageContainer)
|
|
67
64
|
}
|
|
68
65
|
|
|
69
66
|
async getPerson(uuid: string): Promise<Person> {
|
|
@@ -74,7 +71,7 @@ export class CapiDataSource extends InstrumentedRESTDataSource {
|
|
|
74
71
|
return Person.fromJson(person, this.context)
|
|
75
72
|
}
|
|
76
73
|
|
|
77
|
-
async getList(uuid: string): Promise<
|
|
74
|
+
async getList(uuid: string): Promise<List> {
|
|
78
75
|
this.context.addSurrogateKeys([
|
|
79
76
|
{
|
|
80
77
|
prefix: 'contentPipelineList',
|
|
@@ -83,7 +80,7 @@ export class CapiDataSource extends InstrumentedRESTDataSource {
|
|
|
83
80
|
])
|
|
84
81
|
|
|
85
82
|
const list = await this.get(`lists/${uuid}`)
|
|
86
|
-
return
|
|
83
|
+
return List.fromJSON(list, this.context)
|
|
87
84
|
}
|
|
88
85
|
|
|
89
86
|
// replicates the logic implicit in PrefixingKeyValueCache to
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Content } from '../model/Content'
|
|
2
2
|
import { baseCapiObject } from './capiObject'
|
|
3
3
|
import cloneDeep from 'clone-deep'
|
|
4
4
|
import { QueryContext } from '..'
|
|
@@ -18,7 +18,7 @@ export default {
|
|
|
18
18
|
capi: {
|
|
19
19
|
getContent: (id: string) =>
|
|
20
20
|
Promise.resolve(
|
|
21
|
-
new
|
|
21
|
+
new Content(
|
|
22
22
|
cloneDeep({
|
|
23
23
|
...baseCapiObject,
|
|
24
24
|
id,
|
package/src/generated/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql';
|
|
2
2
|
import type { Concept as ConceptModel } from '../model/Concept';
|
|
3
3
|
import type { Person as PersonModel } from '../model/Person';
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
4
|
+
import type { List as ListModel } from '../model/List';
|
|
5
|
+
import type { Content as ContentModel } from '../model/Content';
|
|
6
6
|
import type { Image as ImageModel } from '../model/Image';
|
|
7
7
|
import type { Clip as ClipModel } from '../model/Clip';
|
|
8
8
|
import type { Picture as PictureModel } from '../model/Picture';
|
|
@@ -168,6 +168,8 @@ export type Audio = Content & {
|
|
|
168
168
|
readonly firstPublishedDate: Scalars['String']['output'];
|
|
169
169
|
/** The unique identifier of the article - a uuid or a url. */
|
|
170
170
|
readonly id: Scalars['ID']['output'];
|
|
171
|
+
/** An object of several flags indicating the nature of the content, eg. if it's in an FT Edit edition */
|
|
172
|
+
readonly indicators?: Maybe<Indicators>;
|
|
171
173
|
/** The concept to use for instant alert CTAs. */
|
|
172
174
|
readonly instantAlertConcept?: Maybe<Concept>;
|
|
173
175
|
/** An image object containing the url and the caption, to be displayed usually before the article content. */
|
|
@@ -558,6 +560,8 @@ export type ContentPackage = Content & {
|
|
|
558
560
|
readonly firstPublishedDate: Scalars['String']['output'];
|
|
559
561
|
/** The unique identifier of the article - a uuid or a url. */
|
|
560
562
|
readonly id: Scalars['ID']['output'];
|
|
563
|
+
/** An object of several flags indicating the nature of the content, eg. if it's in an FT Edit edition */
|
|
564
|
+
readonly indicators?: Maybe<Indicators>;
|
|
561
565
|
/** The concept to use for instant alert CTAs. */
|
|
562
566
|
readonly instantAlertConcept?: Maybe<Concept>;
|
|
563
567
|
/** An image object containing the url and the caption, to be displayed usually before the article content. */
|
|
@@ -1050,6 +1054,8 @@ export type ImageWideSourceSetArgs = {
|
|
|
1050
1054
|
};
|
|
1051
1055
|
|
|
1052
1056
|
export type Indicators = {
|
|
1057
|
+
/** Whether the article is included in an FT Edit editorial curation. */
|
|
1058
|
+
readonly isFTEdit?: Maybe<Scalars['Boolean']['output']>;
|
|
1053
1059
|
/** Whether the content is an opinion piece. */
|
|
1054
1060
|
readonly isOpinion?: Maybe<Scalars['Boolean']['output']>;
|
|
1055
1061
|
/** Whether the content is Commercial Partner Content. */
|
|
@@ -1121,6 +1127,8 @@ export type LiveBlogPackage = Content & {
|
|
|
1121
1127
|
readonly firstPublishedDate: Scalars['String']['output'];
|
|
1122
1128
|
/** The unique identifier of the article - a uuid or a url. */
|
|
1123
1129
|
readonly id: Scalars['ID']['output'];
|
|
1130
|
+
/** An object of flags indicating the nature of the content, eg. if it's in an FT Edit edition */
|
|
1131
|
+
readonly indicators?: Maybe<Indicators>;
|
|
1124
1132
|
/** The concept to use for instant alert CTAs. */
|
|
1125
1133
|
readonly instantAlertConcept?: Maybe<Concept>;
|
|
1126
1134
|
/** The child articles of this live blog package. */
|
|
@@ -1220,7 +1228,7 @@ export type LiveBlogPost = Content & {
|
|
|
1220
1228
|
readonly firstPublishedDate: Scalars['String']['output'];
|
|
1221
1229
|
/** The unique identifier of the article - a uuid or a url. */
|
|
1222
1230
|
readonly id: Scalars['ID']['output'];
|
|
1223
|
-
/** An object indicating
|
|
1231
|
+
/** An object of several flags indicating the nature of the content, eg. if it's in an FT Edit edition */
|
|
1224
1232
|
readonly indicators?: Maybe<Indicators>;
|
|
1225
1233
|
/** The concept to use for instant alert CTAs. */
|
|
1226
1234
|
readonly instantAlertConcept?: Maybe<Concept>;
|
|
@@ -1481,6 +1489,8 @@ export type Placeholder = Content & {
|
|
|
1481
1489
|
readonly firstPublishedDate: Scalars['String']['output'];
|
|
1482
1490
|
/** The unique identifier of the article - a uuid or a url. */
|
|
1483
1491
|
readonly id: Scalars['ID']['output'];
|
|
1492
|
+
/** An object of several flags indicating the nature of the content, eg. if it's in an FT Edit edition */
|
|
1493
|
+
readonly indicators?: Maybe<Indicators>;
|
|
1484
1494
|
/** The concept to use for instant alert CTAs. */
|
|
1485
1495
|
readonly instantAlertConcept?: Maybe<Concept>;
|
|
1486
1496
|
/** An image object containing the url and the caption, to be displayed usually before the article content. */
|
|
@@ -1844,6 +1854,8 @@ export type Video = Content & {
|
|
|
1844
1854
|
readonly firstPublishedDate: Scalars['String']['output'];
|
|
1845
1855
|
/** The unique identifier of the article - a uuid or a url. */
|
|
1846
1856
|
readonly id: Scalars['ID']['output'];
|
|
1857
|
+
/** An object of several flags indicating the nature of the content, eg. if it's in an FT Edit edition */
|
|
1858
|
+
readonly indicators?: Maybe<Indicators>;
|
|
1847
1859
|
/** The concept to use for instant alert CTAs. */
|
|
1848
1860
|
readonly instantAlertConcept?: Maybe<Concept>;
|
|
1849
1861
|
/** An image object containing the url and the caption, to be displayed usually before the article content. */
|
|
@@ -1967,13 +1979,13 @@ export type DirectiveResolverFn<TResult = {}, TParent = {}, TContext = {}, TArgs
|
|
|
1967
1979
|
|
|
1968
1980
|
/** Mapping of union types */
|
|
1969
1981
|
export type ResolversUnionTypes<RefType extends Record<string, unknown>> = ResolversObject<{
|
|
1970
|
-
MetaLink: ( ConceptModel ) | (
|
|
1982
|
+
MetaLink: ( ConceptModel ) | ( ContentModel );
|
|
1971
1983
|
}>;
|
|
1972
1984
|
|
|
1973
1985
|
/** Mapping of interface types */
|
|
1974
1986
|
export type ResolversInterfaceTypes<RefType extends Record<string, unknown>> = ResolversObject<{
|
|
1975
1987
|
ConceptInterface: ( ConceptModel ) | ( ConceptModel );
|
|
1976
|
-
Content: (
|
|
1988
|
+
Content: ( ContentModel ) | ( ContentModel ) | ( ContentModel ) | ( ContentModel ) | ( ContentModel ) | ( ContentModel ) | ( ContentModel );
|
|
1977
1989
|
Image: ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel ) | ( ImageModel );
|
|
1978
1990
|
Picture: ( PictureModel ) | ( PictureModel ) | ( PictureModel );
|
|
1979
1991
|
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<VideoNode> );
|
|
@@ -1991,8 +2003,8 @@ export type ResolversTypes = ResolversObject<{
|
|
|
1991
2003
|
Accessibility: ResolverTypeWrapper<Omit<Accessibility, 'transcript'> & { transcript: Maybe<ResolversTypes['RichText']> }>;
|
|
1992
2004
|
AltStandfirst: ResolverTypeWrapper<AltStandfirst>;
|
|
1993
2005
|
AltTitle: ResolverTypeWrapper<AltTitle>;
|
|
1994
|
-
Article: ResolverTypeWrapper<
|
|
1995
|
-
Audio: ResolverTypeWrapper<
|
|
2006
|
+
Article: ResolverTypeWrapper<ContentModel>;
|
|
2007
|
+
Audio: ResolverTypeWrapper<ContentModel>;
|
|
1996
2008
|
Author: ResolverTypeWrapper<ConceptModel>;
|
|
1997
2009
|
AuthorReference: ResolverTypeWrapper<ReferenceWithCAPIData<AuthorNode>>;
|
|
1998
2010
|
BasicTopper: ResolverTypeWrapper<TopperModel>;
|
|
@@ -2009,7 +2021,7 @@ export type ResolversTypes = ResolversObject<{
|
|
|
2009
2021
|
Content: ResolverTypeWrapper<ResolversInterfaceTypes<ResolversTypes>['Content']>;
|
|
2010
2022
|
ContentConnection: ResolverTypeWrapper<Omit<ContentConnection, 'edges'> & { edges: ReadonlyArray<Maybe<ResolversTypes['ContentEdge']>> }>;
|
|
2011
2023
|
ContentEdge: ResolverTypeWrapper<Omit<ContentEdge, 'node'> & { node: Maybe<ResolversTypes['Content']> }>;
|
|
2012
|
-
ContentPackage: ResolverTypeWrapper<
|
|
2024
|
+
ContentPackage: ResolverTypeWrapper<ContentModel>;
|
|
2013
2025
|
ContentType: ResolverTypeWrapper<Scalars['ContentType']['output']>;
|
|
2014
2026
|
CustomCodeComponent: ResolverTypeWrapper<ReferenceWithCAPIData<ContentTree.CustomCodeComponent>>;
|
|
2015
2027
|
DeepLandscapeTopper: ResolverTypeWrapper<TopperModel>;
|
|
@@ -2041,10 +2053,10 @@ export type ResolversTypes = ResolversObject<{
|
|
|
2041
2053
|
LayoutHint: ResolverTypeWrapper<Scalars['LayoutHint']['output']>;
|
|
2042
2054
|
LayoutImage: ResolverTypeWrapper<ReferenceWithCAPIData<ContentTree.LayoutImage>>;
|
|
2043
2055
|
LeadFlourish: ResolverTypeWrapper<LeadFlourishModel>;
|
|
2044
|
-
List: ResolverTypeWrapper<
|
|
2056
|
+
List: ResolverTypeWrapper<ListModel>;
|
|
2045
2057
|
ListType: ResolverTypeWrapper<Scalars['ListType']['output']>;
|
|
2046
|
-
LiveBlogPackage: ResolverTypeWrapper<
|
|
2047
|
-
LiveBlogPost: ResolverTypeWrapper<
|
|
2058
|
+
LiveBlogPackage: ResolverTypeWrapper<ContentModel>;
|
|
2059
|
+
LiveBlogPost: ResolverTypeWrapper<ContentModel>;
|
|
2048
2060
|
MainImage: ResolverTypeWrapper<ReferenceWithCAPIData<ContentTree.ImageSet>>;
|
|
2049
2061
|
Media: ResolverTypeWrapper<Media>;
|
|
2050
2062
|
MetaLink: ResolverTypeWrapper<ResolversUnionTypes<ResolversTypes>['MetaLink']>;
|
|
@@ -2058,7 +2070,7 @@ export type ResolversTypes = ResolversObject<{
|
|
|
2058
2070
|
PictureFullBleed: ResolverTypeWrapper<PictureModel>;
|
|
2059
2071
|
PictureInline: ResolverTypeWrapper<PictureModel>;
|
|
2060
2072
|
PictureStandard: ResolverTypeWrapper<PictureModel>;
|
|
2061
|
-
Placeholder: ResolverTypeWrapper<
|
|
2073
|
+
Placeholder: ResolverTypeWrapper<ContentModel>;
|
|
2062
2074
|
PodcastTopper: ResolverTypeWrapper<TopperModel>;
|
|
2063
2075
|
Query: ResolverTypeWrapper<{}>;
|
|
2064
2076
|
RawImage: ResolverTypeWrapper<ReferenceWithCAPIData<RawImageNode>>;
|
|
@@ -2071,7 +2083,7 @@ export type ResolversTypes = ResolversObject<{
|
|
|
2071
2083
|
String: ResolverTypeWrapper<Scalars['String']['output']>;
|
|
2072
2084
|
StructuredContent: ResolverTypeWrapper<Omit<StructuredContent, 'references'> & { references: ReadonlyArray<ResolversTypes['Reference']> }>;
|
|
2073
2085
|
TableOfContents: ResolverTypeWrapper<TableOfContents>;
|
|
2074
|
-
Teaser: ResolverTypeWrapper<
|
|
2086
|
+
Teaser: ResolverTypeWrapper<ContentModel>;
|
|
2075
2087
|
TeaserIndicators: ResolverTypeWrapper<TeaserIndicators>;
|
|
2076
2088
|
Topper: ResolverTypeWrapper<TopperModel>;
|
|
2077
2089
|
TopperBackgroundColour: ResolverTypeWrapper<Scalars['TopperBackgroundColour']['output']>;
|
|
@@ -2082,7 +2094,7 @@ export type ResolversTypes = ResolversObject<{
|
|
|
2082
2094
|
TopperWithPackage: ResolverTypeWrapper<TopperModel>;
|
|
2083
2095
|
TopperWithTheme: ResolverTypeWrapper<TopperModel>;
|
|
2084
2096
|
Tweet: ResolverTypeWrapper<ReferenceWithCAPIData<ContentTree.Tweet>>;
|
|
2085
|
-
Video: ResolverTypeWrapper<
|
|
2097
|
+
Video: ResolverTypeWrapper<ContentModel>;
|
|
2086
2098
|
VideoReference: ResolverTypeWrapper<ReferenceWithCAPIData<VideoNode>>;
|
|
2087
2099
|
}>;
|
|
2088
2100
|
|
|
@@ -2092,8 +2104,8 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
2092
2104
|
Accessibility: Omit<Accessibility, 'transcript'> & { transcript: Maybe<ResolversParentTypes['RichText']> };
|
|
2093
2105
|
AltStandfirst: AltStandfirst;
|
|
2094
2106
|
AltTitle: AltTitle;
|
|
2095
|
-
Article:
|
|
2096
|
-
Audio:
|
|
2107
|
+
Article: ContentModel;
|
|
2108
|
+
Audio: ContentModel;
|
|
2097
2109
|
Author: ConceptModel;
|
|
2098
2110
|
AuthorReference: ReferenceWithCAPIData<AuthorNode>;
|
|
2099
2111
|
BasicTopper: TopperModel;
|
|
@@ -2110,7 +2122,7 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
2110
2122
|
Content: ResolversInterfaceTypes<ResolversParentTypes>['Content'];
|
|
2111
2123
|
ContentConnection: Omit<ContentConnection, 'edges'> & { edges: ReadonlyArray<Maybe<ResolversParentTypes['ContentEdge']>> };
|
|
2112
2124
|
ContentEdge: Omit<ContentEdge, 'node'> & { node: Maybe<ResolversParentTypes['Content']> };
|
|
2113
|
-
ContentPackage:
|
|
2125
|
+
ContentPackage: ContentModel;
|
|
2114
2126
|
ContentType: Scalars['ContentType']['output'];
|
|
2115
2127
|
CustomCodeComponent: ReferenceWithCAPIData<ContentTree.CustomCodeComponent>;
|
|
2116
2128
|
DeepLandscapeTopper: TopperModel;
|
|
@@ -2142,10 +2154,10 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
2142
2154
|
LayoutHint: Scalars['LayoutHint']['output'];
|
|
2143
2155
|
LayoutImage: ReferenceWithCAPIData<ContentTree.LayoutImage>;
|
|
2144
2156
|
LeadFlourish: LeadFlourishModel;
|
|
2145
|
-
List:
|
|
2157
|
+
List: ListModel;
|
|
2146
2158
|
ListType: Scalars['ListType']['output'];
|
|
2147
|
-
LiveBlogPackage:
|
|
2148
|
-
LiveBlogPost:
|
|
2159
|
+
LiveBlogPackage: ContentModel;
|
|
2160
|
+
LiveBlogPost: ContentModel;
|
|
2149
2161
|
MainImage: ReferenceWithCAPIData<ContentTree.ImageSet>;
|
|
2150
2162
|
Media: Media;
|
|
2151
2163
|
MetaLink: ResolversUnionTypes<ResolversParentTypes>['MetaLink'];
|
|
@@ -2159,7 +2171,7 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
2159
2171
|
PictureFullBleed: PictureModel;
|
|
2160
2172
|
PictureInline: PictureModel;
|
|
2161
2173
|
PictureStandard: PictureModel;
|
|
2162
|
-
Placeholder:
|
|
2174
|
+
Placeholder: ContentModel;
|
|
2163
2175
|
PodcastTopper: TopperModel;
|
|
2164
2176
|
Query: {};
|
|
2165
2177
|
RawImage: ReferenceWithCAPIData<RawImageNode>;
|
|
@@ -2172,7 +2184,7 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
2172
2184
|
String: Scalars['String']['output'];
|
|
2173
2185
|
StructuredContent: Omit<StructuredContent, 'references'> & { references: ReadonlyArray<ResolversParentTypes['Reference']> };
|
|
2174
2186
|
TableOfContents: TableOfContents;
|
|
2175
|
-
Teaser:
|
|
2187
|
+
Teaser: ContentModel;
|
|
2176
2188
|
TeaserIndicators: TeaserIndicators;
|
|
2177
2189
|
Topper: TopperModel;
|
|
2178
2190
|
TopperBackgroundColour: Scalars['TopperBackgroundColour']['output'];
|
|
@@ -2183,7 +2195,7 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
2183
2195
|
TopperWithPackage: TopperModel;
|
|
2184
2196
|
TopperWithTheme: TopperModel;
|
|
2185
2197
|
Tweet: ReferenceWithCAPIData<ContentTree.Tweet>;
|
|
2186
|
-
Video:
|
|
2198
|
+
Video: ContentModel;
|
|
2187
2199
|
VideoReference: ReferenceWithCAPIData<VideoNode>;
|
|
2188
2200
|
}>;
|
|
2189
2201
|
|
|
@@ -2255,6 +2267,7 @@ export type AudioResolvers<ContextType = QueryContext, ParentType extends Resolv
|
|
|
2255
2267
|
editorialDesk: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2256
2268
|
firstPublishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
|
2257
2269
|
id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
|
2270
|
+
indicators: Resolver<Maybe<ResolversTypes['Indicators']>, ParentType, ContextType>;
|
|
2258
2271
|
instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
|
|
2259
2272
|
mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
|
|
2260
2273
|
media: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Media']>>>, ParentType, ContextType>;
|
|
@@ -2459,6 +2472,7 @@ export type ContentPackageResolvers<ContextType = QueryContext, ParentType exten
|
|
|
2459
2472
|
editorialDesk: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2460
2473
|
firstPublishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
|
2461
2474
|
id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
|
2475
|
+
indicators: Resolver<Maybe<ResolversTypes['Indicators']>, ParentType, ContextType>;
|
|
2462
2476
|
instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
|
|
2463
2477
|
mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
|
|
2464
2478
|
modifiedTimestamp: Resolver<Maybe<ResolversTypes['Float']>, ParentType, ContextType>;
|
|
@@ -2730,6 +2744,7 @@ export type ImageWideResolvers<ContextType = QueryContext, ParentType extends Re
|
|
|
2730
2744
|
}>;
|
|
2731
2745
|
|
|
2732
2746
|
export type IndicatorsResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Indicators'] = ResolversParentTypes['Indicators']> = ResolversObject<{
|
|
2747
|
+
isFTEdit: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2733
2748
|
isOpinion: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2734
2749
|
isPartnerContent: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
|
2735
2750
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
@@ -2788,6 +2803,7 @@ export type LiveBlogPackageResolvers<ContextType = QueryContext, ParentType exte
|
|
|
2788
2803
|
editorialDesk: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2789
2804
|
firstPublishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
|
2790
2805
|
id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
|
2806
|
+
indicators: Resolver<Maybe<ResolversTypes['Indicators']>, ParentType, ContextType>;
|
|
2791
2807
|
instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
|
|
2792
2808
|
liveBlogPosts: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Content']>>>, ParentType, ContextType, Partial<LiveBlogPackageLiveBlogPostsArgs>>;
|
|
2793
2809
|
liveBlogPostsConnection: Resolver<Maybe<ResolversTypes['ContentConnection']>, ParentType, ContextType, Partial<LiveBlogPackageLiveBlogPostsConnectionArgs>>;
|
|
@@ -2974,6 +2990,7 @@ export type PlaceholderResolvers<ContextType = QueryContext, ParentType extends
|
|
|
2974
2990
|
editorialDesk: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2975
2991
|
firstPublishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
|
2976
2992
|
id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
|
2993
|
+
indicators: Resolver<Maybe<ResolversTypes['Indicators']>, ParentType, ContextType>;
|
|
2977
2994
|
instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
|
|
2978
2995
|
mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
|
|
2979
2996
|
modifiedTimestamp: Resolver<Maybe<ResolversTypes['Float']>, ParentType, ContextType>;
|
|
@@ -3189,6 +3206,7 @@ export type VideoResolvers<ContextType = QueryContext, ParentType extends Resolv
|
|
|
3189
3206
|
editorialDesk: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
3190
3207
|
firstPublishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
|
3191
3208
|
id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
|
3209
|
+
indicators: Resolver<Maybe<ResolversTypes['Indicators']>, ParentType, ContextType>;
|
|
3192
3210
|
instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
|
|
3193
3211
|
mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
|
|
3194
3212
|
modifiedTimestamp: Resolver<Maybe<ResolversTypes['Float']>, ParentType, ContextType>;
|
package/src/model/Byline.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
Author as AuthorNode,
|
|
6
6
|
} from '../resolvers/content-tree/Workarounds'
|
|
7
7
|
import updateTreeWithReferenceIds from '../resolvers/content-tree/updateTreeWithReferenceIds'
|
|
8
|
-
import {
|
|
8
|
+
import { Content } from './Content'
|
|
9
9
|
|
|
10
10
|
export class Byline {
|
|
11
11
|
static normaliseQuotes(str: string) {
|
|
@@ -16,7 +16,7 @@ export class Byline {
|
|
|
16
16
|
private byline: string,
|
|
17
17
|
private vanity: boolean,
|
|
18
18
|
private authors: Concept[],
|
|
19
|
-
private contentApiData?:
|
|
19
|
+
private contentApiData?: Content
|
|
20
20
|
) {}
|
|
21
21
|
|
|
22
22
|
async buildBylineTree() {
|