@financial-times/cp-content-pipeline-schema 1.3.7 → 1.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/lib/model/CapiResponse.js +8 -7
- package/lib/model/CapiResponse.js.map +1 -1
- package/lib/model/Concept.js +4 -5
- package/lib/model/Concept.js.map +1 -1
- package/lib/model/Concept.test.js +2 -0
- package/lib/model/Concept.test.js.map +1 -1
- package/lib/model/Image.js +4 -4
- package/lib/model/Image.js.map +1 -1
- package/lib/model/schemas/capi/article.d.ts +3 -3
- package/lib/model/schemas/capi/base-schema.d.ts +3 -3
- package/lib/model/schemas/capi/base-schema.js +1 -1
- package/lib/model/schemas/capi/base-schema.js.map +1 -1
- package/lib/model/schemas/capi/content-package.d.ts +3 -3
- package/lib/model/schemas/capi/live-blog-package.d.ts +3 -3
- package/lib/model/schemas/capi/placeholder.d.ts +3 -3
- package/lib/resolvers/content-tree/bodyXMLToTree.test.js +20 -42
- package/lib/resolvers/content-tree/bodyXMLToTree.test.js.map +1 -1
- package/lib/resolvers/content-tree/nodePredicates.js +8 -9
- package/lib/resolvers/content-tree/nodePredicates.js.map +1 -1
- package/lib/resolvers/content-tree/references/Flourish.js +2 -3
- package/lib/resolvers/content-tree/references/Flourish.js.map +1 -1
- package/lib/resolvers/content-tree/references/RawImage.js +2 -3
- package/lib/resolvers/content-tree/references/RawImage.js.map +1 -1
- package/lib/resolvers/content-tree/references/Recommended.js +2 -3
- package/lib/resolvers/content-tree/references/Recommended.js.map +1 -1
- package/lib/resolvers/content-tree/references/Tweet.js +2 -3
- package/lib/resolvers/content-tree/references/Tweet.js.map +1 -1
- package/package.json +1 -1
- package/src/model/CapiResponse.ts +8 -7
- package/src/model/Concept.test.ts +2 -0
- package/src/model/Concept.ts +4 -5
- package/src/model/Image.ts +4 -4
- package/src/model/schemas/capi/base-schema.ts +1 -1
- package/src/resolvers/content-tree/bodyXMLToTree.test.ts +22 -20
- package/src/resolvers/content-tree/nodePredicates.ts +8 -9
- package/src/resolvers/content-tree/references/Flourish.ts +2 -3
- package/src/resolvers/content-tree/references/RawImage.ts +2 -3
- package/src/resolvers/content-tree/references/Recommended.ts +2 -3
- package/src/resolvers/content-tree/references/Tweet.ts +2 -3
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,42 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
28
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
jest.mock('@dotcom-reliability-kit/log-error', () => ({
|
|
30
|
-
logRecoverableError: jest.fn(),
|
|
31
|
-
}));
|
|
32
6
|
const bodyXMLToTree_1 = __importDefault(require("./bodyXMLToTree"));
|
|
33
7
|
const tagMappings_1 = __importDefault(require("./tagMappings"));
|
|
34
|
-
const
|
|
35
|
-
const
|
|
8
|
+
const logger_1 = require("@dotcom-reliability-kit/logger");
|
|
9
|
+
const mockLogger = new logger_1.Logger();
|
|
10
|
+
const mockLogError = jest.spyOn(mockLogger, 'error');
|
|
11
|
+
const mockContext = {
|
|
12
|
+
logger: mockLogger,
|
|
13
|
+
};
|
|
36
14
|
describe('bodyXMLToTree', () => {
|
|
37
15
|
it('converts XML to tree', () => {
|
|
38
16
|
const xml = `<body><p>Hello world</p></body>`;
|
|
39
|
-
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default)).toMatchInlineSnapshot(`
|
|
17
|
+
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default, mockContext)).toMatchInlineSnapshot(`
|
|
40
18
|
Object {
|
|
41
19
|
"children": Array [
|
|
42
20
|
Object {
|
|
@@ -223,11 +201,11 @@ describe('bodyXMLToTree', () => {
|
|
|
223
201
|
"version": 1,
|
|
224
202
|
}
|
|
225
203
|
`);
|
|
226
|
-
expect(
|
|
204
|
+
expect(mockLogError).not.toBeCalled();
|
|
227
205
|
});
|
|
228
206
|
it('should handle heading and slots', () => {
|
|
229
207
|
const xml = '<body><div class="n-content-layout"><h3></h3><div class="n-content-layout__slot"></div><div class="n-content-layout__slot"></div></body>';
|
|
230
|
-
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default)).toMatchInlineSnapshot(`
|
|
208
|
+
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default, mockContext)).toMatchInlineSnapshot(`
|
|
231
209
|
Object {
|
|
232
210
|
"children": Array [
|
|
233
211
|
Object {
|
|
@@ -255,11 +233,11 @@ describe('bodyXMLToTree', () => {
|
|
|
255
233
|
"version": 1,
|
|
256
234
|
}
|
|
257
235
|
`);
|
|
258
|
-
expect(
|
|
236
|
+
expect(mockLogError).not.toBeCalled();
|
|
259
237
|
});
|
|
260
238
|
it('should log an error on unexpected child after heading', () => {
|
|
261
239
|
const xml = '<body><div class="n-content-layout"><h3></h3><div class="n-content-layout__slot"></div><p></p></body>';
|
|
262
|
-
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default)).toMatchInlineSnapshot(`
|
|
240
|
+
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default, mockContext)).toMatchInlineSnapshot(`
|
|
263
241
|
Object {
|
|
264
242
|
"children": Array [
|
|
265
243
|
Object {
|
|
@@ -287,19 +265,19 @@ describe('bodyXMLToTree', () => {
|
|
|
287
265
|
"version": 1,
|
|
288
266
|
}
|
|
289
267
|
`);
|
|
290
|
-
expect(
|
|
291
|
-
expect(
|
|
268
|
+
expect(mockLogError).toBeCalled();
|
|
269
|
+
expect(mockLogError.mock.lastCall).toMatchInlineSnapshot(`
|
|
292
270
|
Array [
|
|
293
271
|
Object {
|
|
294
272
|
"error": [OperationalError: Unexpected children types for layout],
|
|
295
|
-
"
|
|
273
|
+
"event": "RECOVERABLE_ERROR",
|
|
296
274
|
},
|
|
297
275
|
]
|
|
298
276
|
`);
|
|
299
277
|
});
|
|
300
278
|
it('should log an error on unexpected child after slots', () => {
|
|
301
279
|
const xml = '<body><div class="n-content-layout"><div class="n-content-layout__slot"></div><p></p></body>';
|
|
302
|
-
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default)).toMatchInlineSnapshot(`
|
|
280
|
+
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default, mockContext)).toMatchInlineSnapshot(`
|
|
303
281
|
Object {
|
|
304
282
|
"children": Array [
|
|
305
283
|
Object {
|
|
@@ -322,12 +300,12 @@ describe('bodyXMLToTree', () => {
|
|
|
322
300
|
"version": 1,
|
|
323
301
|
}
|
|
324
302
|
`);
|
|
325
|
-
expect(
|
|
326
|
-
expect(
|
|
303
|
+
expect(mockLogError).toBeCalled();
|
|
304
|
+
expect(mockLogError.mock.lastCall).toMatchInlineSnapshot(`
|
|
327
305
|
Array [
|
|
328
306
|
Object {
|
|
329
307
|
"error": [OperationalError: Unexpected children types for layout],
|
|
330
|
-
"
|
|
308
|
+
"event": "RECOVERABLE_ERROR",
|
|
331
309
|
},
|
|
332
310
|
]
|
|
333
311
|
`);
|
|
@@ -336,7 +314,7 @@ describe('bodyXMLToTree', () => {
|
|
|
336
314
|
describe('tables', () => {
|
|
337
315
|
it('parses tables', () => {
|
|
338
316
|
const xml = '<table class="data-table" data-table-collapse-rownum="" data-table-layout-largescreen="auto" data-table-layout-smallscreen="auto" data-table-theme="auto"><caption>Nulla iaculis tempus augue</caption><thead><tr><th data-column-hidden="none" data-column-sortable="false" data-column-type="string">libero mollis</th><th data-column-hidden="none" data-column-sortable="false" data-column-type="string">pretium nunc</th><th data-column-hidden="none" data-column-sortable="false" data-column-type="string">euismod nunc</th></tr></thead><tbody><tr><td>Aenean </td><td>14134</td><td>dfdsfd</td></tr><tr><td>lobortis </td><td>3434</td><td>fdsf dsf </td></tr><tr><td>volutpat </td><td>234234</td><td>sd fsd</td></tr><tr><td>vitae </td><td>2423</td><td>s fsdf</td></tr><tr><td>elementumus</td><td>23423</td><td>f sdf</td></tr></tbody><tfoot><tr><td colspan="1000">Aenean sodales sapien</td></tr></tfoot></table>';
|
|
339
|
-
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default)).toMatchInlineSnapshot(`
|
|
317
|
+
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default, mockContext)).toMatchInlineSnapshot(`
|
|
340
318
|
Object {
|
|
341
319
|
"children": Array [
|
|
342
320
|
Object {
|
|
@@ -592,7 +570,7 @@ describe('bodyXMLToTree', () => {
|
|
|
592
570
|
});
|
|
593
571
|
it('parses single cell tables as infoboxes', () => {
|
|
594
572
|
const xml = '<table class="data-table" id="U1140244733565W0C"><caption>Emerging markets outlook for 2017</caption><tbody><tr><td colspan="2"><p>Brazil</p><p>Brazilian shares were the best-performing asset globally over the 12 months to the end of January, returning 121 per cent, according to data from BofA Merrill Lynch. Brazilian stocks did very well through January, but investors including Lazard and Eastspring have scaled back their exposure after strong growth last year.</p></td></tr></tbody></table>';
|
|
595
|
-
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default)).toMatchInlineSnapshot(`
|
|
573
|
+
expect((0, bodyXMLToTree_1.default)(xml, tagMappings_1.default, mockContext)).toMatchInlineSnapshot(`
|
|
596
574
|
Object {
|
|
597
575
|
"children": Array [
|
|
598
576
|
Object {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bodyXMLToTree.test.js","sourceRoot":"","sources":["../../../src/resolvers/content-tree/bodyXMLToTree.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bodyXMLToTree.test.js","sourceRoot":"","sources":["../../../src/resolvers/content-tree/bodyXMLToTree.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.childrenOfOrderedTypes = exports.nodesAreOrderedTypes = exports.childrenOfTypes = exports.everyChildIsType = exports.findChildOftype = exports.phrasingTypes = void 0;
|
|
4
|
-
const log_error_1 = require("@dotcom-reliability-kit/log-error");
|
|
5
4
|
const errors_1 = require("@dotcom-reliability-kit/errors");
|
|
6
5
|
exports.phrasingTypes = [
|
|
7
6
|
'text',
|
|
@@ -15,8 +14,8 @@ const findChildOftype = (type, nodes, parentType, context) => {
|
|
|
15
14
|
const predicate = (node) => node.type === type;
|
|
16
15
|
const child = nodes.find(predicate);
|
|
17
16
|
if (!child) {
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
context?.logger.error({
|
|
18
|
+
event: 'RECOVERABLE_ERROR',
|
|
20
19
|
error: new errors_1.OperationalError({
|
|
21
20
|
code: 'BODY_XML_UNEXPECTED_STRUCTURE',
|
|
22
21
|
message: `Didn't find expected child type in ${parentType}`,
|
|
@@ -32,8 +31,8 @@ const everyChildIsType = (type, nodes, parentType, context) => {
|
|
|
32
31
|
const predicate = (node) => node.type === type;
|
|
33
32
|
const allChildrenAreType = nodes.every(predicate);
|
|
34
33
|
if (!allChildrenAreType) {
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
context?.logger.error({
|
|
35
|
+
event: 'RECOVERABLE_ERROR',
|
|
37
36
|
error: new errors_1.OperationalError({
|
|
38
37
|
code: 'BODY_XML_UNEXPECTED_STRUCTURE',
|
|
39
38
|
message: `Unexpected children types for ${parentType}`,
|
|
@@ -49,8 +48,8 @@ const childrenOfTypes = (types, nodes, parentType, context) => {
|
|
|
49
48
|
const predicate = (node) => types.includes(node.type);
|
|
50
49
|
const allChildrenAreType = nodes.every(predicate);
|
|
51
50
|
if (!allChildrenAreType) {
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
context?.logger.error({
|
|
52
|
+
event: 'RECOVERABLE_ERROR',
|
|
54
53
|
error: new errors_1.OperationalError({
|
|
55
54
|
code: 'BODY_XML_UNEXPECTED_STRUCTURE',
|
|
56
55
|
message: `Unexpected ordered children types for ${parentType}`,
|
|
@@ -75,8 +74,8 @@ const childrenOfOrderedTypes = (types, nodes, parentType, context) => {
|
|
|
75
74
|
if ((0, exports.nodesAreOrderedTypes)(types, nodes)) {
|
|
76
75
|
return nodes;
|
|
77
76
|
}
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
context?.logger.error({
|
|
78
|
+
event: 'RECOVERABLE_ERROR',
|
|
80
79
|
error: new errors_1.OperationalError({
|
|
81
80
|
code: 'BODY_XML_UNEXPECTED_STRUCTURE',
|
|
82
81
|
message: `Unexpected children types for ${parentType}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodePredicates.js","sourceRoot":"","sources":["../../../src/resolvers/content-tree/nodePredicates.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"nodePredicates.js","sourceRoot":"","sources":["../../../src/resolvers/content-tree/nodePredicates.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.Flourish = void 0;
|
|
7
7
|
const imageService_1 = __importDefault(require("../../../helpers/imageService"));
|
|
8
8
|
const isError_1 = __importDefault(require("../../../helpers/isError"));
|
|
9
|
-
const lib_1 = require("@dotcom-reliability-kit/log-error/lib");
|
|
10
9
|
exports.Flourish = {
|
|
11
10
|
async fallbackImage(parent, _args, context) {
|
|
12
11
|
const type = parent.reference.flourishType;
|
|
@@ -44,9 +43,9 @@ const getImageMetadata = async (context, flourishUrl) => {
|
|
|
44
43
|
}
|
|
45
44
|
catch (error) {
|
|
46
45
|
if ((0, isError_1.default)(error)) {
|
|
47
|
-
|
|
46
|
+
context.logger.error({
|
|
47
|
+
event: 'RECOVERABLE_ERROR',
|
|
48
48
|
error,
|
|
49
|
-
logger: context.logger,
|
|
50
49
|
});
|
|
51
50
|
}
|
|
52
51
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flourish.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Flourish.ts"],"names":[],"mappings":";;;;;;AAAA,iFAA2D;AAG3D,uEAA8C;
|
|
1
|
+
{"version":3,"file":"Flourish.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Flourish.ts"],"names":[],"mappings":";;;;;;AAAA,iFAA2D;AAG3D,uEAA8C;AAEjC,QAAA,QAAQ,GAAG;IACtB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAA;QAC1C,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ;YAC5C,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS;YAC5B,CAAC,CAAC,KAAK,CAAA;QAEX,MAAM,WAAW,GAAG,kCAAkC,IAAI,IACxD,MAAM,CAAC,SAAS,CAAC,EACnB,aAAa,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAE3D,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAElE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAA;QACjC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAA;QAEnC,MAAM,sBAAsB,GAAG,IAAA,sBAAe,EAAC;YAC7C,GAAG,EAAE,WAAW;YAChB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,qBAAqB;YACvD,KAAK;SACN,CAAC,CAAA;QAEF,OAAO;YACL,GAAG,EAAE,sBAAsB;YAC3B,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,EAAE;YACb,KAAK;YACL,MAAM;SACP,CAAA;IACH,CAAC;CAC0B,CAAA;AAO7B,MAAM,gBAAgB,GAAG,KAAK,EAC5B,OAAqB,EACrB,WAAmB,EACK,EAAE;IAC1B,MAAM,aAAa,GAAG,IAAI,CAAA;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAA;IAE3B,IAAI;QACF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CACtE,WAAW,CACZ,CAAA;QAED,OAAO;YACL,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,aAAa;YAC5C,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,cAAc;SAChD,CAAA;KACF;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,IAAA,iBAAO,EAAC,KAAK,CAAC,EAAE;YAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBACnB,KAAK,EAAE,mBAAmB;gBAC1B,KAAK;aACN,CAAC,CAAA;SACH;QACD,OAAO;YACL,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,cAAc;SACvB,CAAA;KACF;AACH,CAAC,CAAA"}
|
|
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.RawImage = void 0;
|
|
7
|
-
const lib_1 = require("@dotcom-reliability-kit/log-error/lib");
|
|
8
7
|
const imageService_1 = __importDefault(require("../../../helpers/imageService"));
|
|
9
8
|
const isError_1 = __importDefault(require("../../../helpers/isError"));
|
|
10
9
|
class RawImageModel {
|
|
@@ -43,9 +42,9 @@ class RawImageModel {
|
|
|
43
42
|
}
|
|
44
43
|
catch (error) {
|
|
45
44
|
if ((0, isError_1.default)(error)) {
|
|
46
|
-
|
|
45
|
+
this.context.logger.error({
|
|
46
|
+
event: 'RECOVERABLE_ERROR',
|
|
47
47
|
error,
|
|
48
|
-
logger: this.context.logger,
|
|
49
48
|
});
|
|
50
49
|
}
|
|
51
50
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawImage.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/RawImage.ts"],"names":[],"mappings":";;;;;;AAEA
|
|
1
|
+
{"version":3,"file":"RawImage.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/RawImage.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Recommended = void 0;
|
|
4
4
|
const metadata_1 = require("../../../helpers/metadata");
|
|
5
|
-
const log_error_1 = require("@dotcom-reliability-kit/log-error");
|
|
6
5
|
const errors_1 = require("@dotcom-reliability-kit/errors");
|
|
7
6
|
exports.Recommended = {
|
|
8
7
|
async teaser(parent, _args, context) {
|
|
@@ -15,8 +14,8 @@ exports.Recommended = {
|
|
|
15
14
|
}
|
|
16
15
|
catch (error) {
|
|
17
16
|
if (error instanceof Error) {
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
context.logger.error({
|
|
18
|
+
event: 'RECOVERABLE_ERROR',
|
|
20
19
|
error: new errors_1.OperationalError({
|
|
21
20
|
code: 'RECOMMENDED_TEASER_ERROR',
|
|
22
21
|
message: `Couldn't load teaser for recommended article ${parent.reference.id}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Recommended.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Recommended.ts"],"names":[],"mappings":";;;AAAA,wDAAuD;AAEvD,
|
|
1
|
+
{"version":3,"file":"Recommended.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Recommended.ts"],"names":[],"mappings":";;;AAAA,wDAAuD;AAEvD,2DAAiE;AAEpD,QAAA,WAAW,GAAG;IACzB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO;QACjC,IAAI;YACF,IAAI,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CACrD,IAAA,sBAAW,EAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CACjC,CAAA;YAED,IAAI,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE;gBACxC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;aACtE;YACD,OAAO,OAAO,CAAA;SACf;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,YAAY,KAAK,EAAE;gBAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oBACnB,KAAK,EAAE,mBAAmB;oBAC1B,KAAK,EAAE,IAAI,yBAAgB,CAAC;wBAC1B,IAAI,EAAE,0BAA0B;wBAChC,OAAO,EAAE,gDAAgD,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE;wBAC9E,KAAK,EAAE,KAAK;qBACb,CAAC;iBACH,CAAC,CAAA;aACH;YAED,OAAO,IAAI,CAAA;SACZ;IACH,CAAC;CAC6B,CAAA"}
|
|
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Tweet = void 0;
|
|
7
|
-
const log_error_1 = require("@dotcom-reliability-kit/log-error");
|
|
8
7
|
const isError_1 = __importDefault(require("../../../helpers/isError"));
|
|
9
8
|
exports.Tweet = {
|
|
10
9
|
async html(parent, _args, context) {
|
|
@@ -14,9 +13,9 @@ exports.Tweet = {
|
|
|
14
13
|
}
|
|
15
14
|
catch (error) {
|
|
16
15
|
if ((0, isError_1.default)(error)) {
|
|
17
|
-
|
|
16
|
+
context.logger.error({
|
|
17
|
+
event: 'RECOVERABLE_ERROR',
|
|
18
18
|
error,
|
|
19
|
-
logger: context.logger,
|
|
20
19
|
});
|
|
21
20
|
}
|
|
22
21
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tweet.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Tweet.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"Tweet.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Tweet.ts"],"names":[],"mappings":";;;;;;AACA,uEAA8C;AAEjC,QAAA,KAAK,GAAG;IACnB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO;QAC/B,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CACtD,MAAM,CAAC,SAAS,CAAC,EAAE,CACpB,CAAA;YACD,OAAO,KAAK,CAAC,IAAI,CAAA;SAClB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,IAAA,iBAAO,EAAC,KAAK,CAAC,EAAE;gBAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oBACnB,KAAK,EAAE,mBAAmB;oBAC1B,KAAK;iBACN,CAAC,CAAA;aACH;YACD,OAAO,IAAI,CAAA;SACZ;IACH,CAAC;CACuB,CAAA"}
|
package/package.json
CHANGED
|
@@ -8,7 +8,6 @@ import conceptIds from '@financial-times/n-concept-ids'
|
|
|
8
8
|
import metadata, { TeaserMetadata } from '@financial-times/n-display-metadata'
|
|
9
9
|
import cloneDeep from 'clone-deep'
|
|
10
10
|
import { ConditionalKeys } from 'type-fest'
|
|
11
|
-
import { logRecoverableError } from '@dotcom-reliability-kit/log-error'
|
|
12
11
|
import { OperationalError } from '@dotcom-reliability-kit/errors'
|
|
13
12
|
|
|
14
13
|
import type { QueryContext } from '..'
|
|
@@ -138,8 +137,8 @@ export class CapiResponse {
|
|
|
138
137
|
* Don't let this failure block this system from continuing to try and handle the request
|
|
139
138
|
*/
|
|
140
139
|
if (!schemaResponse.success) {
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
context.logger.error({
|
|
141
|
+
event: 'RECOVERABLE_ERROR',
|
|
143
142
|
error: new OperationalError({
|
|
144
143
|
message:
|
|
145
144
|
'The data received from the CAPI data source does not match our data source schema. It is likely that our schema will require updating to handle all possible responses from CAPI.',
|
|
@@ -149,7 +148,7 @@ export class CapiResponse {
|
|
|
149
148
|
content
|
|
150
149
|
),
|
|
151
150
|
contentId: content.id,
|
|
152
|
-
contentType:
|
|
151
|
+
contentType: model.type(false),
|
|
153
152
|
}),
|
|
154
153
|
})
|
|
155
154
|
|
|
@@ -219,8 +218,8 @@ export class CapiResponse {
|
|
|
219
218
|
return vanityUrl ?? url
|
|
220
219
|
} catch (error) {
|
|
221
220
|
if (isError(error)) {
|
|
222
|
-
|
|
223
|
-
|
|
221
|
+
this.context.logger.error({
|
|
222
|
+
event: 'RECOVERABLE_ERROR',
|
|
224
223
|
error,
|
|
225
224
|
})
|
|
226
225
|
}
|
|
@@ -364,7 +363,9 @@ export class CapiResponse {
|
|
|
364
363
|
type(validate = true) {
|
|
365
364
|
const TYPE_REGEX = /https?:\/\/www.ft.com\/ontology\/content\//
|
|
366
365
|
const useType =
|
|
367
|
-
'type' in this.capiData
|
|
366
|
+
'type' in this.capiData && this.capiData.type
|
|
367
|
+
? this.capiData.type
|
|
368
|
+
: this.capiData.types[0]
|
|
368
369
|
const type = useType.replace(TYPE_REGEX, '')
|
|
369
370
|
|
|
370
371
|
if (validate && !validLiteralUnionValue(type, ContentType.values)) {
|
|
@@ -4,6 +4,7 @@ import type { QueryContext } from '..'
|
|
|
4
4
|
import { capiPerson } from '../fixtures/capiPerson'
|
|
5
5
|
import { URLManagementDataSource } from '../datasources/url-management'
|
|
6
6
|
import { CapiDataSource } from '../datasources/capi'
|
|
7
|
+
import { Logger } from '@dotcom-reliability-kit/logger'
|
|
7
8
|
|
|
8
9
|
const vanityMock = jest.fn<URLManagementDataSource['get']>()
|
|
9
10
|
const getPersonMock = jest.fn<CapiDataSource['getPerson']>()
|
|
@@ -14,6 +15,7 @@ const context = {
|
|
|
14
15
|
vanityUrls: { get: vanityMock },
|
|
15
16
|
},
|
|
16
17
|
systemCode: 'image-test',
|
|
18
|
+
logger: new Logger(),
|
|
17
19
|
} as unknown as QueryContext
|
|
18
20
|
|
|
19
21
|
const topic = {
|
package/src/model/Concept.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type { QueryContext } from '..'
|
|
|
3
3
|
import { uuidFromUrl } from '../helpers/metadata'
|
|
4
4
|
import imageServiceUrl from '../helpers/imageService'
|
|
5
5
|
import isError from '../helpers/isError'
|
|
6
|
-
import { logRecoverableError } from '@dotcom-reliability-kit/log-error'
|
|
7
6
|
import conceptIds from '@financial-times/n-concept-ids'
|
|
8
7
|
import decorateHeadshotUrl, { UUID_REGEX } from '../helpers/decorateHeadshotUrl'
|
|
9
8
|
|
|
@@ -151,8 +150,8 @@ export class Concept {
|
|
|
151
150
|
}
|
|
152
151
|
} catch (error) {
|
|
153
152
|
if (isError(error)) {
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
this.context.logger.error({
|
|
154
|
+
event: 'RECOVERABLE_ERROR',
|
|
156
155
|
error,
|
|
157
156
|
})
|
|
158
157
|
}
|
|
@@ -184,8 +183,8 @@ export class Concept {
|
|
|
184
183
|
: null
|
|
185
184
|
} catch (error) {
|
|
186
185
|
if (isError(error)) {
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
this.context.logger.error({
|
|
187
|
+
event: 'RECOVERABLE_ERROR',
|
|
189
188
|
error,
|
|
190
189
|
})
|
|
191
190
|
}
|
package/src/model/Image.ts
CHANGED
|
@@ -6,7 +6,6 @@ import type {
|
|
|
6
6
|
LeadImage,
|
|
7
7
|
} from '../types/internal-content'
|
|
8
8
|
import type { QueryContext } from '..'
|
|
9
|
-
import { logRecoverableError } from '@dotcom-reliability-kit/log-error/lib'
|
|
10
9
|
import {
|
|
11
10
|
LiteralUnionScalarValues,
|
|
12
11
|
validLiteralUnionValue,
|
|
@@ -60,7 +59,8 @@ export class CAPIImage implements Image {
|
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
// we shouldn't be here. but just in case,
|
|
63
|
-
|
|
62
|
+
this.context.logger.error({
|
|
63
|
+
event: 'RECOVERABLE_ERROR',
|
|
64
64
|
error: new BaseError({
|
|
65
65
|
code: 'INVALID_IMAGE_TYPE',
|
|
66
66
|
type: this.capiImage['type'], // capiImage is `never` here because we've exhausted all the "possible" types in the switch
|
|
@@ -169,9 +169,9 @@ export class CAPIImage implements Image {
|
|
|
169
169
|
return imageMetadata
|
|
170
170
|
} catch (error) {
|
|
171
171
|
if (isError(error)) {
|
|
172
|
-
|
|
172
|
+
this.context.logger.error({
|
|
173
|
+
event: 'RECOVERABLE_ERROR',
|
|
173
174
|
error,
|
|
174
|
-
logger: this.context.logger,
|
|
175
175
|
})
|
|
176
176
|
}
|
|
177
177
|
return null
|
|
@@ -127,7 +127,7 @@ export const baseMetadataSchema = z.object({
|
|
|
127
127
|
annotations: Annotation.array(),
|
|
128
128
|
webUrl: z.string().optional(),
|
|
129
129
|
canonicalWebUrl: z.string().optional(),
|
|
130
|
-
type: z.string(),
|
|
130
|
+
type: z.string().optional(),
|
|
131
131
|
types: z.string().array(),
|
|
132
132
|
standout: z
|
|
133
133
|
.object({
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
jest.mock('@dotcom-reliability-kit/log-error', () => ({
|
|
2
|
-
logRecoverableError: jest.fn(),
|
|
3
|
-
}))
|
|
4
|
-
|
|
5
1
|
import { ContentTree } from '@financial-times/content-tree'
|
|
6
2
|
import bodyXMLToTree, { TagMappings } from './bodyXMLToTree'
|
|
7
3
|
import tags from './tagMappings'
|
|
4
|
+
import { Logger } from '@dotcom-reliability-kit/logger'
|
|
5
|
+
import { QueryContext } from '../..'
|
|
6
|
+
|
|
7
|
+
const mockLogger = new Logger()
|
|
8
|
+
const mockLogError = jest.spyOn(mockLogger, 'error')
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
const mockContext = {
|
|
11
|
+
logger: mockLogger,
|
|
12
|
+
} as QueryContext
|
|
11
13
|
|
|
12
14
|
describe('bodyXMLToTree', () => {
|
|
13
15
|
it('converts XML to tree', () => {
|
|
14
16
|
const xml = `<body><p>Hello world</p></body>`
|
|
15
|
-
expect(bodyXMLToTree(xml, tags)).toMatchInlineSnapshot(`
|
|
17
|
+
expect(bodyXMLToTree(xml, tags, mockContext)).toMatchInlineSnapshot(`
|
|
16
18
|
Object {
|
|
17
19
|
"children": Array [
|
|
18
20
|
Object {
|
|
@@ -218,14 +220,14 @@ describe('bodyXMLToTree', () => {
|
|
|
218
220
|
"version": 1,
|
|
219
221
|
}
|
|
220
222
|
`)
|
|
221
|
-
expect(
|
|
223
|
+
expect(mockLogError).not.toBeCalled()
|
|
222
224
|
})
|
|
223
225
|
|
|
224
226
|
it('should handle heading and slots', () => {
|
|
225
227
|
const xml =
|
|
226
228
|
'<body><div class="n-content-layout"><h3></h3><div class="n-content-layout__slot"></div><div class="n-content-layout__slot"></div></body>'
|
|
227
229
|
|
|
228
|
-
expect(bodyXMLToTree(xml, tags)).toMatchInlineSnapshot(`
|
|
230
|
+
expect(bodyXMLToTree(xml, tags, mockContext)).toMatchInlineSnapshot(`
|
|
229
231
|
Object {
|
|
230
232
|
"children": Array [
|
|
231
233
|
Object {
|
|
@@ -253,14 +255,14 @@ describe('bodyXMLToTree', () => {
|
|
|
253
255
|
"version": 1,
|
|
254
256
|
}
|
|
255
257
|
`)
|
|
256
|
-
expect(
|
|
258
|
+
expect(mockLogError).not.toBeCalled()
|
|
257
259
|
})
|
|
258
260
|
|
|
259
261
|
it('should log an error on unexpected child after heading', () => {
|
|
260
262
|
const xml =
|
|
261
263
|
'<body><div class="n-content-layout"><h3></h3><div class="n-content-layout__slot"></div><p></p></body>'
|
|
262
264
|
|
|
263
|
-
expect(bodyXMLToTree(xml, tags)).toMatchInlineSnapshot(`
|
|
265
|
+
expect(bodyXMLToTree(xml, tags, mockContext)).toMatchInlineSnapshot(`
|
|
264
266
|
Object {
|
|
265
267
|
"children": Array [
|
|
266
268
|
Object {
|
|
@@ -288,12 +290,12 @@ describe('bodyXMLToTree', () => {
|
|
|
288
290
|
"version": 1,
|
|
289
291
|
}
|
|
290
292
|
`)
|
|
291
|
-
expect(
|
|
292
|
-
expect(
|
|
293
|
+
expect(mockLogError).toBeCalled()
|
|
294
|
+
expect(mockLogError.mock.lastCall).toMatchInlineSnapshot(`
|
|
293
295
|
Array [
|
|
294
296
|
Object {
|
|
295
297
|
"error": [OperationalError: Unexpected children types for layout],
|
|
296
|
-
"
|
|
298
|
+
"event": "RECOVERABLE_ERROR",
|
|
297
299
|
},
|
|
298
300
|
]
|
|
299
301
|
`)
|
|
@@ -303,7 +305,7 @@ describe('bodyXMLToTree', () => {
|
|
|
303
305
|
const xml =
|
|
304
306
|
'<body><div class="n-content-layout"><div class="n-content-layout__slot"></div><p></p></body>'
|
|
305
307
|
|
|
306
|
-
expect(bodyXMLToTree(xml, tags)).toMatchInlineSnapshot(`
|
|
308
|
+
expect(bodyXMLToTree(xml, tags, mockContext)).toMatchInlineSnapshot(`
|
|
307
309
|
Object {
|
|
308
310
|
"children": Array [
|
|
309
311
|
Object {
|
|
@@ -326,12 +328,12 @@ describe('bodyXMLToTree', () => {
|
|
|
326
328
|
"version": 1,
|
|
327
329
|
}
|
|
328
330
|
`)
|
|
329
|
-
expect(
|
|
330
|
-
expect(
|
|
331
|
+
expect(mockLogError).toBeCalled()
|
|
332
|
+
expect(mockLogError.mock.lastCall).toMatchInlineSnapshot(`
|
|
331
333
|
Array [
|
|
332
334
|
Object {
|
|
333
335
|
"error": [OperationalError: Unexpected children types for layout],
|
|
334
|
-
"
|
|
336
|
+
"event": "RECOVERABLE_ERROR",
|
|
335
337
|
},
|
|
336
338
|
]
|
|
337
339
|
`)
|
|
@@ -343,7 +345,7 @@ describe('bodyXMLToTree', () => {
|
|
|
343
345
|
const xml =
|
|
344
346
|
'<table class="data-table" data-table-collapse-rownum="" data-table-layout-largescreen="auto" data-table-layout-smallscreen="auto" data-table-theme="auto"><caption>Nulla iaculis tempus augue</caption><thead><tr><th data-column-hidden="none" data-column-sortable="false" data-column-type="string">libero mollis</th><th data-column-hidden="none" data-column-sortable="false" data-column-type="string">pretium nunc</th><th data-column-hidden="none" data-column-sortable="false" data-column-type="string">euismod nunc</th></tr></thead><tbody><tr><td>Aenean </td><td>14134</td><td>dfdsfd</td></tr><tr><td>lobortis </td><td>3434</td><td>fdsf dsf </td></tr><tr><td>volutpat </td><td>234234</td><td>sd fsd</td></tr><tr><td>vitae </td><td>2423</td><td>s fsdf</td></tr><tr><td>elementumus</td><td>23423</td><td>f sdf</td></tr></tbody><tfoot><tr><td colspan="1000">Aenean sodales sapien</td></tr></tfoot></table>'
|
|
345
347
|
|
|
346
|
-
expect(bodyXMLToTree(xml, tags)).toMatchInlineSnapshot(`
|
|
348
|
+
expect(bodyXMLToTree(xml, tags, mockContext)).toMatchInlineSnapshot(`
|
|
347
349
|
Object {
|
|
348
350
|
"children": Array [
|
|
349
351
|
Object {
|
|
@@ -602,7 +604,7 @@ describe('bodyXMLToTree', () => {
|
|
|
602
604
|
const xml =
|
|
603
605
|
'<table class="data-table" id="U1140244733565W0C"><caption>Emerging markets outlook for 2017</caption><tbody><tr><td colspan="2"><p>Brazil</p><p>Brazilian shares were the best-performing asset globally over the 12 months to the end of January, returning 121 per cent, according to data from BofA Merrill Lynch. Brazilian stocks did very well through January, but investors including Lazard and Eastspring have scaled back their exposure after strong growth last year.</p></td></tr></tbody></table>'
|
|
604
606
|
|
|
605
|
-
expect(bodyXMLToTree(xml, tags)).toMatchInlineSnapshot(`
|
|
607
|
+
expect(bodyXMLToTree(xml, tags, mockContext)).toMatchInlineSnapshot(`
|
|
606
608
|
Object {
|
|
607
609
|
"children": Array [
|
|
608
610
|
Object {
|