@financial-times/cp-content-pipeline-schema 0.3.0 → 0.3.1

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.
Files changed (60) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/datasources/capi.d.ts +3 -2
  3. package/lib/datasources/capi.js +3 -2
  4. package/lib/datasources/capi.js.map +1 -1
  5. package/lib/datasources/instrumented.d.ts +7 -0
  6. package/lib/datasources/instrumented.js +18 -0
  7. package/lib/datasources/instrumented.js.map +1 -0
  8. package/lib/datasources/origami-image.d.ts +2 -2
  9. package/lib/datasources/origami-image.js +2 -2
  10. package/lib/datasources/origami-image.js.map +1 -1
  11. package/lib/datasources/url-management.d.ts +3 -3
  12. package/lib/datasources/url-management.js +4 -5
  13. package/lib/datasources/url-management.js.map +1 -1
  14. package/lib/datasources/url-management.test.js +12 -5
  15. package/lib/datasources/url-management.test.js.map +1 -1
  16. package/lib/index.d.ts +2 -0
  17. package/lib/index.js +1 -1
  18. package/lib/index.js.map +1 -1
  19. package/lib/tags/ImageSet.d.ts +2 -0
  20. package/lib/tags/ImageSet.js +24 -0
  21. package/lib/tags/ImageSet.js.map +1 -0
  22. package/lib/tags/LayoutImage.d.ts +2 -0
  23. package/lib/tags/LayoutImage.js +42 -0
  24. package/lib/tags/LayoutImage.js.map +1 -0
  25. package/lib/tags/Link.d.ts +2 -0
  26. package/lib/tags/Link.js +21 -0
  27. package/lib/tags/Link.js.map +1 -0
  28. package/lib/tags/PullQuote.d.ts +2 -0
  29. package/lib/tags/PullQuote.js +25 -0
  30. package/lib/tags/PullQuote.js.map +1 -0
  31. package/lib/tags/Recommended.d.ts +2 -0
  32. package/lib/tags/Recommended.js +39 -0
  33. package/lib/tags/Recommended.js.map +1 -0
  34. package/lib/{tags.d.ts → tags/index.d.ts} +3 -3
  35. package/lib/tags/index.js +33 -0
  36. package/lib/tags/index.js.map +1 -0
  37. package/lib/unified-plugins/extract-references.js +1 -1
  38. package/lib/unified-plugins/extract-references.js.map +1 -1
  39. package/lib/unified-plugins/map-to-abstract-types.js +3 -2
  40. package/lib/unified-plugins/map-to-abstract-types.js.map +1 -1
  41. package/package.json +3 -2
  42. package/src/datasources/capi.ts +4 -2
  43. package/src/datasources/instrumented.ts +39 -0
  44. package/src/datasources/origami-image.ts +2 -2
  45. package/src/datasources/url-management.test.ts +14 -5
  46. package/src/datasources/url-management.ts +7 -10
  47. package/src/index.ts +3 -1
  48. package/src/tags/ImageSet.ts +35 -0
  49. package/src/tags/LayoutImage.ts +51 -0
  50. package/src/tags/Link.ts +23 -0
  51. package/src/tags/PullQuote.ts +32 -0
  52. package/src/tags/Recommended.ts +49 -0
  53. package/src/tags/index.ts +65 -0
  54. package/src/unified-plugins/extract-references.ts +1 -1
  55. package/src/unified-plugins/map-to-abstract-types.ts +5 -2
  56. package/tsconfig.tsbuildinfo +1 -1
  57. package/lib/tags.js +0 -202
  58. package/lib/tags.js.map +0 -1
  59. package/src/tags.ts +0 -274
  60. package/src/types/next-metrics.d.ts +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.3.0...cp-content-pipeline-schema-v0.3.1) (2022-10-11)
