@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.
- package/CHANGELOG.md +22 -0
- package/lib/datasources/capi.d.ts +3 -2
- package/lib/datasources/capi.js +3 -2
- package/lib/datasources/capi.js.map +1 -1
- package/lib/datasources/index.d.ts +2 -0
- package/lib/datasources/index.js +2 -0
- package/lib/datasources/index.js.map +1 -1
- package/lib/datasources/instrumented.d.ts +7 -0
- package/lib/datasources/instrumented.js +18 -0
- package/lib/datasources/instrumented.js.map +1 -0
- package/lib/datasources/origami-image.d.ts +2 -2
- package/lib/datasources/origami-image.js +2 -2
- package/lib/datasources/origami-image.js.map +1 -1
- package/lib/datasources/twitter.d.ts +5 -0
- package/lib/datasources/twitter.js +11 -0
- package/lib/datasources/twitter.js.map +1 -0
- package/lib/datasources/url-management.d.ts +3 -3
- package/lib/datasources/url-management.js +4 -5
- package/lib/datasources/url-management.js.map +1 -1
- package/lib/datasources/url-management.test.js +12 -5
- package/lib/datasources/url-management.test.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/model/Byline.js +2 -0
- package/lib/model/Byline.js.map +1 -1
- package/lib/model/Byline.test.js +7 -0
- package/lib/model/Byline.test.js.map +1 -1
- package/lib/richText.d.ts +1 -2
- package/lib/tags/ImageSet.d.ts +2 -0
- package/lib/tags/ImageSet.js +24 -0
- package/lib/tags/ImageSet.js.map +1 -0
- package/lib/tags/LayoutImage.d.ts +2 -0
- package/lib/tags/LayoutImage.js +42 -0
- package/lib/tags/LayoutImage.js.map +1 -0
- package/lib/tags/Link.d.ts +2 -0
- package/lib/tags/Link.js +21 -0
- package/lib/tags/Link.js.map +1 -0
- package/lib/tags/PullQuote.d.ts +2 -0
- package/lib/tags/PullQuote.js +25 -0
- package/lib/tags/PullQuote.js.map +1 -0
- package/lib/tags/Recommended.d.ts +2 -0
- package/lib/tags/Recommended.js +39 -0
- package/lib/tags/Recommended.js.map +1 -0
- package/lib/tags/Tweet.d.ts +17 -0
- package/lib/tags/Tweet.js +40 -0
- package/lib/tags/Tweet.js.map +1 -0
- package/lib/tags/Tweet.test.d.ts +1 -0
- package/lib/tags/Tweet.test.js +71 -0
- package/lib/tags/Tweet.test.js.map +1 -0
- package/lib/{tags.d.ts → tags/index.d.ts} +4 -4
- package/lib/tags/index.js +42 -0
- package/lib/tags/index.js.map +1 -0
- package/lib/unified-plugins/extract-references.js +1 -1
- package/lib/unified-plugins/extract-references.js.map +1 -1
- package/lib/unified-plugins/map-to-abstract-types.js +3 -2
- package/lib/unified-plugins/map-to-abstract-types.js.map +1 -1
- package/package.json +3 -2
- package/src/datasources/capi.ts +4 -2
- package/src/datasources/index.ts +2 -0
- package/src/datasources/instrumented.ts +39 -0
- package/src/datasources/origami-image.ts +2 -2
- package/src/datasources/twitter.ts +9 -0
- package/src/datasources/url-management.test.ts +14 -5
- package/src/datasources/url-management.ts +7 -10
- package/src/index.ts +4 -2
- package/src/model/Byline.test.ts +9 -0
- package/src/model/Byline.ts +1 -0
- package/src/model/__snapshots__/Byline.test.ts.snap +14 -0
- package/src/richText.ts +1 -1
- package/src/tags/ImageSet.ts +35 -0
- package/src/tags/LayoutImage.ts +51 -0
- package/src/tags/Link.ts +23 -0
- package/src/tags/PullQuote.ts +32 -0
- package/src/tags/Recommended.ts +49 -0
- package/src/tags/Tweet.test.ts +82 -0
- package/src/tags/Tweet.ts +48 -0
- package/src/tags/index.ts +74 -0
- package/src/unified-plugins/extract-references.ts +1 -1
- package/src/unified-plugins/map-to-abstract-types.ts +5 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/lib/tags.js +0 -202
- package/lib/tags.js.map +0 -1
- package/src/tags.ts +0 -274
- 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 {
|
|
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
|
|
5
|
+
export declare class CapiDataSource extends InstrumentedRESTDataSource {
|
|
5
6
|
baseURL: string;
|
|
6
7
|
capiKey: string;
|
|
7
8
|
articleCacheTTL: number;
|
package/lib/datasources/capi.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { RESTDataSource } from 'apollo-datasource-rest';
|
|
2
1
|
import { CapiResponse } from '../model/CapiResponse.js';
|
|
3
|
-
|
|
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":"
|
|
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>;
|
package/lib/datasources/index.js
CHANGED
|
@@ -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;
|
|
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 {
|
|
2
|
-
export declare class OrigamiImageDataSource extends
|
|
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 {
|
|
2
|
-
export class OrigamiImageDataSource extends
|
|
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,
|
|
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,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:
|
|
5
|
+
context: QueryContext;
|
|
5
6
|
cache: KeyValueCache;
|
|
6
7
|
memoizedResults: Map<string, Promise<string>>;
|
|
7
8
|
static clientInitialised: boolean;
|
|
8
|
-
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
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":"AAAA,6DAA6D;AAC7D,oDAAoD;AAEpD,IAAI,CAAC,mBAAmB,CACtB,mDAAmD,EACnD,GAAG,EAAE,CAAC,CAAC;IACL,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;IACd,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;CAChB,CAAC,CACH,CAAA;AAED,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;AAEzD,MAAM,uBAAuB,GAAG,aAAa,CAAC,uBAAuB,CAAA;AACrE,MAAM,2BAA2B,GAAG,MAAM,MAAM,CAC9C,mDAAmD,CACpD,CAAA;
|
|
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(([
|
|
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,
|
|
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"}
|
package/lib/model/Byline.js
CHANGED
|
@@ -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) {
|
package/lib/model/Byline.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/lib/model/Byline.test.js
CHANGED
|
@@ -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,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,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"}
|
package/lib/tags/Link.js
ADDED
|
@@ -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,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,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"}
|