@financial-times/cp-content-pipeline-schema 3.5.0 → 3.5.2
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 +18 -0
- package/lib/generated/index.d.ts +4 -21
- package/lib/model/FlourishSource.d.ts +12 -5
- package/lib/model/FlourishSource.js +32 -28
- package/lib/model/FlourishSource.js.map +1 -1
- package/lib/model/FlourishSource.test.js +5 -5
- package/lib/model/FlourishSource.test.js.map +1 -1
- package/lib/model/Image.js +11 -20
- package/lib/model/Image.js.map +1 -1
- package/lib/model/Image.test.js +24 -54
- package/lib/model/Image.test.js.map +1 -1
- package/lib/model/LeadFlourish.d.ts +1 -1
- package/lib/model/LeadFlourish.js +4 -1
- package/lib/model/LeadFlourish.js.map +1 -1
- package/lib/model/LeadFlourish.test.js +5 -7
- package/lib/model/LeadFlourish.test.js.map +1 -1
- package/lib/model/schemas/capi/article.d.ts +3 -3
- package/lib/model/schemas/capi/audio.d.ts +5 -5
- package/lib/model/schemas/capi/base-schema.d.ts +5 -5
- package/lib/model/schemas/capi/base-schema.js +1 -1
- package/lib/model/schemas/capi/base-schema.js.map +1 -1
- package/lib/model/schemas/capi/content-package.d.ts +3 -3
- package/lib/model/schemas/capi/custom-code-component.d.ts +3 -3
- package/lib/model/schemas/capi/index.d.ts +20 -20
- package/lib/model/schemas/capi/live-blog-package.d.ts +3 -3
- package/lib/model/schemas/capi/placeholder.d.ts +3 -3
- package/lib/model/schemas/capi/video.d.ts +3 -3
- package/lib/resolvers/content-tree/references/Flourish.d.ts +9 -19
- package/lib/resolvers/content-tree/references/Flourish.js +10 -32
- package/lib/resolvers/content-tree/references/Flourish.js.map +1 -1
- package/lib/resolvers/content-tree/references/Flourish.test.js +3 -3
- package/lib/resolvers/content-tree/references/Flourish.test.js.map +1 -1
- package/lib/resolvers/content-tree/references/index.d.ts +2 -2
- package/lib/resolvers/content-tree/references/index.js +1 -1
- package/lib/resolvers/content-tree/references/index.js.map +1 -1
- package/lib/resolvers/index.d.ts +1 -2
- package/lib/resolvers/leadFlourish.d.ts +1 -1
- package/package.json +1 -1
- package/src/generated/index.ts +4 -23
- package/src/model/FlourishSource.test.ts +5 -5
- package/src/model/FlourishSource.ts +57 -39
- package/src/model/Image.test.ts +37 -60
- package/src/model/Image.ts +14 -22
- package/src/model/LeadFlourish.test.ts +6 -9
- package/src/model/LeadFlourish.ts +5 -1
- package/src/model/schemas/capi/base-schema.ts +1 -1
- package/src/resolvers/content-tree/references/Flourish.test.ts +4 -3
- package/src/resolvers/content-tree/references/Flourish.ts +16 -32
- package/src/resolvers/content-tree/references/index.ts +4 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/typedefs/leadFlourish.graphql +1 -1
- package/typedefs/references/flourish.graphql +1 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.5.2](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.5.1...cp-content-pipeline-schema-v3.5.2) (2024-10-30)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* don't call image service for any images with missing dimensions ([b3bab4b](https://github.com/Financial-Times/cp-content-pipeline/commit/b3bab4b7c30098e83bc5e1e99a953b741b3a46b6))
|
|
9
|
+
* set max image DPR to 2 when no dimensions ([d556e0b](https://github.com/Financial-Times/cp-content-pipeline/commit/d556e0bd6862c23f3279db717b2cab1617e98c0f))
|
|
10
|
+
|
|
11
|
+
## [3.5.1](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.5.0...cp-content-pipeline-schema-v3.5.1) (2024-10-29)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* call image service once for FlourishSource ([1eb9122](https://github.com/Financial-Times/cp-content-pipeline/commit/1eb9122283d52968ce2baf2766d3180dd6927220))
|
|
17
|
+
* dataSource.filesize is optional ([bc3fba5](https://github.com/Financial-Times/cp-content-pipeline/commit/bc3fba574e551bf81a7864799691618321fe1366))
|
|
18
|
+
* don't call image service for graphics ([64064a0](https://github.com/Financial-Times/cp-content-pipeline/commit/64064a0999512d86d43eed3ff080ce4be446f76a))
|
|
19
|
+
* make LeadFlourish.fallbackImage nullable ([6ff7c96](https://github.com/Financial-Times/cp-content-pipeline/commit/6ff7c96d8d9873f8758c68b2a9094189d5ecb6d2))
|
|
20
|
+
|
|
3
21
|
## [3.5.0](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.4.0...cp-content-pipeline-schema-v3.5.0) (2024-10-24)
|
|
4
22
|
|
|
5
23
|
|
package/lib/generated/index.d.ts
CHANGED
|
@@ -708,18 +708,10 @@ export type Design = {
|
|
|
708
708
|
};
|
|
709
709
|
export type Flourish = Reference & {
|
|
710
710
|
/** The fallback image to be used if the flourish graphics cannot be loaded. */
|
|
711
|
-
readonly fallbackImage?: Maybe<
|
|
711
|
+
readonly fallbackImage?: Maybe<FlourishSource>;
|
|
712
712
|
/** The type of the reference, eg. 'flourish'. */
|
|
713
713
|
readonly type: Scalars['String']['output'];
|
|
714
714
|
};
|
|
715
|
-
export type FlourishFallback = {
|
|
716
|
-
/** The height in pixels of the fallback image. */
|
|
717
|
-
readonly height?: Maybe<Scalars['Int']['output']>;
|
|
718
|
-
/** The url of the fallback image. */
|
|
719
|
-
readonly url?: Maybe<Scalars['String']['output']>;
|
|
720
|
-
/** The width in pixels of the fallback image. */
|
|
721
|
-
readonly width?: Maybe<Scalars['Int']['output']>;
|
|
722
|
-
};
|
|
723
715
|
export type FlourishSource = {
|
|
724
716
|
/** The format of the source, eg. 'standard'. */
|
|
725
717
|
readonly format: Scalars['ImageFormat']['output'];
|
|
@@ -1051,7 +1043,7 @@ export type LayoutImage = Reference & {
|
|
|
1051
1043
|
export type LeadFlourish = {
|
|
1052
1044
|
/** The description of the Flourish chart. */
|
|
1053
1045
|
readonly description?: Maybe<Scalars['String']['output']>;
|
|
1054
|
-
readonly fallbackImage
|
|
1046
|
+
readonly fallbackImage?: Maybe<FlourishSource>;
|
|
1055
1047
|
/** The id of the Flourish chart. */
|
|
1056
1048
|
readonly id?: Maybe<Scalars['String']['output']>;
|
|
1057
1049
|
/** The type of the chart, eg. 'visualisation'. */
|
|
@@ -1881,7 +1873,6 @@ export type ResolversTypes = ResolversObject<{
|
|
|
1881
1873
|
Design: ResolverTypeWrapper<Design>;
|
|
1882
1874
|
Float: ResolverTypeWrapper<Scalars['Float']['output']>;
|
|
1883
1875
|
Flourish: ResolverTypeWrapper<ReferenceWithCAPIData<ContentTree.Flourish>>;
|
|
1884
|
-
FlourishFallback: ResolverTypeWrapper<FlourishFallback>;
|
|
1885
1876
|
FlourishSource: ResolverTypeWrapper<FlourishSourceModel>;
|
|
1886
1877
|
FollowButtonVariant: ResolverTypeWrapper<Scalars['FollowButtonVariant']['output']>;
|
|
1887
1878
|
FullBleedTopper: ResolverTypeWrapper<TopperModel>;
|
|
@@ -1990,7 +1981,6 @@ export type ResolversParentTypes = ResolversObject<{
|
|
|
1990
1981
|
Design: Design;
|
|
1991
1982
|
Float: Scalars['Float']['output'];
|
|
1992
1983
|
Flourish: ReferenceWithCAPIData<ContentTree.Flourish>;
|
|
1993
|
-
FlourishFallback: FlourishFallback;
|
|
1994
1984
|
FlourishSource: FlourishSourceModel;
|
|
1995
1985
|
FollowButtonVariant: Scalars['FollowButtonVariant']['output'];
|
|
1996
1986
|
FullBleedTopper: TopperModel;
|
|
@@ -2379,16 +2369,10 @@ export type DesignResolvers<ContextType = QueryContext, ParentType extends Resol
|
|
|
2379
2369
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
2380
2370
|
}>;
|
|
2381
2371
|
export type FlourishResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Flourish'] = ResolversParentTypes['Flourish']> = ResolversObject<{
|
|
2382
|
-
fallbackImage: Resolver<Maybe<ResolversTypes['
|
|
2372
|
+
fallbackImage: Resolver<Maybe<ResolversTypes['FlourishSource']>, ParentType, ContextType>;
|
|
2383
2373
|
type: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
|
2384
2374
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
2385
2375
|
}>;
|
|
2386
|
-
export type FlourishFallbackResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['FlourishFallback'] = ResolversParentTypes['FlourishFallback']> = ResolversObject<{
|
|
2387
|
-
height: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
|
|
2388
|
-
url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2389
|
-
width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
|
|
2390
|
-
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
2391
|
-
}>;
|
|
2392
2376
|
export type FlourishSourceResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['FlourishSource'] = ResolversParentTypes['FlourishSource']> = ResolversObject<{
|
|
2393
2377
|
format: Resolver<ResolversTypes['ImageFormat'], ParentType, ContextType>;
|
|
2394
2378
|
height: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
|
|
@@ -2582,7 +2566,7 @@ export type LayoutImageResolvers<ContextType = QueryContext, ParentType extends
|
|
|
2582
2566
|
}>;
|
|
2583
2567
|
export type LeadFlourishResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['LeadFlourish'] = ResolversParentTypes['LeadFlourish']> = ResolversObject<{
|
|
2584
2568
|
description: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2585
|
-
fallbackImage: Resolver<ResolversTypes['FlourishSource']
|
|
2569
|
+
fallbackImage: Resolver<Maybe<ResolversTypes['FlourishSource']>, ParentType, ContextType>;
|
|
2586
2570
|
id: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2587
2571
|
type: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
|
2588
2572
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
@@ -3029,7 +3013,6 @@ export type Resolvers<ContextType = QueryContext> = ResolversObject<{
|
|
|
3029
3013
|
DeepPortraitTopper: DeepPortraitTopperResolvers<ContextType>;
|
|
3030
3014
|
Design: DesignResolvers<ContextType>;
|
|
3031
3015
|
Flourish: FlourishResolvers<ContextType>;
|
|
3032
|
-
FlourishFallback: FlourishFallbackResolvers<ContextType>;
|
|
3033
3016
|
FlourishSource: FlourishSourceResolvers<ContextType>;
|
|
3034
3017
|
FollowButtonVariant: GraphQLScalarType;
|
|
3035
3018
|
FullBleedTopper: FullBleedTopperResolvers<ContextType>;
|
|
@@ -3,20 +3,27 @@ type FlourishData = {
|
|
|
3
3
|
id: string;
|
|
4
4
|
type?: string;
|
|
5
5
|
description?: string;
|
|
6
|
-
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
};
|
|
7
9
|
export declare class FlourishSource {
|
|
8
10
|
#private;
|
|
9
11
|
private flourishData;
|
|
10
12
|
private context;
|
|
11
13
|
private imageMetadata?;
|
|
14
|
+
static createWithMetadata(data: FlourishData, context: QueryContext): Promise<FlourishSource>;
|
|
12
15
|
constructor(flourishData: FlourishData, context: QueryContext);
|
|
13
16
|
id(): string;
|
|
14
17
|
type(): string;
|
|
15
18
|
format(): "standard";
|
|
16
19
|
flourishUrl(): string;
|
|
17
|
-
private
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
private static fallbackUrl;
|
|
21
|
+
static getImageMetadata(data: FlourishData, context: QueryContext): Promise<{
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
}>;
|
|
25
|
+
width(): number;
|
|
26
|
+
height(): number;
|
|
27
|
+
url(): string;
|
|
21
28
|
}
|
|
22
29
|
export {};
|
|
@@ -7,77 +7,81 @@ exports.FlourishSource = void 0;
|
|
|
7
7
|
const imageService_1 = __importDefault(require("../helpers/imageService"));
|
|
8
8
|
const isError_1 = __importDefault(require("../helpers/isError"));
|
|
9
9
|
const errors_1 = require("@dotcom-reliability-kit/errors");
|
|
10
|
+
const DEFAULT_WIDTH = 2626;
|
|
11
|
+
const DEFAULT_HEIGHT = 1459;
|
|
10
12
|
class FlourishSource {
|
|
11
13
|
flourishData;
|
|
12
14
|
context;
|
|
13
15
|
#systemCode;
|
|
14
16
|
imageMetadata;
|
|
17
|
+
static async createWithMetadata(data, context) {
|
|
18
|
+
const { width, height } = await FlourishSource.getImageMetadata(data, context);
|
|
19
|
+
return new FlourishSource({
|
|
20
|
+
...data,
|
|
21
|
+
width,
|
|
22
|
+
height,
|
|
23
|
+
}, context);
|
|
24
|
+
}
|
|
15
25
|
constructor(flourishData, context) {
|
|
16
26
|
this.flourishData = flourishData;
|
|
17
27
|
this.context = context;
|
|
18
28
|
this.#systemCode = context.systemCode ?? 'cp-content-pipeline';
|
|
19
29
|
}
|
|
20
30
|
id() {
|
|
21
|
-
return this.flourishData
|
|
31
|
+
return this.flourishData.id;
|
|
22
32
|
}
|
|
23
33
|
type() {
|
|
24
|
-
return this.flourishData
|
|
34
|
+
return this.flourishData.type ?? 'flourish';
|
|
25
35
|
}
|
|
26
36
|
format() {
|
|
27
37
|
return 'standard';
|
|
28
38
|
}
|
|
29
39
|
flourishUrl() {
|
|
30
|
-
|
|
31
|
-
const cacheBusterTimestamp = Math.floor(Date.now() / (5 * 60 * 1000));
|
|
32
|
-
return `https://public.flourish.studio/${this.type()}/${this.id()}/thumbnail?cacheBuster=${cacheBusterTimestamp}`;
|
|
40
|
+
return FlourishSource.fallbackUrl(this.flourishData);
|
|
33
41
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
static fallbackUrl(data) {
|
|
43
|
+
// Timestamp rounded to the nearest 30 minutes to bust the cache every half an hour
|
|
44
|
+
const cacheBusterTimestamp = Math.floor(Date.now() / (30 * 60 * 1000));
|
|
45
|
+
return `https://public.flourish.studio/${data.type ?? 'flourish'}/${data.id}/thumbnail?cacheBuster=${cacheBusterTimestamp}`;
|
|
46
|
+
}
|
|
47
|
+
static async getImageMetadata(data, context) {
|
|
48
|
+
const url = FlourishSource.fallbackUrl(data);
|
|
40
49
|
try {
|
|
41
|
-
const metadata = await
|
|
42
|
-
|
|
50
|
+
const metadata = await context.dataSources.origami.getImageMetadata(url);
|
|
51
|
+
return {
|
|
43
52
|
width: metadata?.width || DEFAULT_WIDTH,
|
|
44
53
|
height: metadata?.height || DEFAULT_HEIGHT,
|
|
45
54
|
};
|
|
46
55
|
}
|
|
47
56
|
catch (error) {
|
|
48
57
|
if ((0, isError_1.default)(error)) {
|
|
49
|
-
|
|
58
|
+
context.logger.warn({
|
|
50
59
|
event: 'RECOVERABLE_ERROR',
|
|
51
60
|
error: new errors_1.OperationalError({
|
|
52
61
|
code: 'FLOURISH_IMAGE_METADATA_ERROR',
|
|
53
|
-
message: `Error getting image dimensions for Flourish fallback image ${
|
|
62
|
+
message: `Error getting image dimensions for Flourish fallback image ${url}`,
|
|
54
63
|
cause: error,
|
|
55
64
|
}),
|
|
56
65
|
});
|
|
57
66
|
}
|
|
58
|
-
|
|
67
|
+
return {
|
|
59
68
|
width: DEFAULT_WIDTH,
|
|
60
69
|
height: DEFAULT_HEIGHT,
|
|
61
70
|
};
|
|
62
71
|
}
|
|
63
|
-
return this.imageMetadata;
|
|
64
72
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return imageMetadata.width;
|
|
73
|
+
width() {
|
|
74
|
+
return this.flourishData.width ?? DEFAULT_WIDTH;
|
|
68
75
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return imageMetadata.height;
|
|
76
|
+
height() {
|
|
77
|
+
return this.flourishData.height ?? DEFAULT_HEIGHT;
|
|
72
78
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const imageServiceWrappedUrl = (0, imageService_1.default)({
|
|
79
|
+
url() {
|
|
80
|
+
return (0, imageService_1.default)({
|
|
76
81
|
url: this.flourishUrl(),
|
|
77
82
|
systemCode: 'cp-content-pipeline',
|
|
78
|
-
width,
|
|
83
|
+
width: this.width(),
|
|
79
84
|
});
|
|
80
|
-
return imageServiceWrappedUrl;
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
87
|
exports.FlourishSource = FlourishSource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlourishSource.js","sourceRoot":"","sources":["../../src/model/FlourishSource.ts"],"names":[],"mappings":";;;;;;AAAA,2EAAqD;AACrD,iEAAwC;AACxC,2DAAiE;
|
|
1
|
+
{"version":3,"file":"FlourishSource.js","sourceRoot":"","sources":["../../src/model/FlourishSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ describe('FlourishSource', () => {
|
|
|
35
35
|
expect(flourishSource.format()).toBe('standard');
|
|
36
36
|
});
|
|
37
37
|
it('should return the correct flourishUrl', () => {
|
|
38
|
-
expect(flourishSource.flourishUrl()).toBe('https://public.flourish.studio/test-type/1234/thumbnail?cacheBuster=
|
|
38
|
+
expect(flourishSource.flourishUrl()).toBe('https://public.flourish.studio/test-type/1234/thumbnail?cacheBuster=952866');
|
|
39
39
|
});
|
|
40
40
|
it('should return the correct width', async () => {
|
|
41
41
|
const width = await flourishSource.width();
|
|
@@ -52,15 +52,15 @@ describe('FlourishSource', () => {
|
|
|
52
52
|
const flourishImageUrlRegex = new RegExp(/https:\/\/public.flourish.studio\/.*\/.*\/thumbnail/);
|
|
53
53
|
expect(decodeURIComponent(url)).toMatch(flourishImageUrlRegex);
|
|
54
54
|
});
|
|
55
|
-
it('should bust the cache of the fallback image every
|
|
56
|
-
const oldCacheBuster = '
|
|
57
|
-
const newCacheBuster = '
|
|
55
|
+
it('should bust the cache of the fallback image every thirty minutes', async () => {
|
|
56
|
+
const oldCacheBuster = '952866';
|
|
57
|
+
const newCacheBuster = '952867';
|
|
58
58
|
expect(flourishSource.flourishUrl()).toBe(`https://public.flourish.studio/test-type/1234/thumbnail?cacheBuster=${oldCacheBuster}`);
|
|
59
59
|
let newFlourishSource = new FlourishSource_1.FlourishSource(mockFlourishData, context);
|
|
60
60
|
jest.spyOn(Date, 'now').mockImplementation(() => 1715159040000); // 8 May 2024 09:04:00
|
|
61
61
|
expect(newFlourishSource.flourishUrl()).toBe(`https://public.flourish.studio/test-type/1234/thumbnail?cacheBuster=${oldCacheBuster}`);
|
|
62
62
|
newFlourishSource = new FlourishSource_1.FlourishSource(mockFlourishData, context);
|
|
63
|
-
jest.spyOn(Date, 'now').mockImplementation(() =>
|
|
63
|
+
jest.spyOn(Date, 'now').mockImplementation(() => 1715160840000); // 8 May 2024 09:34:00
|
|
64
64
|
expect(newFlourishSource.flourishUrl()).toBe(`https://public.flourish.studio/test-type/1234/thumbnail?cacheBuster=${newCacheBuster}`);
|
|
65
65
|
});
|
|
66
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlourishSource.test.js","sourceRoot":"","sources":["../../src/model/FlourishSource.test.ts"],"names":[],"mappings":";;AAAA,qDAAiD;AAGjD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,MAAM,gBAAgB,GAAG;QACvB,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,cAAc;KAC5B,CAAA;IAED,MAAM,2BAA2B,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IAC7C,MAAM,OAAO,GAAG;QACd,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE;YACX,OAAO,EAAE;gBACP,gBAAgB,EAAE,2BAA2B;aAC9C;SACF;KACyB,CAAA;IAE5B,IAAI,cAA8B,CAAA;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,mBAAmB,GAAG,aAAa,CAAA,CAAC,sBAAsB;QAChE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAA;QAErE,cAAc,GAAG,IAAI,+BAAc,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CACvC,
|
|
1
|
+
{"version":3,"file":"FlourishSource.test.js","sourceRoot":"","sources":["../../src/model/FlourishSource.test.ts"],"names":[],"mappings":"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"}
|
package/lib/model/Image.js
CHANGED
|
@@ -8,7 +8,6 @@ const metadata_1 = require("../helpers/metadata");
|
|
|
8
8
|
const imageService_1 = __importDefault(require("../helpers/imageService"));
|
|
9
9
|
const literal_union_1 = require("../resolvers/literal-union");
|
|
10
10
|
const scalars_1 = require("../resolvers/scalars");
|
|
11
|
-
const isError_1 = __importDefault(require("../helpers/isError"));
|
|
12
11
|
const errors_1 = require("@dotcom-reliability-kit/errors");
|
|
13
12
|
class CAPIImage {
|
|
14
13
|
capiImage;
|
|
@@ -84,7 +83,7 @@ class CAPIImage {
|
|
|
84
83
|
maxAllowedWidth = Math.min(requestedWidth, dimensions?.width || Infinity);
|
|
85
84
|
maxDpr = dimensions
|
|
86
85
|
? Math.min(args.maxDpr || Infinity, Math.floor(dimensions.width / maxAllowedWidth))
|
|
87
|
-
:
|
|
86
|
+
: 2;
|
|
88
87
|
const resolutions = [...Array(maxDpr + 1).keys()].slice(1);
|
|
89
88
|
return resolutions.map((dpr) => ({
|
|
90
89
|
url: (0, imageService_1.default)({
|
|
@@ -111,24 +110,16 @@ class CAPIImage {
|
|
|
111
110
|
height: this.capiImage.pixelHeight,
|
|
112
111
|
};
|
|
113
112
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
message: `Failed to get dimensions for ${this.capiImage.binaryUrl}`,
|
|
125
|
-
url: this.capiImage.binaryUrl,
|
|
126
|
-
cause: error,
|
|
127
|
-
}),
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
113
|
+
// HACK:KB:20241029 graphics and images in layouts don't have pixelWidth/
|
|
114
|
+
// pixelHeight because of reasons. we want to avoid calling Image Service
|
|
115
|
+
// to improve performance. skip calling Image Service for the time being
|
|
116
|
+
this.context.logger.warn({
|
|
117
|
+
event: 'SKIPPING_IMAGE_DIMENSIONS',
|
|
118
|
+
message: 'Not calling Image Service to get graphics dimensions',
|
|
119
|
+
url: this.capiImage.binaryUrl,
|
|
120
|
+
type: this.type(),
|
|
121
|
+
});
|
|
122
|
+
return null;
|
|
132
123
|
}
|
|
133
124
|
credit() {
|
|
134
125
|
return this.capiImage.copyright?.notice ?? null;
|
package/lib/model/Image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/model/Image.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAiD;AACjD,2EAAqD;AAOrD,8DAGmC;AACnC,kDAA6D;AAC7D,
|
|
1
|
+
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/model/Image.ts"],"names":[],"mappings":"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"}
|
package/lib/model/Image.test.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const Image_1 = require("./Image");
|
|
4
|
-
const
|
|
7
|
+
const logger_1 = __importDefault(require("@dotcom-reliability-kit/logger"));
|
|
5
8
|
const imageService_1 = require("../helpers/imageService");
|
|
6
9
|
describe('Image', () => {
|
|
7
10
|
const mockImage = {
|
|
@@ -10,40 +13,32 @@ describe('Image', () => {
|
|
|
10
13
|
title: 'title',
|
|
11
14
|
description: 'description',
|
|
12
15
|
binaryUrl: 'cloudfront.com/image',
|
|
16
|
+
pixelWidth: 5000,
|
|
17
|
+
pixelHeight: 1000,
|
|
13
18
|
};
|
|
14
19
|
const graphic = {
|
|
15
20
|
...mockImage,
|
|
16
21
|
type: 'http://www.ft.com/ontology/content/Graphic',
|
|
17
22
|
};
|
|
18
|
-
const getImageMetadata = globals_1.jest.fn();
|
|
19
23
|
const context = {
|
|
20
|
-
|
|
21
|
-
origami: {
|
|
22
|
-
getImageMetadata,
|
|
23
|
-
},
|
|
24
|
-
capi: {},
|
|
25
|
-
vanityUrls: {},
|
|
26
|
-
},
|
|
24
|
+
logger: logger_1.default,
|
|
27
25
|
systemCode: 'image-test',
|
|
28
26
|
};
|
|
29
|
-
beforeEach(() => {
|
|
30
|
-
getImageMetadata.mockReset();
|
|
31
|
-
});
|
|
32
27
|
describe('sourceSet', () => {
|
|
33
28
|
describe('An image that is provided with a high resolution', () => {
|
|
34
|
-
|
|
35
|
-
beforeAll(async () => {
|
|
36
|
-
getImageMetadata.mockResolvedValue({ width: 5000, height: 1000 });
|
|
29
|
+
it('transforms the URL to use the Origami Image Service', async () => {
|
|
37
30
|
const model = new Image_1.CAPIImage(mockImage, context);
|
|
38
|
-
sourceSet = await model.sourceSet({ width: 1000 });
|
|
39
|
-
});
|
|
40
|
-
it('transforms the URL to use the Origami Image Service', () => {
|
|
31
|
+
const sourceSet = await model.sourceSet({ width: 1000 });
|
|
41
32
|
expect(sourceSet.every((source) => source.url.startsWith('https://www.ft.com/__origami/service/image/v2'))).toBeTruthy();
|
|
42
33
|
});
|
|
43
|
-
it('resizes the image to the requested width', () => {
|
|
34
|
+
it('resizes the image to the requested width', async () => {
|
|
35
|
+
const model = new Image_1.CAPIImage(mockImage, context);
|
|
36
|
+
const sourceSet = await model.sourceSet({ width: 1000 });
|
|
44
37
|
expect(sourceSet.every((source) => source.width === 1000 && source.url.includes('width=1000'))).toBeTruthy();
|
|
45
38
|
});
|
|
46
|
-
it('includes sourceSet for all the possible resolutions we can display the image at, given the requested width and the original source width', () => {
|
|
39
|
+
it('includes sourceSet for all the possible resolutions we can display the image at, given the requested width and the original source width', async () => {
|
|
40
|
+
const model = new Image_1.CAPIImage(mockImage, context);
|
|
41
|
+
const sourceSet = await model.sourceSet({ width: 1000 });
|
|
47
42
|
expect(sourceSet.length).toEqual(5);
|
|
48
43
|
expect(sourceSet[0]?.dpr).toEqual(1);
|
|
49
44
|
expect(sourceSet[0]?.url).toMatch(/dpr=1/);
|
|
@@ -53,8 +48,7 @@ describe('Image', () => {
|
|
|
53
48
|
});
|
|
54
49
|
describe("An image that that isn't wide enough to generate high-resolution sourceSet for", () => {
|
|
55
50
|
it('returns an array with a single resolution iamge service UR', async () => {
|
|
56
|
-
|
|
57
|
-
const model = new Image_1.CAPIImage(mockImage, context);
|
|
51
|
+
const model = new Image_1.CAPIImage({ ...mockImage, pixelWidth: 1500, pixelHeight: 500 }, context);
|
|
58
52
|
const sourceSet = await model.sourceSet({ width: 1000 });
|
|
59
53
|
expect(sourceSet.length).toEqual(1);
|
|
60
54
|
expect(sourceSet[0]).toEqual({
|
|
@@ -66,8 +60,7 @@ describe('Image', () => {
|
|
|
66
60
|
});
|
|
67
61
|
describe('An image that that is smaller than the width that was requested', () => {
|
|
68
62
|
it('returns the image at the same width as the original', async () => {
|
|
69
|
-
|
|
70
|
-
const model = new Image_1.CAPIImage(mockImage, context);
|
|
63
|
+
const model = new Image_1.CAPIImage({ ...mockImage, pixelWidth: 500, pixelHeight: 500 }, context);
|
|
71
64
|
const sourceSet = await model.sourceSet({ width: 1000 });
|
|
72
65
|
expect(sourceSet.length).toEqual(1);
|
|
73
66
|
expect(sourceSet[0]).toEqual({
|
|
@@ -79,8 +72,7 @@ describe('Image', () => {
|
|
|
79
72
|
});
|
|
80
73
|
describe('An image that that is bigger than the maximum width that was requested', () => {
|
|
81
74
|
it('returns the image at the same width as the maximum width', async () => {
|
|
82
|
-
|
|
83
|
-
const model = new Image_1.CAPIImage(mockImage, context);
|
|
75
|
+
const model = new Image_1.CAPIImage({ ...mockImage, pixelWidth: 4000, pixelHeight: 4000 }, context);
|
|
84
76
|
const sourceSet = await model.sourceSet({ width: imageService_1.MAX_IMAGE_WIDTH });
|
|
85
77
|
expect(sourceSet.length).toEqual(1);
|
|
86
78
|
expect(sourceSet[0]?.width).toEqual(imageService_1.MAX_IMAGE_WIDTH);
|
|
@@ -88,8 +80,7 @@ describe('Image', () => {
|
|
|
88
80
|
});
|
|
89
81
|
describe('A large image with the maxDpr argumet passed', () => {
|
|
90
82
|
it('only returns sourceSet up to and including the maxDpr', async () => {
|
|
91
|
-
|
|
92
|
-
const model = new Image_1.CAPIImage(mockImage, context);
|
|
83
|
+
const model = new Image_1.CAPIImage({ ...mockImage, pixelWidth: 5000, pixelHeight: 500 }, context);
|
|
93
84
|
const sourceSet = await model.sourceSet({ width: 1000, maxDpr: 2 });
|
|
94
85
|
expect(sourceSet.length).toEqual(2);
|
|
95
86
|
expect(sourceSet[0]?.dpr).toEqual(1);
|
|
@@ -107,25 +98,6 @@ describe('Image', () => {
|
|
|
107
98
|
};
|
|
108
99
|
const model = new Image_1.CAPIImage(invalidImage, context);
|
|
109
100
|
await expect(model.sourceSet({ width: 1000, maxDpr: 2 })).rejects.toThrow('not-a-uuid is not a valid Content API Image ID');
|
|
110
|
-
expect(getImageMetadata).not.toHaveBeenCalled();
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
describe('When the image service fails to return metadata', () => {
|
|
114
|
-
let sourceSet;
|
|
115
|
-
beforeEach(async () => {
|
|
116
|
-
getImageMetadata.mockRejectedValue(null);
|
|
117
|
-
const model = new Image_1.CAPIImage(mockImage, context);
|
|
118
|
-
sourceSet = await model.sourceSet({ width: 3000 });
|
|
119
|
-
});
|
|
120
|
-
it('passes the requested width to the image service', async () => {
|
|
121
|
-
expect(sourceSet.length).toEqual(1);
|
|
122
|
-
expect(sourceSet[0]?.width).toEqual(3000);
|
|
123
|
-
expect(sourceSet[0]?.url).toMatch(/width=3000/);
|
|
124
|
-
});
|
|
125
|
-
it('falls back to a single DPR source', async () => {
|
|
126
|
-
expect(sourceSet.length).toEqual(1);
|
|
127
|
-
expect(sourceSet[0]?.dpr).toEqual(1);
|
|
128
|
-
expect(sourceSet[0]?.url).toMatch(/dpr=1/);
|
|
129
101
|
});
|
|
130
102
|
});
|
|
131
103
|
});
|
|
@@ -173,16 +145,14 @@ describe('Image', () => {
|
|
|
173
145
|
});
|
|
174
146
|
});
|
|
175
147
|
describe('width/height', () => {
|
|
176
|
-
it('returns the original width and height from
|
|
177
|
-
getImageMetadata.mockResolvedValue({ width: 100, height: 200 });
|
|
148
|
+
it('returns the original width and height from capi data', async () => {
|
|
178
149
|
const model = new Image_1.CAPIImage(mockImage, context);
|
|
179
150
|
const { width, height } = (await model.dimensions()) || {};
|
|
180
|
-
expect(width).toEqual(
|
|
181
|
-
expect(height).toEqual(
|
|
151
|
+
expect(width).toEqual(5000);
|
|
152
|
+
expect(height).toEqual(1000);
|
|
182
153
|
});
|
|
183
|
-
it('returns null if
|
|
184
|
-
|
|
185
|
-
const model = new Image_1.CAPIImage(mockImage, context);
|
|
154
|
+
it('returns null if no width and height in capi data', async () => {
|
|
155
|
+
const model = new Image_1.CAPIImage({ ...mockImage, pixelHeight: undefined, pixelWidth: undefined }, context);
|
|
186
156
|
const dimensions = await model.dimensions();
|
|
187
157
|
expect(dimensions).toEqual(null);
|
|
188
158
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.test.js","sourceRoot":"","sources":["../../src/model/Image.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Image.test.js","sourceRoot":"","sources":["../../src/model/Image.test.ts"],"names":[],"mappings":";;;;;AAAA,mCAAmC;AACnC,4EAAmD;AAGnD,0DAAyD;AAEzD,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,MAAM,SAAS,GAAG;QAChB,EAAE,EAAE,iEAAiE;QACrE,IAAI,EAAE,0CAAmD;QACzD,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,sBAAsB;QACjC,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;KAClB,CAAA;IAED,MAAM,OAAO,GAAG;QACd,GAAG,SAAS;QACZ,IAAI,EAAE,4CAAqD;KAC5D,CAAA;IAED,MAAM,OAAO,GAAG;QACd,MAAM,EAAN,gBAAM;QACN,UAAU,EAAE,YAAY;KACE,CAAA;IAE5B,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAChE,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBAExD,MAAM,CACJ,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CACzB,MAAM,CAAC,GAAG,CAAC,UAAU,CACnB,+CAA+C,CAChD,CACF,CACF,CAAC,UAAU,EAAE,CAAA;YAChB,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBACxD,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBAExD,MAAM,CACJ,SAAS,CAAC,KAAK,CACb,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC7D,CACF,CAAC,UAAU,EAAE,CAAA;YAChB,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,0IAA0I,EAAE,KAAK,IAAI,EAAE;gBACxJ,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC5C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gFAAgF,EAAE,GAAG,EAAE;YAC9F,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,EACpD,OAAO,CACR,CAAA;gBACD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC3B,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,yKAAyK;oBAC9K,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,iEAAiE,EAAE,GAAG,EAAE;YAC/E,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EACnD,OAAO,CACR,CAAA;gBACD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC3B,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,wKAAwK;oBAC7K,KAAK,EAAE,GAAG;iBACX,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,wEAAwE,EAAE,GAAG,EAAE;YACtF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;gBACxE,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EACrD,OAAO,CACR,CAAA;gBACD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,8BAAe,EAAE,CAAC,CAAA;gBACnE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,8BAAe,CAAC,CAAA;YACtD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;YAC5D,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACrE,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,EACpD,OAAO,CACR,CAAA;gBACD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;gBACnE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACtC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACvC,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;gBAC/B,MAAM,YAAY,GAAG;oBACnB,IAAI,EAAE,0CAAmD;oBACzD,EAAE,EAAE,YAAY;oBAChB,KAAK,EAAE,EAAE;oBACT,WAAW,EAAE,EAAE;oBACf,SAAS,EAAE,EAAE;iBACd,CAAA;gBACD,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;gBAClD,MAAM,MAAM,CACV,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAC5C,CAAC,OAAO,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAA;YACrE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,MAAM,EAAE,SAAS;aAClB,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,MAAM,EAAE,sBAAoD;aAC7D,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,MAAM,EAAE,gBAAgB;aACzB,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,eAAe,EAAE,OAAO;aACzB,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,eAAe,EAAE,OAAO;aACzB,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;aACb,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAA;YAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,EAC/D,OAAO,CACR,CAAA;YACD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;YAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;YAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,kBAAkB,GAAG;gBACzB,GAAG,SAAS;gBACZ,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;aAClC,CAAA;YACD,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;YACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;YAChC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;YAChC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;YACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,GAAG,GAAG,IAAI,iBAAS,CACvB;gBACE,GAAG,SAAS;gBACZ,WAAW,EAAE,gCAAgC;aAC9C,EACD,OAAO,CACR,CAAC,GAAG,EAAE,CAAA;YACP,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;QAC9D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kGAAkG,EAAE,GAAG,EAAE;YAC1G,MAAM,GAAG,GAAG,IAAI,iBAAS,CACvB;gBACE,GAAG,SAAS;gBACZ,WAAW,EAAE,EAAE;aAChB,EACD,OAAO,CACR,CAAC,GAAG,EAAE,CAAA;YACP,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yGAAyG,EAAE,GAAG,EAAE;YACjH,MAAM,GAAG,GAAG,IAAI,iBAAS,CACvB;gBACE,GAAG,OAAO;gBACV,WAAW,EAAE,EAAE;aAChB,EACD,OAAO,CACR,CAAC,GAAG,EAAE,CAAA;YACP,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -6,7 +6,7 @@ export declare class LeadFlourish {
|
|
|
6
6
|
private capiResponse;
|
|
7
7
|
private context;
|
|
8
8
|
constructor(capiResponse: CapiResponse, context: QueryContext);
|
|
9
|
-
fallbackImage(): Promise<FlourishSource>;
|
|
9
|
+
fallbackImage(): Promise<FlourishSource | null>;
|
|
10
10
|
id(): string | null;
|
|
11
11
|
type(): string;
|
|
12
12
|
description(): string;
|
|
@@ -13,7 +13,10 @@ class LeadFlourish {
|
|
|
13
13
|
}
|
|
14
14
|
async fallbackImage() {
|
|
15
15
|
const flourishData = this.capiResponse.leadFlourish();
|
|
16
|
-
|
|
16
|
+
if (!flourishData) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return FlourishSource_1.FlourishSource.createWithMetadata(flourishData, this.context);
|
|
17
20
|
}
|
|
18
21
|
id() {
|
|
19
22
|
return this.capiResponse.leadFlourish()?.id || null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeadFlourish.js","sourceRoot":"","sources":["../../src/model/LeadFlourish.ts"],"names":[],"mappings":";;;AAEA,qDAAiD;AAEjD,MAAa,YAAY;IAGb;IACA;IAHV,WAAW,CAAQ;IACnB,YACU,YAA0B,EAC1B,OAAqB;QADrB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,YAAO,GAAP,OAAO,CAAc;QAE7B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,qBAAqB,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAA;QACrD,OAAO,IAAI,+BAAc,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"LeadFlourish.js","sourceRoot":"","sources":["../../src/model/LeadFlourish.ts"],"names":[],"mappings":";;;AAEA,qDAAiD;AAEjD,MAAa,YAAY;IAGb;IACA;IAHV,WAAW,CAAQ;IACnB,YACU,YAA0B,EAC1B,OAAqB;QADrB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,YAAO,GAAP,OAAO,CAAc;QAE7B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,qBAAqB,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAA;QACrD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,+BAAc,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IACtE,CAAC;IAED,EAAE;QACA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,IAAI,CAAA;IACrD,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,IAAI,IAAI,eAAe,CAAA;IAClE,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,WAAW,IAAI,EAAE,CAAA;IAC5D,CAAC;CACF;AA7BD,oCA6BC"}
|