4
+
5
+
6
+ ### Features
7
+
8
+ * instrument REST datasources ([ce509a2](https://github.com/Financial-Times/cp-content-pipeline/commit/ce509a2f4bc91e6e9593ef21f7341a5e504727b4))
9
+ * split restdatasource metrics by response status ([3c2356c](https://github.com/Financial-Times/cp-content-pipeline/commit/3c2356c12001bb6af30c5820111d21a6c7766588))
10
+
3
11
  ## [0.3.0](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.2.1...cp-content-pipeline-schema-v0.3.0) (2022-10-11)
4
12
 
5
13
 
@@ -1,7 +1,8 @@
1
- import { RESTDataSource, RequestOptions } from 'apollo-datasource-rest';
1
+ import { RequestOptions } from 'apollo-datasource-rest';
2
2
  import { CapiResponse } from '../model/CapiResponse.js';
3
+ import { InstrumentedRESTDataSource } from './instrumented.js';
3
4
  import { CapiPerson } from '../types/internal-content.js';
4
- export declare class CapiDataSource extends RESTDataSource {
5
+ export declare class CapiDataSource extends InstrumentedRESTDataSource {
5
6
  baseURL: string;
6
7
  capiKey: string;
7
8
  articleCacheTTL: number;
@@ -1,6 +1,6 @@
1
- import { RESTDataSource } from 'apollo-datasource-rest';
2
1
  import { CapiResponse } from '../model/CapiResponse.js';
3
- export class CapiDataSource extends RESTDataSource {
2
+ import { InstrumentedRESTDataSource } from './instrumented.js';
3
+ export class CapiDataSource extends InstrumentedRESTDataSource {
4
4
  constructor() {
5
5
  super(...arguments);
6
6
  this.baseURL = process.env.CAPI_URL || 'https://api-t.ft.com/';
@@ -13,6 +13,7 @@ export class CapiDataSource extends RESTDataSource {
13
13
  : 600; // 10 minutes
14
14
  }
15
15
  willSendRequest(request) {
16
+ super.willSendRequest(request);
16
17
  request.headers.set('x-api-key', this.capiKey);
17
18
  }
18
19
  async getContent(uuid) {
@@ -1 +1 @@
1
- {"version":3,"file":"capi.js","sourceRoot":"","sources":["../../src/datasources/capi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,MAAM,OAAO,cAAe,SAAQ,cAAc;IAAlD;;QACE,YAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,uBAAuB,CAAA;QACzD,YAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAA;QACxC,oBAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC7C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACzC,CAAC,CAAC,EAAE,CAAA,CAAC,aAAa;QACpB,mBAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB;YAC3C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACxC,CAAC,CAAC,GAAG,CAAA,CAAC,aAAa;IAiBvB,CAAC;IAfC,eAAe,CAAC,OAAuB;QACrC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,EAAE,SAAS,EAAE;YACpD,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE;SAC5C,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,SAAS,EAAE;YAC3C,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE;SAC3C,CAAC,CAAA;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"capi.js","sourceRoot":"","sources":["../../src/datasources/capi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAG9D,MAAM,OAAO,cAAe,SAAQ,0BAA0B;IAA9D;;QACE,YAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,uBAAuB,CAAA;QACzD,YAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAA;QACxC,oBAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC7C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACzC,CAAC,CAAC,EAAE,CAAA,CAAC,aAAa;QACpB,mBAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB;YAC3C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACxC,CAAC,CAAC,GAAG,CAAA,CAAC,aAAa;IAkBvB,CAAC;IAhBC,eAAe,CAAC,OAAuB;QACrC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAC9B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,EAAE,SAAS,EAAE;YACpD,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE;SAC5C,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,SAAS,EAAE;YAC3C,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE;SAC3C,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { Request, RequestOptions, Response, RESTDataSource } from 'apollo-datasource-rest';
2
+ import { QueryContext } from '../index.js';
3
+ export declare class InstrumentedRESTDataSource extends RESTDataSource<QueryContext> {
4
+ startTime?: bigint;
5
+ willSendRequest(request: RequestOptions): void;
6
+ didReceiveResponse<TResult>(response: Response, request: Request): Promise<TResult>;
7
+ }
@@ -0,0 +1,18 @@
1
+ import { RESTDataSource, } from 'apollo-datasource-rest';
2
+ export class InstrumentedRESTDataSource extends RESTDataSource {
3
+ willSendRequest(request) {
4
+ var _a;
5
+ this.startTime = process.hrtime.bigint();
6
+ (_a = this.context.metrics) === null || _a === void 0 ? void 0 : _a.count(`graphql.datasource.${this.constructor.name}.request.count`, 1);
7
+ }
8
+ async didReceiveResponse(response, request) {
9
+ var _a, _b;
10
+ // this.startTime will definitely have been set by willSendRequest, but no way of encoding that in types
11
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
12
+ const duration = (process.hrtime.bigint() - this.startTime) / BigInt(1e6);
13
+ (_a = this.context.metrics) === null || _a === void 0 ? void 0 : _a.count(`graphql.datasource.${this.constructor.name}.response.${response.status}.count`, 1);
14
+ (_b = this.context.metrics) === null || _b === void 0 ? void 0 : _b.count(`graphql.datasource.${this.constructor.name}.response.${response.status}.time`, Number(duration));
15
+ return super.didReceiveResponse(response, request);
16
+ }
17
+ }
18
+ //# sourceMappingURL=instrumented.js.map
@@ -0,0 +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,5 +1,5 @@
1
- import { RESTDataSource } from 'apollo-datasource-rest';
2
- export declare class OrigamiImageDataSource extends RESTDataSource {
1
+ import { InstrumentedRESTDataSource } from './instrumented.js';
2
+ export declare class OrigamiImageDataSource extends InstrumentedRESTDataSource {
3
3
  baseURL: string;
4
4
  getImageMetadata(url: string): Promise<{
5
5
  width: number;
@@ -1,5 +1,5 @@
1
- import { RESTDataSource } from 'apollo-datasource-rest';
2
- export class OrigamiImageDataSource extends RESTDataSource {
1
+ import { InstrumentedRESTDataSource } from './instrumented.js';
2
+ export class OrigamiImageDataSource extends InstrumentedRESTDataSource {
3
3
  constructor() {
4
4
  super(...arguments);
5
5
  this.baseURL = 'https://www.ft.com/__origami/service/image/v2';
@@ -1 +1 @@
1
- {"version":3,"file":"origami-image.js","sourceRoot":"","sources":["../../src/datasources/origami-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IAA1D;;QACE,YAAO,GAAG,+CAA+C,CAAA;IAM3D,CAAC;IALC,KAAK,CAAC,gBAAgB,CACpB,GAAW;QAEX,OAAO,IAAI,CAAC,GAAG,CAAC,oBAAoB,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5E,CAAC;CACF"}
1
+ {"version":3,"file":"origami-image.js","sourceRoot":"","sources":["../../src/datasources/origami-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAE9D,MAAM,OAAO,sBAAuB,SAAQ,0BAA0B;IAAtE;;QACE,YAAO,GAAG,+CAA+C,CAAA;IAM3D,CAAC;IALC,KAAK,CAAC,gBAAgB,CACpB,GAAW;QAEX,OAAO,IAAI,CAAC,GAAG,CAAC,oBAAoB,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5E,CAAC;CACF"}
@@ -1,11 +1,11 @@
1
1
  import { DataSource, DataSourceConfig } from 'apollo-datasource';
2
2
  import { KeyValueCache } from 'apollo-server-caching';
3
+ import { QueryContext } from '../index.js';
3
4
  export declare class URLManagementDataSource extends DataSource {
4
- context: unknown;
5
+ context: QueryContext;
5
6
  cache: KeyValueCache;
6
7
  memoizedResults: Map<string, Promise<string>>;
7
8
  static clientInitialised: boolean;
8
- constructor();
9
- initialize({ context, cache, }: DataSourceConfig<unknown>): void;
9
+ initialize({ context, cache, }: DataSourceConfig<QueryContext>): void;
10
10
  get(fromURL: string, ttl?: number): Promise<string>;
11
11
  }
@@ -1,19 +1,18 @@
1
1
  import { DataSource } from 'apollo-datasource';
2
2
  import { InMemoryLRUCache, PrefixingKeyValueCache, } from 'apollo-server-caching';
3
3
  import * as nUrlManagementApiReadClient from '@financial-times/n-url-management-api-read-client';
4
- import metrics from 'next-metrics';
5
4
  const CACHE_PREFIX = 'nurlmgmtapi';
6
5
  const DEFAULT_TTL_IN_SECONDS = 60 * 60; // one hour
7
6
  export class URLManagementDataSource extends DataSource {
8
7
  constructor() {
9
- super();
8
+ super(...arguments);
10
9
  this.memoizedResults = new Map();
10
+ }
11
+ initialize({ context, cache = new InMemoryLRUCache(), }) {
11
12
  if (!URLManagementDataSource.clientInitialised) {
12
- nUrlManagementApiReadClient.init({ metrics });
13
+ nUrlManagementApiReadClient.init({ metrics: context.metrics });
13
14
  URLManagementDataSource.clientInitialised = true;
14
15
  }
15
- }
16
- initialize({ context, cache = new InMemoryLRUCache(), }) {
17
16
  this.context = context;
18
17
  this.cache = new PrefixingKeyValueCache(cache, CACHE_PREFIX);
19
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"url-management.js","sourceRoot":"","sources":["../../src/datasources/url-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAEL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,2BAA2B,MAAM,mDAAmD,CAAA;AAEhG,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,MAAM,YAAY,GAAG,aAAa,CAAA;AAClC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,CAAA,CAAC,WAAW;AAElD,MAAM,OAAO,uBAAwB,SAAQ,UAAU;IAMrD;QACE,KAAK,EAAE,CAAA;QAJT,oBAAe,GAAG,IAAI,GAAG,EAA2B,CAAA;QAMlD,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE;YAC9C,2BAA2B,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YAC7C,uBAAuB,CAAC,iBAAiB,GAAG,IAAI,CAAA;SACjD;IACH,CAAC;IAEQ,UAAU,CAAC,EAClB,OAAO,EACP,KAAK,GAAG,IAAI,gBAAgB,EAAE,GACJ;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,GAAG,CACP,OAAe,EACf,MAAc,sBAAsB;QAEpC,MAAM,SAAS,GAAG,KAAK,IAAqB,EAAE;YAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC/C,IAAI,SAAS,EAAE;gBACb,OAAO,SAAS,CAAA;aACjB;YAED,MAAM,YAAY,GAChB,MAAM,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAChD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;YAC1D,OAAO,YAAY,CAAC,KAAK,CAAA;QAC3B,CAAC,CAAA;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAE/C,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAA;SACf;QAED,OAAO,GAAG,SAAS,EAAE,CAAA;QACrB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAE1C,OAAO,OAAO,CAAA;IAChB,CAAC;;AA5CM,yCAAiB,GAAG,KAAK,CAAA"}
1
+ {"version":3,"file":"url-management.js","sourceRoot":"","sources":["../../src/datasources/url-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAEL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,2BAA2B,MAAM,mDAAmD,CAAA;AAIhG,MAAM,YAAY,GAAG,aAAa,CAAA;AAClC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,CAAA,CAAC,WAAW;AAElD,MAAM,OAAO,uBAAwB,SAAQ,UAAU;IAAvD;;QAGE,oBAAe,GAAG,IAAI,GAAG,EAA2B,CAAA;IA4CtD,CAAC;IAxCU,UAAU,CAAC,EAClB,OAAO,EACP,KAAK,GAAG,IAAI,gBAAgB,EAAE,GACC;QAC/B,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE;YAC9C,2BAA2B,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YAC9D,uBAAuB,CAAC,iBAAiB,GAAG,IAAI,CAAA;SACjD;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,GAAG,CACP,OAAe,EACf,MAAc,sBAAsB;QAEpC,MAAM,SAAS,GAAG,KAAK,IAAqB,EAAE;YAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC/C,IAAI,SAAS,EAAE;gBACb,OAAO,SAAS,CAAA;aACjB;YAED,MAAM,YAAY,GAChB,MAAM,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAChD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;YAC1D,OAAO,YAAY,CAAC,KAAK,CAAA;QAC3B,CAAC,CAAA;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAE/C,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAA;SACf;QAED,OAAO,GAAG,SAAS,EAAE,CAAA;QACrB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAE1C,OAAO,OAAO,CAAA;IAChB,CAAC;;AAzCM,yCAAiB,GAAG,KAAK,CAAA"}
@@ -10,14 +10,21 @@ const nUrlManagementApiReadClient = await import('@financial-times/n-url-managem
10
10
  import { InMemoryLRUCache } from 'apollo-server-caching';
11
11
  import { jest } from '@jest/globals';
12
12
  const getMock = nUrlManagementApiReadClient.get;
13
+ const context = {};
13
14
  describe('URL management data source', () => {
14
15
  beforeEach(() => {
15
16
  jest.resetAllMocks();
16
17
  });
17
18
  it('only initialises the client library once', async () => {
18
- new URLManagementDataSource();
19
+ new URLManagementDataSource().initialize({
20
+ context,
21
+ cache: new InMemoryLRUCache(),
22
+ });
19
23
  expect(nUrlManagementApiReadClient.init).toHaveBeenCalledTimes(1);
20
- new URLManagementDataSource();
24
+ new URLManagementDataSource().initialize({
25
+ context,
26
+ cache: new InMemoryLRUCache(),
27
+ });
21
28
  expect(nUrlManagementApiReadClient.init).toHaveBeenCalledTimes(1);
22
29
  });
23
30
  it('gets a vanity URL from the dynamodb database', async () => {
@@ -25,7 +32,7 @@ describe('URL management data source', () => {
25
32
  toURL: 'vanity.url',
26
33
  });
27
34
  const dataSource = new URLManagementDataSource();
28
- dataSource.initialize({ context: null, cache: new InMemoryLRUCache() });
35
+ dataSource.initialize({ context, cache: new InMemoryLRUCache() });
29
36
  const vanity = await dataSource.get('original.url');
30
37
  expect(vanity).toEqual('vanity.url');
31
38
  expect(nUrlManagementApiReadClient.get).toHaveBeenCalled();
@@ -34,7 +41,7 @@ describe('URL management data source', () => {
34
41
  getMock.mockImplementation((fromUrl) => Promise.resolve({ toURL: `${fromUrl}.vanity` }));
35
42
  const dataSource = new URLManagementDataSource();
36
43
  const cache = new InMemoryLRUCache();
37
- dataSource.initialize({ context: null, cache });
44
+ dataSource.initialize({ context, cache });
38
45
  const firstRequest = await dataSource.get('original.url');
39
46
  expect(firstRequest).toEqual('original.url.vanity');
40
47
  expect(await cache.getTotalSize()).toEqual(19); // string length of original.url.vanity
@@ -51,7 +58,7 @@ describe('URL management data source', () => {
51
58
  getMock.mockImplementation((fromUrl) => Promise.resolve({ toURL: `${fromUrl}.vanity` }));
52
59
  const dataSource = new URLManagementDataSource();
53
60
  const cache = new InMemoryLRUCache();
54
- dataSource.initialize({ context: null, cache });
61
+ dataSource.initialize({ context, cache });
55
62
  const firstRequest = dataSource.get('original.url');
56
63
  const secondRequest = dataSource.get('original.url');
57
64
  const differentRequest = dataSource.get('different.url');
@@ -1 +1 @@
1
- {"version":3,"file":"url-management.test.js","sourceRoot":"","sources":["../../src/datasources/url-management.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url-management.test.js","sourceRoot":"","sources":["../../src/datasources/url-management.test.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import type { IResolvers } from '@graphql-tools/utils';
2
2
  import { DocumentNode } from 'graphql';
3
3
  import { dataSources, DataSources } from './datasources/index.js';
4
+ import type { Metrics } from 'next-metrics';
4
5
  export declare type QueryContext = {
6
+ metrics: Metrics;
5
7
  dataSources: DataSources;
6
8
  systemCode: string;
7
9
  };
package/lib/index.js CHANGED
@@ -7,7 +7,7 @@ import { typeDef as Image, resolvers as imageResolvers } from './image.js';
7
7
  import { typeDef as Topper, resolvers as topperResolvers } from './topper.js';
8
8
  import { typeDef as RichText, resolvers as richTextResolvers, } from './richText.js';
9
9
  import { typeDef as Recommended, resolvers as recommendedResolvers, } from './teaser.js';
10
- import tags from './tags.js';
10
+ import tags from './tags/index.js';
11
11
  const tagEntries = Object.entries(tags);
12
12
  const tagsWithReferences = tagEntries.filter(([_key, tag]) => tag.typeDef);
13
13
  const tagTypeDefs = tagsWithReferences.flatMap(([_key, tag]) => tag.typeDef);
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,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,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACvC,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC1E,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAC5C,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAuB,CAC7C,CAAA;AACD,MAAM,SAAS,GAAG,GAAG,CAAA,qBAAqB,kBAAkB;KACzD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;KACvB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;AAEhB,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC9E,CAAA;AAED,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;CAOvB,CAAA;AAOD,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,WAAW;IACX,YAAY;CACb,CAAA;AAED,OAAO,EAAE,WAAW,EAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,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,IAAI,MAAM,iBAAiB,CAAA;AAGlC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACvC,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC1E,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAC5C,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAuB,CAC7C,CAAA;AACD,MAAM,SAAS,GAAG,GAAG,CAAA,qBAAqB,kBAAkB;KACzD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;KACvB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;AAEhB,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC9E,CAAA;AAED,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,WAAW;IACX,YAAY;CACb,CAAA;AAED,OAAO,EAAE,WAAW,EAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { TagConstructor } from './index.js';
2
+ export declare const ImageSet: TagConstructor;
@@ -0,0 +1,24 @@
1
+ var _a;
2
+ import { gql } from 'graphql-tag';
3
+ import { uuidFromUrl } from '../helpers/metadata.js';
4
+ export const ImageSet = (_a = class ImageSet {
5
+ constructor(node, contentApiData) {
6
+ var _a, _b, _c;
7
+ this.url = '';
8
+ if (typeof ((_a = node === null || node === void 0 ? void 0 : node.properties) === null || _a === void 0 ? void 0 : _a.url) === 'string') {
9
+ this.url = (_b = node.properties.url) !== null && _b !== void 0 ? _b : '';
10
+ }
11
+ this.imageSet = (_c = contentApiData === null || contentApiData === void 0 ? void 0 : contentApiData.embeds()) === null || _c === void 0 ? void 0 : _c.find((embed) => uuidFromUrl(embed.id) === uuidFromUrl(this.url));
12
+ }
13
+ },
14
+ _a.selector = 'ft-content[type="http://www.ft.com/ontology/content/ImageSet"]',
15
+ _a.resolve = {
16
+ picture: (parent) => parent.imageSet,
17
+ },
18
+ _a.typeDef = gql `
19
+ type ImageSet {
20
+ picture: Picture!
21
+ }
22
+ `,
23
+ _a);
24
+ //# sourceMappingURL=ImageSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageSet.js","sourceRoot":"","sources":["../../src/tags/ImageSet.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAMpD,MAAM,CAAC,MAAM,QAAQ,SAAmB,MAAM,QAAQ;QAMpD,YAAY,IAAkB,EAAE,cAA6B;;YAF7D,QAAG,GAAG,EAAE,CAAA;YAGN,IAAI,OAAO,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,0CAAE,GAAG,CAAA,KAAK,QAAQ,EAAE;gBAC7C,IAAI,CAAC,GAAG,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,GAAG,mCAAI,EAAE,CAAA;aACrC;YAED,IAAI,CAAC,QAAQ,GAAG,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAC1B,MAAM,EAAE,0CACR,IAAI,CACJ,CAAC,KAAmB,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CACzE,CAAA;QACL,CAAC;KAWF;IA1BQ,WAAQ,GACb,gEAAgE;IAgB3D,UAAO,GAAG;QACf,OAAO,EAAE,CAAC,MAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ;KAC/C;IAEM,UAAO,GAAG,GAAG,CAAA;;;;GAInB;OACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { TagConstructor } from './index.js';
2
+ export declare const LayoutImage: TagConstructor;
@@ -0,0 +1,42 @@
1
+ var _a;
2
+ import { gql } from 'graphql-tag';
3
+ import { uuidFromUrl } from '../helpers/metadata.js';
4
+ export const LayoutImage = (_a = class LayoutImage {
5
+ constructor(node) {
6
+ var _a, _b, _c, _d;
7
+ this.src = (_a = node.properties) === null || _a === void 0 ? void 0 : _a.src;
8
+ this.id = uuidFromUrl(this.src) || '';
9
+ this.alt = (_b = node.properties) === null || _b === void 0 ? void 0 : _b.alt;
10
+ this.longDesc = (_c = node.properties) === null || _c === void 0 ? void 0 : _c.longDesc;
11
+ this.copyright = (_d = node.properties) === null || _d === void 0 ? void 0 : _d.dataCopyright;
12
+ }
13
+ },
14
+ _a.selector = 'img',
15
+ _a.resolve = {
16
+ picture(parent) {
17
+ return {
18
+ id: 'layout-imageset',
19
+ description: parent.alt,
20
+ type: 'http://www.ft.com/ontology/content/ImageSet',
21
+ members: [
22
+ {
23
+ id: parent.id,
24
+ description: parent.alt,
25
+ title: parent.longDesc,
26
+ binaryUrl: parent.src,
27
+ copyright: {
28
+ notice: parent.copyright,
29
+ },
30
+ type: 'http://www.ft.com/ontology/content/Image',
31
+ },
32
+ ],
33
+ };
34
+ },
35
+ },
36
+ _a.typeDef = gql `
37
+ type LayoutImage {
38
+ picture: Picture!
39
+ }
40
+ `,
41
+ _a);
42
+ //# sourceMappingURL=LayoutImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutImage.js","sourceRoot":"","sources":["../../src/tags/LayoutImage.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAKpD,MAAM,CAAC,MAAM,WAAW,SAAmB,MAAM,WAAW;QAS1D,YAAY,IAAkB;;YAC5B,IAAI,CAAC,GAAG,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,GAAa,CAAA;YACzC,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;YACrC,IAAI,CAAC,GAAG,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,GAAa,CAAA;YACzC,IAAI,CAAC,QAAQ,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,QAAkB,CAAA;YACnD,IAAI,CAAC,SAAS,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAuB,CAAA;QAC3D,CAAC;KA6BF;IA3CQ,WAAQ,GAAG,KAAK;IAgBhB,UAAO,GAAG;QACf,OAAO,CAAC,MAAmB;YACzB,OAAO;gBACL,EAAE,EAAE,iBAAiB;gBACrB,WAAW,EAAE,MAAM,CAAC,GAAG;gBACvB,IAAI,EAAE,6CAA6C;gBACnD,OAAO,EAAE;oBACP;wBACE,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,WAAW,EAAE,MAAM,CAAC,GAAG;wBACvB,KAAK,EAAE,MAAM,CAAC,QAAQ;wBACtB,SAAS,EAAE,MAAM,CAAC,GAAG;wBACrB,SAAS,EAAE;4BACT,MAAM,EAAE,MAAM,CAAC,SAAS;yBACzB;wBACD,IAAI,EAAE,0CAA0C;qBACjD;iBACF;aACF,CAAA;QACH,CAAC;KACF;IAEM,UAAO,GAAG,GAAG,CAAA;;;;GAInB;OACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { TagConstructor } from './index.js';
2
+ export declare const Link: TagConstructor;
@@ -0,0 +1,21 @@
1
+ var _a;
2
+ import { gql } from 'graphql-tag';
3
+ export const Link = (_a = class Link {
4
+ constructor(node) {
5
+ var _a, _b;
6
+ if (typeof ((_a = node === null || node === void 0 ? void 0 : node.properties) === null || _a === void 0 ? void 0 : _a.href) === 'string') {
7
+ this.href = (_b = node.properties.href) !== null && _b !== void 0 ? _b : '';
8
+ }
9
+ else {
10
+ this.href = '';
11
+ }
12
+ }
13
+ },
14
+ _a.selector = 'a',
15
+ _a.typeDef = gql `
16
+ type Link {
17
+ href: String
18
+ }
19
+ `,
20
+ _a);
21
+ //# sourceMappingURL=Link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.js","sourceRoot":"","sources":["../../src/tags/Link.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAIjC,MAAM,CAAC,MAAM,IAAI,SAAmB,MAAM,IAAI;QAK5C,YAAY,IAAkB;;YAC5B,IAAI,OAAO,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,0CAAE,IAAI,CAAA,KAAK,QAAQ,EAAE;gBAC9C,IAAI,CAAC,IAAI,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,IAAI,mCAAI,EAAE,CAAA;aACvC;iBAAM;gBACL,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;aACf;QACH,CAAC;KAOF;IAfQ,WAAQ,GAAG,GAAG;IAUd,UAAO,GAAG,GAAG,CAAA;;;;GAInB;OACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { TagConstructor } from './index.js';
2
+ export declare const PullQuote: TagConstructor;
@@ -0,0 +1,25 @@
1
+ var _a;
2
+ import { select } from 'hast-util-select';
3
+ import { toText } from 'hast-util-to-text';
4
+ import { gql } from 'graphql-tag';
5
+ export const PullQuote = (_a = class PullQuote {
6
+ constructor(node) {
7
+ const textNode = select('PullQuoteText', node);
8
+ const sourceNode = select('PullQuoteSource', node);
9
+ this.text = textNode && toText(textNode);
10
+ this.source = sourceNode && toText(sourceNode);
11
+ }
12
+ },
13
+ _a.selector = 'pull-quote',
14
+ _a.resolve = {
15
+ text: (parent) => parent.text,
16
+ source: (parent) => parent.source || null,
17
+ },
18
+ _a.typeDef = gql `
19
+ type PullQuote {
20
+ text: String
21
+ source: String
22
+ }
23
+ `,
24
+ _a);
25
+ //# sourceMappingURL=PullQuote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PullQuote.js","sourceRoot":"","sources":["../../src/tags/PullQuote.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAIjC,MAAM,CAAC,MAAM,SAAS,SAAmB,MAAM,SAAS;QAMtD,YAAY,IAAkB;YAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;YAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;YAElD,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;QAChD,CAAC;KAaF;IArBQ,WAAQ,GAAG,YAAY;IAUvB,UAAO,GAAG;QACf,IAAI,EAAE,CAAC,MAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI;QACxC,MAAM,EAAE,CAAC,MAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI;KACrD;IAEM,UAAO,GAAG,GAAG,CAAA;;;;;GAKnB;OACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { TagConstructor } from './index.js';
2
+ export declare const Recommended: TagConstructor;
@@ -0,0 +1,39 @@
1
+ var _a;
2
+ import { select } from 'hast-util-select';
3
+ import { toText } from 'hast-util-to-text';
4
+ import { gql } from 'graphql-tag';
5
+ import { uuidFromUrl } from '../helpers/metadata.js';
6
+ export const Recommended = (_a = class Recommended {
7
+ constructor(node) {
8
+ var _a;
9
+ const ftContent = select('ft-content', node);
10
+ const recommendedTitle = select('RecommendedTitle', node);
11
+ if (((_a = ftContent === null || ftContent === void 0 ? void 0 : ftContent.properties) === null || _a === void 0 ? void 0 : _a.url) !== undefined &&
12
+ typeof ftContent.properties.url === 'string') {
13
+ this.uuid = uuidFromUrl(ftContent.properties.url);
14
+ }
15
+ else {
16
+ this.uuid = '';
17
+ }
18
+ this.title = recommendedTitle ? toText(recommendedTitle) : 'Recommended';
19
+ this.teaserTitleOverride = ftContent ? toText(ftContent) : null;
20
+ }
21
+ },
22
+ _a.selector = 'recommended',
23
+ _a.resolve = {
24
+ teaser: async (parent, args, context) => {
25
+ let content = await context.dataSources.capi.getContent(parent.uuid);
26
+ if (parent.teaserTitleOverride) {
27
+ content = content.overrideTitle(parent.teaserTitleOverride);
28
+ }
29
+ return content;
30
+ },
31
+ },
32
+ _a.typeDef = gql `
33
+ type Recommended {
34
+ teaser: Teaser!
35
+ title: String!
36
+ }
37
+ `,
38
+ _a);
39
+ //# sourceMappingURL=Recommended.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Recommended.js","sourceRoot":"","sources":["../../src/tags/Recommended.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAIpD,MAAM,CAAC,MAAM,WAAW,SAAmB,MAAM,WAAW;QAO1D,YAAY,IAAkB;;YAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;YAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;YACzD,IACE,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,0CAAE,GAAG,MAAK,SAAS;gBACxC,OAAO,SAAS,CAAC,UAAU,CAAC,GAAG,KAAK,QAAQ,EAC5C;gBACA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;aAClD;iBAAM;gBACL,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;aACf;YAED,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;YACxE,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACjE,CAAC;KAoBF;IApCQ,WAAQ,GAAG,aAAa;IAkBxB,UAAO,GAAG;QACf,MAAM,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACnD,IAAI,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAEpE,IAAI,MAAM,CAAC,mBAAmB,EAAE;gBAC9B,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;aAC5D;YAED,OAAO,OAAO,CAAA;QAChB,CAAC;KACF;IAEM,UAAO,GAAG,GAAG,CAAA;;;;;GAKnB;OACF,CAAA"}
@@ -1,11 +1,11 @@
1
1
  import type * as hast from 'hast';
2
2
  import type { IObjectTypeResolver } from '@graphql-tools/utils';
3
3
  import type { DocumentNode } from 'graphql';
4
- import { CapiResponse } from './model/CapiResponse.js';
4
+ import type { CapiResponse } from '../model/CapiResponse.js';
5
5
  export declare type Tag = object;
6
- interface TagConstructor {
6
+ export interface TagConstructor {
7
7
  new (node: hast.Element, contentApiData?: CapiResponse): Tag;
8
- match(node: hast.Element): boolean;
8
+ selector: string;
9
9
  typeDef?: DocumentNode;
10
10
  resolve?: IObjectTypeResolver;
11
11
  }
@@ -0,0 +1,33 @@
1
+ import { Link } from './Link.js';
2
+ import { LayoutImage } from './LayoutImage.js';
3
+ import { ImageSet } from './ImageSet.js';
4
+ import { PullQuote } from './PullQuote.js';
5
+ import { Recommended } from './Recommended.js';
6
+ function createTagWithoutReference(name, selector) {
7
+ var _a;
8
+ const tag = (_a = class {
9
+ },
10
+ _a.selector = selector,
11
+ _a);
12
+ Object.defineProperty(tag, 'name', { value: name });
13
+ return tag;
14
+ }
15
+ const mapping = {
16
+ Link,
17
+ Experimental: createTagWithoutReference('Experimental', 'experimental'),
18
+ ImageSet,
19
+ Recommended,
20
+ RecommendedTitle: createTagWithoutReference('RecommendedTitle', 'recommended-title'),
21
+ Paragraph: createTagWithoutReference('Paragraph', 'p'),
22
+ UnorderedList: createTagWithoutReference('UnorderedList', 'ul'),
23
+ ListItem: createTagWithoutReference('ListItem', 'li'),
24
+ Layout: createTagWithoutReference('Layout', '.n-content-layout, .layout'),
25
+ LayoutContainer: createTagWithoutReference('LayoutContainer', '.n-content-layout__container, .layout-container'),
26
+ LayoutSlot: createTagWithoutReference('LayoutSlot', '.n-content-layout__slot, .layout-slot'),
27
+ LayoutImage,
28
+ PullQuote,
29
+ PullQuoteText: createTagWithoutReference('PullQuoteText', 'pull-quote-text'),
30
+ PullQuoteSource: createTagWithoutReference('PullQuoteText', 'pull-quote-source'),
31
+ };
32
+ export default mapping;
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tags/index.ts"],"names":[],"mappings":"AAMA,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;AAW9C,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,OAAO,GAAmC;IAC9C,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,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;CACF,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { visit } from 'unist-util-visit';
2
- import tags from '../tags.js';
2
+ import tags from '../tags/index.js';
3
3
  function isHastElement(element) {
4
4
  return element.type === 'element';
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extract-references.js","sourceRoot":"","sources":["../../src/unified-plugins/extract-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAKxC,OAAO,IAAa,MAAM,YAAY,CAAA;AAEtC,SAAS,aAAa,CAAC,OAAa;IAClC,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,CAAA;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,cAAc,GAGf;IACC,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QACxB,OAAO,CAAC,IAAa,EAAE,EAAE;YACvB,MAAM,UAAU,GAAU,EAAE,CAAA;YAE5B,IAAI,EAAE,GAAG,CAAC,CAAA;YACV,KAAK,CACH,IAAI,EACJ,CAAC,IAAI,EAAE,EAAE;gBACP,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;oBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;oBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;oBACzB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;iBACrD;gBACD,OAAO,KAAK,CAAA;YACd,CAAC,EACD,CAAC,IAAI,EAAE,EAAE;gBACP,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;oBACvB,IAAI,IAAI,CAAC,UAAU,EAAE;wBACnB,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,EAAE,EAAE,CAAA;qBACvC;yBAAM;wBACL,IAAI,CAAC,UAAU,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,CAAA;qBAC5C;oBAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBAC9B,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAA;iBAC/C;YACH,CAAC,CACF,CAAA;YACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC9B,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"extract-references.js","sourceRoot":"","sources":["../../src/unified-plugins/extract-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAKxC,OAAO,IAAa,MAAM,kBAAkB,CAAA;AAE5C,SAAS,aAAa,CAAC,OAAa;IAClC,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,CAAA;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,cAAc,GAGf;IACC,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QACxB,OAAO,CAAC,IAAa,EAAE,EAAE;YACvB,MAAM,UAAU,GAAU,EAAE,CAAA;YAE5B,IAAI,EAAE,GAAG,CAAC,CAAA;YACV,KAAK,CACH,IAAI,EACJ,CAAC,IAAI,EAAE,EAAE;gBACP,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;oBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;oBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;oBACzB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;iBACrD;gBACD,OAAO,KAAK,CAAA;YACd,CAAC,EACD,CAAC,IAAI,EAAE,EAAE;gBACP,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;oBACvB,IAAI,IAAI,CAAC,UAAU,EAAE;wBACnB,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,EAAE,EAAE,CAAA;qBACvC;yBAAM;wBACL,IAAI,CAAC,UAAU,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,CAAA;qBAC5C;oBAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBAC9B,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAA;iBAC/C;YACH,CAAC,CACF,CAAA;YACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC9B,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED,eAAe,iBAAiB,CAAA"}
@@ -1,10 +1,11 @@
1
1
  import { visit } from 'unist-util-visit';
2
- import tags from '../tags.js';
2
+ import { matches } from 'hast-util-select';
3
+ import tags from '../tags/index.js';
3
4
  const mapToAbstractTypes = function () {
4
5
  return (tree) => {
5
6
  visit(tree, (node) => {
6
7
  if (isHastElement(node)) {
7
- const mappedTag = Object.keys(tags).find((tag) => tags[tag].match(node));
8
+ const mappedTag = Object.keys(tags).find((tag) => matches(tags[tag].selector, node));
8
9
  node.tagName = mappedTag || node.tagName;
9
10
  }
10
11
  });
@@ -1 +1 @@
1
- {"version":3,"file":"map-to-abstract-types.js","sourceRoot":"","sources":["../../src/unified-plugins/map-to-abstract-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAGxC,OAAO,IAAI,MAAM,YAAY,CAAA;AAE7B,MAAM,kBAAkB,GAAiC;IACvD,OAAO,CAAC,IAAa,EAAE,EAAE;QACvB,KAAK,CAAC,IAAI,EAAE,CAAC,IAAS,EAAE,EAAE;YACxB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;gBACvB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBACxE,IAAI,CAAC,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,OAAO,CAAA;aACzC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC,CAAA;AAED,eAAe,kBAAkB,CAAA;AAEjC,SAAS,aAAa,CAAC,OAAuB;IAC5C,OAAQ,OAAmB,CAAC,OAAO,KAAK,SAAS,CAAA;AACnD,CAAC"}
1
+ {"version":3,"file":"map-to-abstract-types.js","sourceRoot":"","sources":["../../src/unified-plugins/map-to-abstract-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,OAAO,IAAI,MAAM,kBAAkB,CAAA;AAEnC,MAAM,kBAAkB,GAAiC;IACvD,OAAO,CAAC,IAAa,EAAE,EAAE;QACvB,KAAK,CAAC,IAAI,EAAE,CAAC,IAAS,EAAE,EAAE;YACxB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;gBACvB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAClC,CAAA;gBACD,IAAI,CAAC,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,OAAO,CAAA;aACzC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC,CAAA;AAED,eAAe,kBAAkB,CAAA;AAEjC,SAAS,aAAa,CAAC,OAAuB;IAC5C,OAAQ,OAAmB,CAAC,OAAO,KAAK,SAAS,CAAA;AACnD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/cp-content-pipeline-schema",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",
@@ -40,6 +40,7 @@
40
40
  "devDependencies": {
41
41
  "@dotcom-tool-kit/npm": "^2.0.9",
42
42
  "@types/graphql": "^14.5.0",
43
- "@types/hast": "^2.3.4"
43
+ "@types/hast": "^2.3.4",
44
+ "@types/next-metrics": "0.0.0"
44
45
  }
45
46
  }
@@ -1,8 +1,9 @@
1
- import { RESTDataSource, RequestOptions } from 'apollo-datasource-rest'
1
+ import { RequestOptions } from 'apollo-datasource-rest'
2
2
  import { CapiResponse } from '../model/CapiResponse.js'
3
+ import { InstrumentedRESTDataSource } from './instrumented.js'
3
4
  import { CapiPerson } from '../types/internal-content.js'
4
5
 
5
- export class CapiDataSource extends RESTDataSource {
6
+ export class CapiDataSource extends InstrumentedRESTDataSource {
6
7
  baseURL = process.env.CAPI_URL || 'https://api-t.ft.com/'
7
8
  capiKey = process.env.CAPI_API_KEY || ''
8
9
  articleCacheTTL = process.env.ARTICLE_CACHE_TTL
@@ -13,6 +14,7 @@ export class CapiDataSource extends RESTDataSource {
13
14
  : 600 // 10 minutes
14
15
 
15
16
  willSendRequest(request: RequestOptions) {
17
+ super.willSendRequest(request)
16
18
  request.headers.set('x-api-key', this.capiKey)
17
19
  }
18
20