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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CHANGELOG.md +22 -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/index.d.ts +2 -0
  6. package/lib/datasources/index.js +2 -0
  7. package/lib/datasources/index.js.map +1 -1
  8. package/lib/datasources/instrumented.d.ts +7 -0
  9. package/lib/datasources/instrumented.js +18 -0
  10. package/lib/datasources/instrumented.js.map +1 -0
  11. package/lib/datasources/origami-image.d.ts +2 -2
  12. package/lib/datasources/origami-image.js +2 -2
  13. package/lib/datasources/origami-image.js.map +1 -1
  14. package/lib/datasources/twitter.d.ts +5 -0
  15. package/lib/datasources/twitter.js +11 -0
  16. package/lib/datasources/twitter.js.map +1 -0
  17. package/lib/datasources/url-management.d.ts +3 -3
  18. package/lib/datasources/url-management.js +4 -5
  19. package/lib/datasources/url-management.js.map +1 -1
  20. package/lib/datasources/url-management.test.js +12 -5
  21. package/lib/datasources/url-management.test.js.map +1 -1
  22. package/lib/index.d.ts +2 -0
  23. package/lib/index.js +2 -2
  24. package/lib/index.js.map +1 -1
  25. package/lib/model/Byline.js +2 -0
  26. package/lib/model/Byline.js.map +1 -1
  27. package/lib/model/Byline.test.js +7 -0
  28. package/lib/model/Byline.test.js.map +1 -1
  29. package/lib/richText.d.ts +1 -2
  30. package/lib/tags/ImageSet.d.ts +2 -0
  31. package/lib/tags/ImageSet.js +24 -0
  32. package/lib/tags/ImageSet.js.map +1 -0
  33. package/lib/tags/LayoutImage.d.ts +2 -0
  34. package/lib/tags/LayoutImage.js +42 -0
  35. package/lib/tags/LayoutImage.js.map +1 -0
  36. package/lib/tags/Link.d.ts +2 -0
  37. package/lib/tags/Link.js +21 -0
  38. package/lib/tags/Link.js.map +1 -0
  39. package/lib/tags/PullQuote.d.ts +2 -0
  40. package/lib/tags/PullQuote.js +25 -0
  41. package/lib/tags/PullQuote.js.map +1 -0
  42. package/lib/tags/Recommended.d.ts +2 -0
  43. package/lib/tags/Recommended.js +39 -0
  44. package/lib/tags/Recommended.js.map +1 -0
  45. package/lib/tags/Tweet.d.ts +17 -0
  46. package/lib/tags/Tweet.js +40 -0
  47. package/lib/tags/Tweet.js.map +1 -0
  48. package/lib/tags/Tweet.test.d.ts +1 -0
  49. package/lib/tags/Tweet.test.js +71 -0
  50. package/lib/tags/Tweet.test.js.map +1 -0
  51. package/lib/{tags.d.ts → tags/index.d.ts} +4 -4
  52. package/lib/tags/index.js +42 -0
  53. package/lib/tags/index.js.map +1 -0
  54. package/lib/unified-plugins/extract-references.js +1 -1
  55. package/lib/unified-plugins/extract-references.js.map +1 -1
  56. package/lib/unified-plugins/map-to-abstract-types.js +3 -2
  57. package/lib/unified-plugins/map-to-abstract-types.js.map +1 -1
  58. package/package.json +3 -2
  59. package/src/datasources/capi.ts +4 -2
  60. package/src/datasources/index.ts +2 -0
  61. package/src/datasources/instrumented.ts +39 -0
  62. package/src/datasources/origami-image.ts +2 -2
  63. package/src/datasources/twitter.ts +9 -0
  64. package/src/datasources/url-management.test.ts +14 -5
  65. package/src/datasources/url-management.ts +7 -10
  66. package/src/index.ts +4 -2
  67. package/src/model/Byline.test.ts +9 -0
  68. package/src/model/Byline.ts +1 -0
  69. package/src/model/__snapshots__/Byline.test.ts.snap +14 -0
  70. package/src/richText.ts +1 -1
  71. package/src/tags/ImageSet.ts +35 -0
  72. package/src/tags/LayoutImage.ts +51 -0
  73. package/src/tags/Link.ts +23 -0
  74. package/src/tags/PullQuote.ts +32 -0
  75. package/src/tags/Recommended.ts +49 -0
  76. package/src/tags/Tweet.test.ts +82 -0
  77. package/src/tags/Tweet.ts +48 -0
  78. package/src/tags/index.ts +74 -0
  79. package/src/unified-plugins/extract-references.ts +1 -1
  80. package/src/unified-plugins/map-to-abstract-types.ts +5 -2
  81. package/tsconfig.tsbuildinfo +1 -1
  82. package/lib/tags.js +0 -202
  83. package/lib/tags.js.map +0 -1
  84. package/src/tags.ts +0 -274
  85. package/src/types/next-metrics.d.ts +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.2](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.3.1...cp-content-pipeline-schema-v0.3.2) (2022-10-18)
