@financial-times/cp-content-pipeline-schema 0.3.3 → 0.3.5
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 +23 -0
- package/lib/content.js +1 -1
- package/lib/content.js.map +1 -1
- package/lib/datasources/instrumented.d.ts +1 -0
- package/lib/datasources/instrumented.js +22 -0
- package/lib/datasources/instrumented.js.map +1 -1
- package/lib/index.d.ts +3 -0
- package/lib/index.js.map +1 -1
- package/lib/model/CapiResponse.d.ts +2 -1
- package/lib/model/CapiResponse.js +7 -3
- package/lib/model/CapiResponse.js.map +1 -1
- package/lib/model/CapiResponse.test.js +39 -1
- package/lib/model/CapiResponse.test.js.map +1 -1
- package/lib/tags/Flourish.d.ts +24 -0
- package/lib/tags/Flourish.js +37 -0
- package/lib/tags/Flourish.js.map +1 -0
- package/lib/tags/index.js +2 -0
- package/lib/tags/index.js.map +1 -1
- package/lib/tags/model/Flourish.d.ts +16 -0
- package/lib/tags/model/Flourish.js +54 -0
- package/lib/tags/model/Flourish.js.map +1 -0
- package/lib/tags/model/Flourish.test.d.ts +1 -0
- package/lib/tags/model/Flourish.test.js +208 -0
- package/lib/tags/model/Flourish.test.js.map +1 -0
- package/package.json +3 -1
- package/src/content.ts +1 -1
- package/src/datasources/instrumented.ts +25 -0
- package/src/index.ts +3 -0
- package/src/model/CapiResponse.test.ts +63 -2
- package/src/model/CapiResponse.ts +14 -3
- package/src/tags/Flourish.ts +51 -0
- package/src/tags/index.ts +2 -0
- package/src/tags/model/Flourish.test.ts +257 -0
- package/src/tags/model/Flourish.ts +61 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.5](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.3.4...cp-content-pipeline-schema-v0.3.5) (2022-11-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* create a new Flourish tag class ([95b7e9e](https://github.com/Financial-Times/cp-content-pipeline/commit/95b7e9e2962914679019938e9f4670d54b033cba))
|
|
9
|
+
* use the new Flourish tag in the schema and article query ([5e87745](https://github.com/Financial-Times/cp-content-pipeline/commit/5e87745e8d0ad0df51adbf4cf4790127e03f758d))
|
|
10
|
+
|
|
11
|
+
## [0.3.4](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.3.3...cp-content-pipeline-schema-v0.3.4) (2022-10-27)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* add @dotcom-reliability-kit/logger and make it available via context ([69f19c6](https://github.com/Financial-Times/cp-content-pipeline/commit/69f19c6a11b30c13be9c9d64f9394ee984a05a24))
|
|
17
|
+
* log datasource requests ([78a55fb](https://github.com/Financial-Times/cp-content-pipeline/commit/78a55fbdf931c3a5f5c70989dca5015cf6d619b5))
|
|
18
|
+
* pass x-request-id header to datasources ([dbff059](https://github.com/Financial-Times/cp-content-pipeline/commit/dbff059d1f807e4b092997d0a8a41697d9d13888))
|
|
19
|
+
* surface x-request-id header in logs ([9dd1ed7](https://github.com/Financial-Times/cp-content-pipeline/commit/9dd1ed7ece3927f882e71bab573e336b21bd2eb6))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Bug Fixes
|
|
23
|
+
|
|
24
|
+
* only include allowed headers in datasource logs ([6cb4b75](https://github.com/Financial-Times/cp-content-pipeline/commit/6cb4b755149ab24056c216b886eced2421cc4160))
|
|
25
|
+
|
|
3
26
|
## [0.3.3](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.3.2...cp-content-pipeline-schema-v0.3.3) (2022-10-24)
|
|
4
27
|
|
|
5
28
|
|
package/lib/content.js
CHANGED
|
@@ -83,7 +83,7 @@ export const resolvers = {
|
|
|
83
83
|
publishedDate: (parent) => parent.publishedDate(),
|
|
84
84
|
},
|
|
85
85
|
LiveBlogPackage: {
|
|
86
|
-
liveBlogPosts: (parent) => parent.
|
|
86
|
+
liveBlogPosts: (parent) => parent.liveBlogPosts(),
|
|
87
87
|
realtime: (parent) => parent.realtime(),
|
|
88
88
|
},
|
|
89
89
|
};
|
package/lib/content.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAIjC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;CAgBrB,CAAA;AACD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,CAAA;;QAEG,aAAa;;;;;;;;;;QAUb,aAAa;;;;QAIb,aAAa;;;;;;QAMb,aAAa;;;;QAIb,aAAa;;;;QAIb,aAAa;;;;QAIb,aAAa;;GAElB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAA6C;IACjE,OAAO,EAAE;QACP,aAAa,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;QACtD,IAAI,CAAC,MAAoB;YACvB,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;gBACvB,cAAc,EAAE,MAAM;aACvB,CAAA;QACH,CAAC;QACD,MAAM,EAAE,CAAC,MAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAC9C,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;QAC7B,MAAM,CAAC,MAAoB;YACzB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;YAClC,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAA;YAC5B,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAA;YACrD,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,eAAe,EAAE,CAAA;QACnE,CAAC;QACD,GAAG,EAAE,CAAC,MAAoB,EAAE,IAA2B,EAAE,EAAE,CACzD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;QACrD,IAAI,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;QAC7C,SAAS,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE;QACvD,QAAQ,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE;QAC7D,aAAa,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,qBAAqB,EAAE;QACvE,aAAa,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE;KAChE;IAED,eAAe,EAAE;QACf,aAAa,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAIjC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;CAgBrB,CAAA;AACD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,CAAA;;QAEG,aAAa;;;;;;;;;;QAUb,aAAa;;;;QAIb,aAAa;;;;;;QAMb,aAAa;;;;QAIb,aAAa;;;;QAIb,aAAa;;;;QAIb,aAAa;;GAElB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAA6C;IACjE,OAAO,EAAE;QACP,aAAa,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;QACtD,IAAI,CAAC,MAAoB;YACvB,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;gBACvB,cAAc,EAAE,MAAM;aACvB,CAAA;QACH,CAAC;QACD,MAAM,EAAE,CAAC,MAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAC9C,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;QAC7B,MAAM,CAAC,MAAoB;YACzB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;YAClC,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAA;YAC5B,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAA;YACrD,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,eAAe,EAAE,CAAA;QACnE,CAAC;QACD,GAAG,EAAE,CAAC,MAAoB,EAAE,IAA2B,EAAE,EAAE,CACzD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;QACrD,IAAI,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;QAC7C,SAAS,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE;QACvD,QAAQ,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE;QAC7D,aAAa,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,qBAAqB,EAAE;QACvE,aAAa,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE;KAChE;IAED,eAAe,EAAE;QACf,aAAa,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE;QAC/D,QAAQ,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;KACtD;CACF,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { Request, RequestOptions, Response, RESTDataSource } from 'apollo-dataso
|
|
|
2
2
|
import { QueryContext } from '../index.js';
|
|
3
3
|
export declare class InstrumentedRESTDataSource extends RESTDataSource<QueryContext> {
|
|
4
4
|
startTime?: bigint;
|
|
5
|
+
includeHeadersInLogs: string[];
|
|
5
6
|
willSendRequest(request: RequestOptions): void;
|
|
6
7
|
didReceiveResponse<TResult>(response: Response, request: Request): Promise<TResult>;
|
|
7
8
|
}
|
|
@@ -1,9 +1,31 @@
|
|
|
1
1
|
import { RESTDataSource, } from 'apollo-datasource-rest';
|
|
2
2
|
export class InstrumentedRESTDataSource extends RESTDataSource {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.includeHeadersInLogs = [];
|
|
6
|
+
}
|
|
3
7
|
willSendRequest(request) {
|
|
4
8
|
var _a;
|
|
5
9
|
this.startTime = process.hrtime.bigint();
|
|
6
10
|
(_a = this.context.metrics) === null || _a === void 0 ? void 0 : _a.count(`graphql.datasource.${this.constructor.name}.request.count`, 1);
|
|
11
|
+
this.context.logger.info({
|
|
12
|
+
event: 'REQUEST_DATASOURCE',
|
|
13
|
+
datasource: this.constructor.name,
|
|
14
|
+
request: {
|
|
15
|
+
id: this.context.requestId,
|
|
16
|
+
url: this.baseURL + request.path,
|
|
17
|
+
method: request.method,
|
|
18
|
+
headers: request.headers
|
|
19
|
+
? Object.fromEntries(this.includeHeadersInLogs.map((header) => [
|
|
20
|
+
header,
|
|
21
|
+
request.headers.get(header),
|
|
22
|
+
]))
|
|
23
|
+
: {},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
if (this.context.requestId) {
|
|
27
|
+
request.headers.set('x-request-id', this.context.requestId);
|
|
28
|
+
}
|
|
7
29
|
}
|
|
8
30
|
async didReceiveResponse(response, request) {
|
|
9
31
|
var _a, _b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumented.js","sourceRoot":"","sources":["../../src/datasources/instrumented.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,GACf,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"instrumented.js","sourceRoot":"","sources":["../../src/datasources/instrumented.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,GACf,MAAM,wBAAwB,CAAA;AAM/B,MAAM,OAAO,0BAA2B,SAAQ,cAA4B;IAA5E;;QAEE,yBAAoB,GAAa,EAAE,CAAA;IAkDrC,CAAC;IAhDC,eAAe,CAAC,OAAuB;;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QACxC,MAAA,IAAI,CAAC,OAAO,CAAC,OAAO,0CAAE,KAAK,CACzB,sBAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,gBAAgB,EAC3D,CAAC,CACF,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,oBAAoB;YAC3B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YACjC,OAAO,EAAE;gBACP,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBAC1B,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACtB,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;wBACxC,MAAM;wBACN,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;qBAC5B,CAAC,CACH;oBACH,CAAC,CAAC,EAAE;aACc;SACvB,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;SAC5D;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,QAAkB,EAClB,OAAgB;;QAEhB,wGAAwG;QACxG,oEAAoE;QACpE,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAU,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAE1E,MAAA,IAAI,CAAC,OAAO,CAAC,OAAO,0CAAE,KAAK,CACzB,sBAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,QAAQ,CAAC,MAAM,QAAQ,EAC/E,CAAC,CACF,CAAA;QACD,MAAA,IAAI,CAAC,OAAO,CAAC,OAAO,0CAAE,KAAK,CACzB,sBAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,QAAQ,CAAC,MAAM,OAAO,EAC9E,MAAM,CAAC,QAAQ,CAAC,CACjB,CAAA;QAED,OAAO,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;CACF"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { IResolvers } from '@graphql-tools/utils';
|
|
2
2
|
import { dataSources, DataSources } from './datasources/index.js';
|
|
3
3
|
import type { Metrics } from 'next-metrics';
|
|
4
|
+
import type { Logger } from '@dotcom-reliability-kit/logger';
|
|
4
5
|
export declare type QueryContext = {
|
|
5
6
|
metrics: Metrics;
|
|
6
7
|
dataSources: DataSources;
|
|
7
8
|
systemCode: string;
|
|
9
|
+
requestId?: string;
|
|
10
|
+
logger: Logger;
|
|
8
11
|
};
|
|
9
12
|
export declare const resolvers: IResolvers<unknown, Pick<QueryContext, 'dataSources'>>;
|
|
10
13
|
export declare const typeDefs: (import("graphql").DocumentNode | import("graphql").DocumentNode[])[];
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAe,MAAM,wBAAwB,CAAA;AAEjE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EACL,OAAO,IAAI,QAAQ,EACnB,SAAS,IAAI,iBAAiB,GAC/B,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,SAAS,IAAI,oBAAoB,GAClC,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,OAAO,IAAI,GAAG,EACd,eAAe,IAAI,SAAS,EAC5B,SAAS,IAAI,YAAY,GAC1B,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAe,MAAM,wBAAwB,CAAA;AAEjE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EACL,OAAO,IAAI,QAAQ,EACnB,SAAS,IAAI,iBAAiB,GAC/B,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,SAAS,IAAI,oBAAoB,GAClC,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,OAAO,IAAI,GAAG,EACd,eAAe,IAAI,SAAS,EAC5B,SAAS,IAAI,YAAY,GAC1B,MAAM,iBAAiB,CAAA;AAIxB,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;CAOvB,CAAA;AAUD,MAAM,CAAC,MAAM,SAAS,GAGlB;IACF,KAAK,EAAE;QACL,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO;YACjC,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvD,CAAC;QACD,eAAe,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE;YAC5B,OAAO,OAAO,CAAA;QAChB,CAAC;KACF;IAED,SAAS,EAAE;QACT,aAAa,CAAC,GAAsC;YAClD,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CAAA;QAC7B,CAAC;KACF;IAED,GAAG,gBAAgB;IACnB,GAAG,gBAAgB;IACnB,GAAG,gBAAgB;IACnB,GAAG,cAAc;IACjB,GAAG,YAAY;IACf,GAAG,eAAe;IAClB,GAAG,iBAAiB;IACpB,GAAG,oBAAoB;CACxB,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO;IACP,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,GAAG;IACH,YAAY;CACb,CAAA;AAED,OAAO,EAAE,WAAW,EAAe,CAAA"}
|
|
@@ -44,7 +44,8 @@ export declare class CapiResponse {
|
|
|
44
44
|
isColumn(): boolean;
|
|
45
45
|
isOpinion(): boolean;
|
|
46
46
|
isPodcast(): boolean;
|
|
47
|
-
contains(): Promise<CapiResponse
|
|
47
|
+
contains(): Promise<CapiResponse[]>;
|
|
48
|
+
liveBlogPosts(): Promise<CapiResponse[]>;
|
|
48
49
|
realtime(): boolean;
|
|
49
50
|
}
|
|
50
51
|
export {};
|
|
@@ -166,9 +166,13 @@ export class CapiResponse {
|
|
|
166
166
|
isPodcast() {
|
|
167
167
|
return this.capiData.types.includes('http://www.ft.com/ontology/content/Audio');
|
|
168
168
|
}
|
|
169
|
-
contains() {
|
|
170
|
-
|
|
171
|
-
|
|
169
|
+
async contains() {
|
|
170
|
+
return Promise.all((this.capiData.contains || []).map(({ id }) => this.context.dataSources.capi.getContent(uuidFromUrl(id))));
|
|
171
|
+
}
|
|
172
|
+
async liveBlogPosts() {
|
|
173
|
+
const contains = await this.contains();
|
|
174
|
+
return contains.sort((a, b) => new Date(b.publishedDate()).getTime() -
|
|
175
|
+
new Date(a.publishedDate()).getTime());
|
|
172
176
|
}
|
|
173
177
|
realtime() {
|
|
174
178
|
return Boolean(this.capiData.realtime);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapiResponse.js","sourceRoot":"","sources":["../../src/model/CapiResponse.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CapiResponse.js","sourceRoot":"","sources":["../../src/model/CapiResponse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { CapiResponse } from './CapiResponse.js';
|
|
2
2
|
import { baseCapiObject } from '../fixtures/capiObject.js';
|
|
3
3
|
import cloneDeep from 'clone-deep';
|
|
4
|
-
const
|
|
4
|
+
const now = Date.now();
|
|
5
|
+
const context = {
|
|
6
|
+
dataSources: {
|
|
7
|
+
capi: {
|
|
8
|
+
getContent: (id) => Promise.resolve(new CapiResponse(cloneDeep({
|
|
9
|
+
...baseCapiObject,
|
|
10
|
+
id,
|
|
11
|
+
publishedDate: new Date(now + parseInt(id.slice(-1), 10)).toISOString(),
|
|
12
|
+
}), {})),
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
};
|
|
5
16
|
describe('CAPI response', () => {
|
|
6
17
|
describe('Content ID', () => {
|
|
7
18
|
test('returns the UUID', () => {
|
|
@@ -31,5 +42,32 @@ describe('CAPI response', () => {
|
|
|
31
42
|
expect(() => capiResponse.type()).toThrowError('Content type is invalid: http://www.ft.com/ontology/content/Unknown');
|
|
32
43
|
});
|
|
33
44
|
});
|
|
45
|
+
describe('liveBlogPosts', () => {
|
|
46
|
+
test('returns a resolved array of the articles contained sorted by most recently published', async () => {
|
|
47
|
+
const liveBlogPackage = cloneDeep({
|
|
48
|
+
...baseCapiObject,
|
|
49
|
+
type: 'http://www.ft.com/ontology/content/LiveBlogPackage',
|
|
50
|
+
contains: [
|
|
51
|
+
{
|
|
52
|
+
id: 'http://api.ft.com/things/000000000-0000-0000-0000-000000000000',
|
|
53
|
+
apiUrl: 'http://api.ft.com/content/000000000-0000-0000-0000-000000000000',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'http://api.ft.com/things/000000000-0000-0000-0000-000000000002',
|
|
57
|
+
apiUrl: 'http://api.ft.com/content/000000000-0000-0000-0000-000000000002',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 'http://api.ft.com/things/000000000-0000-0000-0000-000000000001',
|
|
61
|
+
apiUrl: 'http://api.ft.com/content/000000000-0000-0000-0000-000000000001',
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
const capiResponse = new CapiResponse(liveBlogPackage, context);
|
|
66
|
+
const liveBlogPosts = await capiResponse.liveBlogPosts();
|
|
67
|
+
expect(liveBlogPosts[0].id()).toEqual('00000000-0000-0000-0000-000000000002');
|
|
68
|
+
expect(liveBlogPosts[1].id()).toEqual('00000000-0000-0000-0000-000000000001');
|
|
69
|
+
expect(liveBlogPosts[2].id()).toEqual('00000000-0000-0000-0000-000000000000');
|
|
70
|
+
});
|
|
71
|
+
});
|
|
34
72
|
});
|
|
35
73
|
//# sourceMappingURL=CapiResponse.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapiResponse.test.js","sourceRoot":"","sources":["../../src/model/CapiResponse.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D,OAAO,SAAS,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"CapiResponse.test.js","sourceRoot":"","sources":["../../src/model/CapiResponse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TagConstructor } from './index.js';
|
|
2
|
+
import type * as hast from 'hast';
|
|
3
|
+
import { QueryContext } from '../index.js';
|
|
4
|
+
import { Flourish as FlourishModel } from './model/Flourish.js';
|
|
5
|
+
declare class Flourish {
|
|
6
|
+
id: string;
|
|
7
|
+
model: FlourishModel;
|
|
8
|
+
static selector: string;
|
|
9
|
+
constructor(node: hast.Element);
|
|
10
|
+
static resolve: {
|
|
11
|
+
id: (parent: Flourish) => string;
|
|
12
|
+
type: (parent: Flourish) => string;
|
|
13
|
+
description: (parent: Flourish) => string;
|
|
14
|
+
fullGrid: (parent: Flourish) => boolean;
|
|
15
|
+
fallbackImage: (parent: Flourish, _args: any, context: QueryContext) => Promise<{
|
|
16
|
+
url: string;
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
static typeDef: import("graphql").DocumentNode;
|
|
22
|
+
}
|
|
23
|
+
declare const FlourishClass: TagConstructor<Flourish>;
|
|
24
|
+
export { FlourishClass as Flourish };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { gql } from 'graphql-tag';
|
|
3
|
+
import { Flourish as FlourishModel } from './model/Flourish.js';
|
|
4
|
+
class Flourish {
|
|
5
|
+
constructor(node) {
|
|
6
|
+
var _b;
|
|
7
|
+
if (typeof ((_b = node.properties) === null || _b === void 0 ? void 0 : _b.id) !== 'string') {
|
|
8
|
+
throw new Error('Flourish is missing a href');
|
|
9
|
+
}
|
|
10
|
+
this.id = node.properties.id;
|
|
11
|
+
// Adding the model to the instance is required until we refactor how the resolve method integrates
|
|
12
|
+
this.model = new FlourishModel(node, this.id);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
_a = Flourish;
|
|
16
|
+
Flourish.selector = '[data-asset-type="flourish"]';
|
|
17
|
+
Flourish.resolve = {
|
|
18
|
+
id: (parent) => parent.id,
|
|
19
|
+
type: (parent) => parent.model.type(),
|
|
20
|
+
description: (parent) => parent.model.description(),
|
|
21
|
+
fullGrid: (parent) => parent.model.fullGrid(),
|
|
22
|
+
fallbackImage: async (parent, _args, context) => parent.model.fallbackImage(context),
|
|
23
|
+
};
|
|
24
|
+
Flourish.typeDef = gql `
|
|
25
|
+
type Flourish {
|
|
26
|
+
id: String!
|
|
27
|
+
type: String!
|
|
28
|
+
fullGrid: Boolean!
|
|
29
|
+
description: String
|
|
30
|
+
fallbackImage: FlourishFallback
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
${FlourishModel.typedef}
|
|
34
|
+
`;
|
|
35
|
+
const FlourishClass = Flourish;
|
|
36
|
+
export { FlourishClass as Flourish };
|
|
37
|
+
//# sourceMappingURL=Flourish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Flourish.js","sourceRoot":"","sources":["../../src/tags/Flourish.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAIjC,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAE/D,MAAM,QAAQ;IAMZ,YAAY,IAAkB;;QAC5B,IAAI,OAAO,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,EAAE,CAAA,KAAK,QAAQ,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;SAC9C;QAED,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;QAE5B,mGAAmG;QACnG,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/C,CAAC;;;AAXM,iBAAQ,GAAG,8BAA8B,CAAA;AAazC,gBAAO,GAAG;IACf,EAAE,EAAE,CAAC,MAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE;IACnC,IAAI,EAAE,CAAC,MAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;IAC/C,WAAW,EAAE,CAAC,MAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;IAC7D,QAAQ,EAAE,CAAC,MAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;IACvD,aAAa,EAAE,KAAK,EAClB,MAAgB,EAChB,KAAU,EACV,OAAqB,EACrB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;CACzC,CAAA;AAEM,gBAAO,GAAG,GAAG,CAAA;;;;;;;;;MAShB,aAAa,CAAC,OAAO;GACxB,CAAA;AAGH,MAAM,aAAa,GAA6B,QAAQ,CAAA;AAExD,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,CAAA"}
|
package/lib/tags/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { ImageSet } from './ImageSet.js';
|
|
|
4
4
|
import { PullQuote } from './PullQuote.js';
|
|
5
5
|
import { Recommended } from './Recommended.js';
|
|
6
6
|
import { Tweet } from './Tweet.js';
|
|
7
|
+
import { Flourish } from './Flourish.js';
|
|
7
8
|
import { gql } from 'graphql-tag';
|
|
8
9
|
function createTagWithoutReference(name, selector) {
|
|
9
10
|
var _a;
|
|
@@ -38,6 +39,7 @@ export const tags = {
|
|
|
38
39
|
Emphasis: createTagWithoutReference('Emphasis', 'em'),
|
|
39
40
|
Strong: createTagWithoutReference('Strong', 'strong'),
|
|
40
41
|
Strikethrough: createTagWithoutReference('Strikethrough', 's'),
|
|
42
|
+
Flourish,
|
|
41
43
|
};
|
|
42
44
|
const tagEntries = Object.entries(tags);
|
|
43
45
|
const tagsWithReferences = tagEntries.filter(([, tag]) => tag.typeDef);
|
package/lib/tags/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tags/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAWjC,SAAS,yBAAyB,CAChC,IAAY,EACZ,QAAgB;;IAEhB,MAAM,GAAG,SAAG;SAEX;QADQ,WAAQ,GAAG,QAAQ;WAC3B,CAAA;IAED,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAEnD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAmC;IAClD,IAAI;IACJ,YAAY,EAAE,yBAAyB,CAAC,cAAc,EAAE,cAAc,CAAC;IACvE,QAAQ;IACR,WAAW;IACX,gBAAgB,EAAE,yBAAyB,CACzC,kBAAkB,EAClB,mBAAmB,CACpB;IACD,SAAS,EAAE,yBAAyB,CAAC,WAAW,EAAE,GAAG,CAAC;IACtD,aAAa,EAAE,yBAAyB,CAAC,eAAe,EAAE,IAAI,CAAC;IAC/D,WAAW,EAAE,yBAAyB,CAAC,aAAa,EAAE,IAAI,CAAC;IAC3D,QAAQ,EAAE,yBAAyB,CAAC,UAAU,EAAE,IAAI,CAAC;IACrD,MAAM,EAAE,yBAAyB,CAAC,QAAQ,EAAE,4BAA4B,CAAC;IACzE,eAAe,EAAE,yBAAyB,CACxC,iBAAiB,EACjB,iDAAiD,CAClD;IACD,UAAU,EAAE,yBAAyB,CACnC,YAAY,EACZ,uCAAuC,CACxC;IACD,WAAW;IACX,SAAS;IACT,aAAa,EAAE,yBAAyB,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAC5E,eAAe,EAAE,yBAAyB,CACxC,eAAe,EACf,mBAAmB,CACpB;IACD,UAAU,EAAE,yBAAyB,CAAC,YAAY,EAAE,YAAY,CAAC;IACjE,KAAK;IACL,SAAS,EAAE,yBAAyB,CAAC,WAAW,EAAE,IAAI,CAAC;IACvD,cAAc,EAAE,yBAAyB,CAAC,gBAAgB,EAAE,IAAI,CAAC;IACjE,QAAQ,EAAE,yBAAyB,CAAC,UAAU,EAAE,IAAI,CAAC;IACrD,MAAM,EAAE,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACrD,aAAa,EAAE,yBAAyB,CAAC,eAAe,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tags/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type * as hast from 'hast';
|
|
2
|
+
import { QueryContext } from '../../index.js';
|
|
3
|
+
export declare class Flourish {
|
|
4
|
+
private node;
|
|
5
|
+
private id;
|
|
6
|
+
constructor(node: hast.Element, id: string);
|
|
7
|
+
type(): string;
|
|
8
|
+
description(): string;
|
|
9
|
+
fullGrid(): boolean;
|
|
10
|
+
fallbackImage(context: QueryContext): Promise<{
|
|
11
|
+
url: string;
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
}>;
|
|
15
|
+
static typedef: string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import imageServiceUrl from '../../helpers/imageService.js';
|
|
2
|
+
export class Flourish {
|
|
3
|
+
constructor(node, id) {
|
|
4
|
+
this.node = node;
|
|
5
|
+
this.id = id;
|
|
6
|
+
}
|
|
7
|
+
type() {
|
|
8
|
+
var _a;
|
|
9
|
+
// Default to visulisation for backwards compatibility
|
|
10
|
+
return typeof ((_a = this.node.properties) === null || _a === void 0 ? void 0 : _a.dataFlourishType) === 'string'
|
|
11
|
+
? this.node.properties.dataFlourishType
|
|
12
|
+
: 'visulisation';
|
|
13
|
+
}
|
|
14
|
+
description() {
|
|
15
|
+
var _a;
|
|
16
|
+
return typeof ((_a = this.node.properties) === null || _a === void 0 ? void 0 : _a.description) === 'string'
|
|
17
|
+
? this.node.properties.description
|
|
18
|
+
: '';
|
|
19
|
+
}
|
|
20
|
+
fullGrid() {
|
|
21
|
+
var _a;
|
|
22
|
+
return ((_a = this.node.properties) === null || _a === void 0 ? void 0 : _a.dataLayoutWidth) === 'full-grid' ? true : false;
|
|
23
|
+
}
|
|
24
|
+
async fallbackImage(context) {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
// Some magic numbers that exist in the current code base and I don't know why these numbers
|
|
27
|
+
const DEFAULT_WIDTH = 2626;
|
|
28
|
+
const DEFAULT_HEIGHT = 1459;
|
|
29
|
+
const type = this.type();
|
|
30
|
+
const timestamp = typeof ((_a = this.node.properties) === null || _a === void 0 ? void 0 : _a.dataTimeStamp) === 'string'
|
|
31
|
+
? (_b = this.node.properties) === null || _b === void 0 ? void 0 : _b.dataTimeStamp
|
|
32
|
+
: false;
|
|
33
|
+
const flourishUrl = `https://public.flourish.studio/${type}/${this.id}/thumbnail${timestamp ? '?cacheBuster=' + timestamp : ''}`;
|
|
34
|
+
const imageMetadata = await context.dataSources.origami.getImageMetadata(flourishUrl);
|
|
35
|
+
const imageServiceWrappedUrl = imageServiceUrl({
|
|
36
|
+
url: flourishUrl,
|
|
37
|
+
systemCode: context.systemCode,
|
|
38
|
+
width: (imageMetadata === null || imageMetadata === void 0 ? void 0 : imageMetadata.width) || DEFAULT_WIDTH,
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
url: imageServiceWrappedUrl,
|
|
42
|
+
width: (imageMetadata === null || imageMetadata === void 0 ? void 0 : imageMetadata.width) ? imageMetadata === null || imageMetadata === void 0 ? void 0 : imageMetadata.width : DEFAULT_WIDTH,
|
|
43
|
+
height: (imageMetadata === null || imageMetadata === void 0 ? void 0 : imageMetadata.height) ? imageMetadata === null || imageMetadata === void 0 ? void 0 : imageMetadata.height : DEFAULT_HEIGHT,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
Flourish.typedef = `
|
|
48
|
+
type FlourishFallback {
|
|
49
|
+
url: String
|
|
50
|
+
width: Int
|
|
51
|
+
height: Int
|
|
52
|
+
}
|
|
53
|
+
`;
|
|
54
|
+
//# sourceMappingURL=Flourish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Flourish.js","sourceRoot":"","sources":["../../../src/tags/model/Flourish.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,+BAA+B,CAAA;AAG3D,MAAM,OAAO,QAAQ;IACnB,YAAoB,IAAkB,EAAU,EAAU;QAAtC,SAAI,GAAJ,IAAI,CAAc;QAAU,OAAE,GAAF,EAAE,CAAQ;IAAG,CAAC;IAE9D,IAAI;;QACF,sDAAsD;QACtD,OAAO,OAAO,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,UAAU,0CAAE,gBAAgB,CAAA,KAAK,QAAQ;YAC/D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB;YACvC,CAAC,CAAC,cAAc,CAAA;IACpB,CAAC;IAED,WAAW;;QACT,OAAO,OAAO,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAA,KAAK,QAAQ;YAC1D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;YAClC,CAAC,CAAC,EAAE,CAAA;IACR,CAAC;IAED,QAAQ;;QACN,OAAO,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,UAAU,0CAAE,eAAe,MAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAqB;;QACvC,4FAA4F;QAC5F,MAAM,aAAa,GAAG,IAAI,CAAA;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAA;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QACxB,MAAM,SAAS,GACb,OAAO,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,UAAU,0CAAE,aAAa,CAAA,KAAK,QAAQ;YACrD,CAAC,CAAC,MAAA,IAAI,CAAC,IAAI,CAAC,UAAU,0CAAE,aAAa;YACrC,CAAC,CAAC,KAAK,CAAA;QAEX,MAAM,WAAW,GAAG,kCAAkC,IAAI,IAAI,IAAI,CAAC,EAAE,aAAa,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAChI,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CACtE,WAAW,CACZ,CAAA;QAED,MAAM,sBAAsB,GAAG,eAAe,CAAC;YAC7C,GAAG,EAAE,WAAW;YAChB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,KAAI,aAAa;SAC7C,CAAC,CAAA;QAEF,OAAO;YACL,GAAG,EAAE,sBAAsB;YAC3B,KAAK,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,EAAC,CAAC,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,CAAC,CAAC,CAAC,aAAa;YAClE,MAAM,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,EAAC,CAAC,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,CAAC,CAAC,CAAC,cAAc;SACvE,CAAA;IACH,CAAC;;AAEM,gBAAO,GAAG;;;;;;KAMd,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { h as hastscript } from 'hastscript';
|
|
2
|
+
import { jest } from '@jest/globals';
|
|
3
|
+
import { Flourish as FlourishModel } from './Flourish.js';
|
|
4
|
+
function createNode(tagname, properties) {
|
|
5
|
+
return hastscript(tagname, properties);
|
|
6
|
+
}
|
|
7
|
+
describe('Flourish Model', () => {
|
|
8
|
+
const origamiGetImageMetadataMock = jest.fn();
|
|
9
|
+
const context = {
|
|
10
|
+
systemCode: 'example-system',
|
|
11
|
+
dataSources: {
|
|
12
|
+
origami: {
|
|
13
|
+
getImageMetadata: origamiGetImageMetadataMock,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
jest.resetAllMocks();
|
|
19
|
+
});
|
|
20
|
+
describe('.type()', () => {
|
|
21
|
+
describe('the flourish type exists', () => {
|
|
22
|
+
it('returns the type', () => {
|
|
23
|
+
const node = createNode('ft-content', {
|
|
24
|
+
dataAssetType: 'flourish',
|
|
25
|
+
id: 'example-id',
|
|
26
|
+
dataFlourishType: 'example-type',
|
|
27
|
+
dataLayoutWidth: 'full-grid',
|
|
28
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
29
|
+
alt: 'Example alt',
|
|
30
|
+
description: 'Example description',
|
|
31
|
+
});
|
|
32
|
+
const model = new FlourishModel(node, 'example-id');
|
|
33
|
+
expect(model.type()).toBe('example-type');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('the flourish type is missing', () => {
|
|
37
|
+
it('returns the backwards compatible fallback', () => {
|
|
38
|
+
const node = createNode('ft-content', {
|
|
39
|
+
dataAssetType: 'flourish',
|
|
40
|
+
id: 'example-id',
|
|
41
|
+
dataLayoutWidth: 'full-grid',
|
|
42
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
43
|
+
alt: 'Example alt',
|
|
44
|
+
description: 'Example description',
|
|
45
|
+
});
|
|
46
|
+
const model = new FlourishModel(node, 'example-id');
|
|
47
|
+
expect(model.type()).toBe('visulisation');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe('.fullGrid()', () => {
|
|
52
|
+
it('returns true when the graphic is full grid', () => {
|
|
53
|
+
const node = createNode('ft-content', {
|
|
54
|
+
dataAssetType: 'flourish',
|
|
55
|
+
id: 'example-id',
|
|
56
|
+
dataFlourishType: 'example-type',
|
|
57
|
+
dataLayoutWidth: 'full-grid',
|
|
58
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
59
|
+
alt: 'Example alt',
|
|
60
|
+
description: 'Example description',
|
|
61
|
+
});
|
|
62
|
+
const model = new FlourishModel(node, 'example-id');
|
|
63
|
+
expect(model.fullGrid()).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
it('returns false when the graphic is NOT full grid', () => {
|
|
66
|
+
const node = createNode('ft-content', {
|
|
67
|
+
dataAssetType: 'flourish',
|
|
68
|
+
id: 'example-id',
|
|
69
|
+
dataFlourishType: 'example-type',
|
|
70
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
71
|
+
alt: 'Example alt',
|
|
72
|
+
description: 'Example description',
|
|
73
|
+
});
|
|
74
|
+
const model = new FlourishModel(node, 'example-id');
|
|
75
|
+
expect(model.fullGrid()).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('.description()', () => {
|
|
79
|
+
it('returns the description when one is provided', () => {
|
|
80
|
+
const node = createNode('ft-content', {
|
|
81
|
+
dataAssetType: 'flourish',
|
|
82
|
+
id: 'example-id',
|
|
83
|
+
dataFlourishType: 'example-type',
|
|
84
|
+
dataLayoutWidth: 'full-grid',
|
|
85
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
86
|
+
alt: 'Example alt',
|
|
87
|
+
description: 'Example description',
|
|
88
|
+
});
|
|
89
|
+
const model = new FlourishModel(node, 'example-id');
|
|
90
|
+
expect(model.description()).toBe('Example description');
|
|
91
|
+
});
|
|
92
|
+
it('returns empty string when no description is provided', () => {
|
|
93
|
+
const node = createNode('ft-content', {
|
|
94
|
+
dataAssetType: 'flourish',
|
|
95
|
+
id: 'example-id',
|
|
96
|
+
dataFlourishType: 'example-type',
|
|
97
|
+
dataLayoutWidth: 'full-grid',
|
|
98
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
99
|
+
alt: 'Example alt',
|
|
100
|
+
});
|
|
101
|
+
const model = new FlourishModel(node, 'example-id');
|
|
102
|
+
expect(model.description()).toBe('');
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe('.fallbackImage()', () => {
|
|
106
|
+
describe('url', () => {
|
|
107
|
+
it('The Flourish base image url is used', async () => {
|
|
108
|
+
const node = createNode('ft-content', {
|
|
109
|
+
dataAssetType: 'flourish',
|
|
110
|
+
id: 'example-id',
|
|
111
|
+
dataFlourishType: 'example-type',
|
|
112
|
+
dataLayoutWidth: 'full-grid',
|
|
113
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
114
|
+
alt: 'Example alt',
|
|
115
|
+
description: 'Example description',
|
|
116
|
+
});
|
|
117
|
+
const model = new FlourishModel(node, 'example-id');
|
|
118
|
+
const fallbackResponse = await model.fallbackImage(context);
|
|
119
|
+
// Regex checks for flourish url whilst leaving spaces for arguments
|
|
120
|
+
// https://public.flourish.studio/{type}/{id}/thumbnail
|
|
121
|
+
const flourishImageUrlRegex = new RegExp(/https:\/\/public.flourish.studio\/.*\/.*\/thumbnail/);
|
|
122
|
+
expect(decodeURIComponent(fallbackResponse.url)).toMatch(flourishImageUrlRegex);
|
|
123
|
+
});
|
|
124
|
+
it('The Flourish id is included in the flourish image url', async () => {
|
|
125
|
+
const node = createNode('ft-content', {
|
|
126
|
+
dataAssetType: 'flourish',
|
|
127
|
+
id: 'example-id',
|
|
128
|
+
dataFlourishType: 'example-type',
|
|
129
|
+
dataLayoutWidth: 'full-grid',
|
|
130
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
131
|
+
alt: 'Example alt',
|
|
132
|
+
description: 'Example description',
|
|
133
|
+
});
|
|
134
|
+
const model = new FlourishModel(node, 'example-id');
|
|
135
|
+
const fallbackResponse = await model.fallbackImage(context);
|
|
136
|
+
const flourishImageUrlRegex = new RegExp(/https:\/\/public.flourish.studio\/.*\/example-id/);
|
|
137
|
+
expect(decodeURIComponent(fallbackResponse.url)).toMatch(flourishImageUrlRegex);
|
|
138
|
+
});
|
|
139
|
+
describe('the flourish type exists', () => {
|
|
140
|
+
it('The Flourish graphic type is included in the flourish image url', async () => {
|
|
141
|
+
const node = createNode('ft-content', {
|
|
142
|
+
dataAssetType: 'flourish',
|
|
143
|
+
id: 'example-id',
|
|
144
|
+
dataFlourishType: 'example-type',
|
|
145
|
+
dataLayoutWidth: 'full-grid',
|
|
146
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
147
|
+
alt: 'Example alt',
|
|
148
|
+
description: 'Example description',
|
|
149
|
+
});
|
|
150
|
+
const model = new FlourishModel(node, 'example-id');
|
|
151
|
+
const fallbackResponse = await model.fallbackImage(context);
|
|
152
|
+
const flourishImageUrl = 'https://public.flourish.studio/example-type';
|
|
153
|
+
expect(fallbackResponse.url).toContain(encodeURIComponent(flourishImageUrl));
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
describe('the flourish type is missing', () => {
|
|
157
|
+
it('The Flourish graphic type fallback is included in the flourish image url', async () => {
|
|
158
|
+
const node = createNode('ft-content', {
|
|
159
|
+
dataAssetType: 'flourish',
|
|
160
|
+
id: 'example-id',
|
|
161
|
+
dataLayoutWidth: 'full-grid',
|
|
162
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
163
|
+
alt: 'Example alt',
|
|
164
|
+
description: 'Example description',
|
|
165
|
+
});
|
|
166
|
+
const model = new FlourishModel(node, 'example-id');
|
|
167
|
+
const fallbackResponse = await model.fallbackImage(context);
|
|
168
|
+
const flourishImageUrl = 'https://public.flourish.studio/visulisation';
|
|
169
|
+
expect(fallbackResponse.url).toContain(encodeURIComponent(flourishImageUrl));
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe('the flourish timestamp exists', () => {
|
|
173
|
+
it('The Flourish cache buster is appended to the flourish image url', async () => {
|
|
174
|
+
const node = createNode('ft-content', {
|
|
175
|
+
dataAssetType: 'flourish',
|
|
176
|
+
id: 'example-id',
|
|
177
|
+
dataFlourishType: 'example-type',
|
|
178
|
+
dataLayoutWidth: 'full-grid',
|
|
179
|
+
dataTimeStamp: '2022-01-06T14:41:01.102Z',
|
|
180
|
+
alt: 'Example alt',
|
|
181
|
+
description: 'Example description',
|
|
182
|
+
});
|
|
183
|
+
const model = new FlourishModel(node, 'example-id');
|
|
184
|
+
const fallbackResponse = await model.fallbackImage(context);
|
|
185
|
+
const flourishImageCacheBuster = '?cacheBuster=2022-01-06T14:41:01.102Z';
|
|
186
|
+
expect(fallbackResponse.url).toContain(encodeURIComponent(flourishImageCacheBuster));
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('the flourish timestamp is missing', () => {
|
|
190
|
+
it('The Flourish cache buster is not appended to the flourish image url', async () => {
|
|
191
|
+
const node = createNode('ft-content', {
|
|
192
|
+
dataAssetType: 'flourish',
|
|
193
|
+
id: 'example-id',
|
|
194
|
+
dataFlourishType: 'example-type',
|
|
195
|
+
dataLayoutWidth: 'full-grid',
|
|
196
|
+
alt: 'Example alt',
|
|
197
|
+
description: 'Example description',
|
|
198
|
+
});
|
|
199
|
+
const model = new FlourishModel(node, 'example-id');
|
|
200
|
+
const fallbackResponse = await model.fallbackImage(context);
|
|
201
|
+
const flourishImageCacheBuster = '?cacheBuster=';
|
|
202
|
+
expect(fallbackResponse.url).not.toContain(encodeURIComponent(flourishImageCacheBuster));
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
//# sourceMappingURL=Flourish.test.js.map
|