@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 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.contains(),
86
+ liveBlogPosts: (parent) => parent.liveBlogPosts(),
87
87
  realtime: (parent) => parent.realtime(),
88
88
  },
89
89
  };
@@ -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,QAAQ,EAAE;QAC1D,QAAQ,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;KACtD;CACF,CAAA"}
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;AAG/B,MAAM,OAAO,0BAA2B,SAAQ,cAA4B;IAG1E,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;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"}
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;AAGxB,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;CAOvB,CAAA;AAQD,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"}
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>[] | undefined;
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
- var _a;
171
- return (_a = this.capiData.contains) === null || _a === void 0 ? void 0 : _a.map(({ id }) => this.context.dataSources.capi.getContent(uuidFromUrl(id)));
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 context = {};
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;AAElC,MAAM,OAAO,GAAG,EAA6B,CAAA;AAC7C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,CAAA;YACzC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAEvD,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAA;QAC3E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,CAAA;YACzC,MAAM,eAAe,GAAG,SAAS,CAAC;gBAChC,GAAG,cAAc;gBACjB,IAAI,EAAE,oDAAoD;aAC3D,CAAC,CAAA;YACF,MAAM,mBAAmB,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC9D,MAAM,2BAA2B,GAAG,IAAI,YAAY,CAClD,eAAe,EACf,OAAO,CACR,CAAA;YAED,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YACrD,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACvE,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,OAAO,GAAG,SAAS,CAAC;gBACxB,GAAG,cAAc;gBACjB,IAAI,EAAE,4CAA4C;aACnD,CAAC,CAAA;YACF,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACvD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAC5C,qEAAqE,CACtE,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,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);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tags/index.ts"],"names":[],"mappings":"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"}
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