4
+
5
+
6
+ ### Features
7
+
8
+ * add simple html formatting tags ([7f5b229](https://github.com/Financial-Times/cp-content-pipeline/commit/7f5b229162d92f687ea16e1b4a34883179e337da))
9
+ * add tag class for Tweets and basic blockquote ([e5f525a](https://github.com/Financial-Times/cp-content-pipeline/commit/e5f525ac3c89128332852a79e1a580505f1741d0))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * handle bylines without any author data ([5458a1a](https://github.com/Financial-Times/cp-content-pipeline/commit/5458a1ac35749c1503d19ab8773ded9791fd214f))
15
+ * handle errors from twitter api gracefully ([2d285b3](https://github.com/Financial-Times/cp-content-pipeline/commit/2d285b30b1e8a0c7c3c344c97b5a7cbe10a3d304))
16
+
17
+ ## [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)
18
+
19
+
20
+ ### Features
21
+
22
+ * instrument REST datasources ([ce509a2](https://github.com/Financial-Times/cp-content-pipeline/commit/ce509a2f4bc91e6e9593ef21f7341a5e504727b4))
23
+ * split restdatasource metrics by response status ([3c2356c](https://github.com/Financial-Times/cp-content-pipeline/commit/3c2356c12001bb6af30c5820111d21a6c7766588))
24
+
3
25
  ## [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
26
 
5
27
 
@@ -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"}
@@ -1,9 +1,11 @@
1
1
  import { CapiDataSource } from './capi.js';
2
2
  import { OrigamiImageDataSource } from './origami-image.js';
3
+ import { TwitterDataSource } from './twitter.js';
3
4
  import { URLManagementDataSource } from './url-management.js';
4
5
  export declare const dataSources: () => {
5
6
  capi: CapiDataSource;
6
7
  origami: OrigamiImageDataSource;
7
8
  vanityUrls: URLManagementDataSource;
9
+ twitter: TwitterDataSource;
8
10
  };
9
11
  export declare type DataSources = ReturnType<typeof dataSources>;
@@ -1,9 +1,11 @@
1
1
  import { CapiDataSource } from './capi.js';
2
2
  import { OrigamiImageDataSource } from './origami-image.js';
3
+ import { TwitterDataSource } from './twitter.js';
3
4
  import { URLManagementDataSource } from './url-management.js';
4
5
  export const dataSources = () => ({
5
6
  capi: new CapiDataSource(),
6
7
  origami: new OrigamiImageDataSource(),
7
8
  vanityUrls: new URLManagementDataSource(),
9
+ twitter: new TwitterDataSource(),
8
10
  });
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/datasources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,CAAC;IAChC,IAAI,EAAE,IAAI,cAAc,EAAE;IAC1B,OAAO,EAAE,IAAI,sBAAsB,EAAE;IACrC,UAAU,EAAE,IAAI,uBAAuB,EAAE;CAC1C,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/datasources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,CAAC;IAChC,IAAI,EAAE,IAAI,cAAc,EAAE;IAC1B,OAAO,EAAE,IAAI,sBAAsB,EAAE;IACrC,UAAU,EAAE,IAAI,uBAAuB,EAAE;IACzC,OAAO,EAAE,IAAI,iBAAiB,EAAE;CACjC,CAAC,CAAA"}
@@ -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"}
@@ -0,0 +1,5 @@
1
+ import { InstrumentedRESTDataSource } from './instrumented.js';
2
+ export declare class TwitterDataSource extends InstrumentedRESTDataSource {
3
+ baseURL: string;
4
+ getTweet(tweetUrl: string): Promise<any>;
5
+ }
@@ -0,0 +1,11 @@
1
+ import { InstrumentedRESTDataSource } from './instrumented.js';
2
+ export class TwitterDataSource extends InstrumentedRESTDataSource {
3
+ constructor() {
4
+ super(...arguments);
5
+ this.baseURL = 'https://publish.twitter.com';
6
+ }
7
+ async getTweet(tweetUrl) {
8
+ return this.get(`/oembed?url=${tweetUrl}&omit_script=true`);
9
+ }
10
+ }
11
+ //# sourceMappingURL=twitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twitter.js","sourceRoot":"","sources":["../../src/datasources/twitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAE9D,MAAM,OAAO,iBAAkB,SAAQ,0BAA0B;IAAjE;;QACE,YAAO,GAAG,6BAA6B,CAAA;IAKzC,CAAC;IAHC,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,QAAQ,mBAAmB,CAAC,CAAA;IAC7D,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,9 +7,9 @@ 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
- const tagsWithReferences = tagEntries.filter(([_key, tag]) => tag.typeDef);
12
+ const tagsWithReferences = tagEntries.filter(([, tag]) => tag.typeDef);
13
13
  const tagTypeDefs = tagsWithReferences.flatMap(([_key, tag]) => tag.typeDef);
14
14
  const Reference = gql `union Reference = ${tagsWithReferences
15
15
  .flatMap(([key]) => key)
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,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACtE,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"}
@@ -18,6 +18,8 @@ export class Byline {
18
18
  }
19
19
  }
20
20
  _Byline_instances = new WeakSet(), _Byline_splitBylineByName = function _Byline_splitBylineByName(byline, names) {
21
+ if (!names.length)
22
+ return [byline];
21
23
  const regex = new RegExp(`(${names.join('|')})`, 'ig');
22
24
  return byline.split(regex).filter((string) => string !== '');
23
25
  }, _Byline_buildUrlTree = function _Byline_buildUrlTree(urlMapping, parts) {
@@ -1 +1 @@
1
- {"version":3,"file":"Byline.js","sourceRoot":"","sources":["../../src/model/Byline.ts"],"names":[],"mappings":";;;;;;AAAA,MAAM,OAAO,MAAM;IACjB,YAAoB,MAAc,EAAU,gBAAqB;QAA7C,WAAM,GAAN,MAAM,CAAQ;QAAU,qBAAgB,GAAhB,gBAAgB,CAAK;;IAAG,CAAC;IAErE,eAAe;QACb,MAAM,KAAK,GAAG,uBAAA,IAAI,oDAAmB,MAAvB,IAAI,EAAoB,IAAI,CAAC,MAAM,EAAE;YACjD,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;SAChC,CAAC,CAAA;QACF,OAAO,uBAAA,IAAI,+CAAc,MAAlB,IAAI,EAAe,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;IACzD,CAAC;CA8BF;kGA5BoB,MAAc,EAAE,KAAe;IAChD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACtD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,CAAA;AAC9D,CAAC,uDAEa,UAA+B,EAAE,KAAe;IAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,GAAG,EAAE;YACP,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;gBACzB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC1C,CAAA;SACF;aAAM;YACL,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI;aACZ,CAAA;SACF;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;KACjC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Byline.js","sourceRoot":"","sources":["../../src/model/Byline.ts"],"names":[],"mappings":";;;;;;AAAA,MAAM,OAAO,MAAM;IACjB,YAAoB,MAAc,EAAU,gBAAqB;QAA7C,WAAM,GAAN,MAAM,CAAQ;QAAU,qBAAgB,GAAhB,gBAAgB,CAAK;;IAAG,CAAC;IAErE,eAAe;QACb,MAAM,KAAK,GAAG,uBAAA,IAAI,oDAAmB,MAAvB,IAAI,EAAoB,IAAI,CAAC,MAAM,EAAE;YACjD,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;SAChC,CAAC,CAAA;QACF,OAAO,uBAAA,IAAI,+CAAc,MAAlB,IAAI,EAAe,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;IACzD,CAAC;CA+BF;kGA7BoB,MAAc,EAAE,KAAe;IAChD,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACtD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,CAAA;AAC9D,CAAC,uDAEa,UAA+B,EAAE,KAAe;IAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,GAAG,EAAE;YACP,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;gBACzB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC1C,CAAA;SACF;aAAM;YACL,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI;aACZ,CAAA;SACF;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;KACjC,CAAA;AACH,CAAC"}
@@ -56,5 +56,12 @@ describe('byline transformation', () => {
56
56
  const result = byline.buildBylineTree();
57
57
  expect(result).toMatchSnapshot();
58
58
  });
59
+ test('handles bylines without any matching authors', async () => {
60
+ const bylineText = 'Chris Giles and Nick Ramsbottom in London';
61
+ const authorUrlMapping = new Map([]);
62
+ const byline = new Byline(bylineText, authorUrlMapping);
63
+ const result = byline.buildBylineTree();
64
+ expect(result).toMatchSnapshot();
65
+ });
59
66
  });
60
67
  //# sourceMappingURL=Byline.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Byline.test.js","sourceRoot":"","sources":["../../src/model/Byline.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,UAAU,GAAG,uBAAuB,CAAA;QAC1C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B;gBACE,aAAa;gBACb,qEAAqE;aACtE;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,UAAU,GAAG,uCAAuC,CAAA;QAC1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B;gBACE,aAAa;gBACb,qEAAqE;aACtE;YACD;gBACE,aAAa;gBACb,qEAAqE;aACtE;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,UAAU,GAAG,2CAA2C,CAAA;QAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B;gBACE,aAAa;gBACb,qEAAqE;aACtE;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,UAAU,GAAG,uBAAuB,CAAA;QAC1C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B;gBACE,aAAa;gBACb,qEAAqE;aACtE;YACD;gBACE,aAAa;gBACb,qEAAqE;aACtE;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Byline.test.js","sourceRoot":"","sources":["../../src/model/Byline.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,UAAU,GAAG,uBAAuB,CAAA;QAC1C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B;gBACE,aAAa;gBACb,qEAAqE;aACtE;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,UAAU,GAAG,uCAAuC,CAAA;QAC1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B;gBACE,aAAa;gBACb,qEAAqE;aACtE;YACD;gBACE,aAAa;gBACb,qEAAqE;aACtE;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,UAAU,GAAG,2CAA2C,CAAA;QAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B;gBACE,aAAa;gBACb,qEAAqE;aACtE;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,UAAU,GAAG,uBAAuB,CAAA;QAC1C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B;gBACE,aAAa;gBACb,qEAAqE;aACtE;YACD;gBACE,aAAa;gBACb,qEAAqE;aACtE;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,UAAU,GAAG,2CAA2C,CAAA;QAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAA;QAEpC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/lib/richText.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { CapiResponse } from './model/CapiResponse.js';
2
- declare type RichTextResolverData = {
2
+ export declare type RichTextResolverData = {
3
3
  source: string;
4
4
  value: string;
5
5
  contentApiData?: CapiResponse;
@@ -11,4 +11,3 @@ export declare const resolvers: {
11
11
  structured(parent: RichTextResolverData): Promise<unknown>;
12
12
  };
13
13
  };
14
- export {};
@@ -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:not([dataAssetType])',
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,wBAAwB;IAUnC,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"}