@squiz/dx-json-schema-lib 1.3.4-alpha.2 → 1.5.1-alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +25 -1
- package/lib/JsonValidationService.d.ts +3 -1
- package/lib/JsonValidationService.js +10 -10
- package/lib/JsonValidationService.js.map +1 -1
- package/lib/formatted-text/v1/resolveFormattedTextNodes.d.ts +30 -0
- package/lib/formatted-text/v1/resolveFormattedTextNodes.js +50 -0
- package/lib/formatted-text/v1/resolveFormattedTextNodes.js.map +1 -0
- package/lib/formatted-text/v1/{higherOrderFormattedTextToBaseFormattedText.spec.d.ts → resolveFormattedTextNodes.spec.d.ts} +0 -0
- package/lib/formatted-text/v1/resolveFormattedTextNodes.spec.js +227 -0
- package/lib/formatted-text/v1/resolveFormattedTextNodes.spec.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/manifest/v1/v1.d.ts +1 -0
- package/lib/manifest/v1/v1.json +10 -0
- package/package.json +4 -3
- package/src/JsonValidationService.ts +3 -3
- package/src/formatted-text/v1/resolveFormattedTextNodes.spec.ts +246 -0
- package/src/formatted-text/v1/resolveFormattedTextNodes.ts +96 -0
- package/src/index.ts +1 -1
- package/src/manifest/v1/v1.json +10 -0
- package/src/manifest/v1/v1.ts +1 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/lib/formatted-text/v1/higherOrderFormattedTextToBaseFormattedText.d.ts +0 -8
- package/lib/formatted-text/v1/higherOrderFormattedTextToBaseFormattedText.js +0 -21
- package/lib/formatted-text/v1/higherOrderFormattedTextToBaseFormattedText.js.map +0 -1
- package/lib/formatted-text/v1/higherOrderFormattedTextToBaseFormattedText.spec.js +0 -52
- package/lib/formatted-text/v1/higherOrderFormattedTextToBaseFormattedText.spec.js.map +0 -1
- package/src/formatted-text/v1/higherOrderFormattedTextToBaseFormattedText.spec.ts +0 -58
- package/src/formatted-text/v1/higherOrderFormattedTextToBaseFormattedText.ts +0 -36
@@ -1,58 +0,0 @@
|
|
1
|
-
import { FormattedNodes, HigherOrderFormattedNodes } from './formattedText';
|
2
|
-
import {
|
3
|
-
HigherOrderFormattedNodesMap,
|
4
|
-
higherOrderFormattedTextToBaseFormattedText,
|
5
|
-
} from './higherOrderFormattedTextToBaseFormattedText';
|
6
|
-
|
7
|
-
describe('higherOrderFormattedTextToBaseFormattedText', () => {
|
8
|
-
const mockResolvers: HigherOrderFormattedNodesMap = {
|
9
|
-
'link-to-matrix-asset': jest.fn((node: HigherOrderFormattedNodes) => {
|
10
|
-
return Promise.resolve({ type: 'text', value: `Link to asset ${node.matrixAssetId}` });
|
11
|
-
}),
|
12
|
-
'matrix-image': jest.fn((node: HigherOrderFormattedNodes) => {
|
13
|
-
return Promise.resolve({ type: 'text', value: `Image ${node.matrixAssetId}` });
|
14
|
-
}),
|
15
|
-
};
|
16
|
-
|
17
|
-
const testFormattedNodes: FormattedNodes = {
|
18
|
-
tag: 'p',
|
19
|
-
type: 'tag',
|
20
|
-
children: [
|
21
|
-
{ type: 'text', value: 'This is some ' },
|
22
|
-
{
|
23
|
-
type: 'link-to-matrix-asset',
|
24
|
-
matrixIdentifier: 'abc123',
|
25
|
-
matrixDomain: 'example.com',
|
26
|
-
matrixAssetId: '12345',
|
27
|
-
target: '_blank',
|
28
|
-
children: [{ type: 'text', value: 'linked text' }],
|
29
|
-
},
|
30
|
-
{ type: 'text', value: ' with an image ' },
|
31
|
-
{
|
32
|
-
type: 'matrix-image',
|
33
|
-
matrixIdentifier: 'abc123',
|
34
|
-
matrixDomain: 'example.com',
|
35
|
-
matrixAssetId: '54321',
|
36
|
-
},
|
37
|
-
{ type: 'text', value: '.' },
|
38
|
-
],
|
39
|
-
};
|
40
|
-
|
41
|
-
const expectedFormattedNodes: FormattedNodes = {
|
42
|
-
tag: 'p',
|
43
|
-
type: 'tag',
|
44
|
-
children: [
|
45
|
-
{ type: 'text', value: 'This is some ' },
|
46
|
-
{ type: 'text', value: 'Link to asset 12345' },
|
47
|
-
{ type: 'text', value: ' with an image ' },
|
48
|
-
{ type: 'text', value: 'Image 54321' },
|
49
|
-
{ type: 'text', value: '.' },
|
50
|
-
],
|
51
|
-
};
|
52
|
-
|
53
|
-
it('should replace higher order nodes with their resolved counterparts', async () => {
|
54
|
-
const result = await higherOrderFormattedTextToBaseFormattedText(testFormattedNodes, mockResolvers);
|
55
|
-
|
56
|
-
expect(result).toEqual(expectedFormattedNodes);
|
57
|
-
});
|
58
|
-
});
|
@@ -1,36 +0,0 @@
|
|
1
|
-
import { BaseFormattedNodes, FormattedNodes, HigherOrderFormattedNodes } from './formattedText';
|
2
|
-
|
3
|
-
export interface FormattedNodeWithChildren {
|
4
|
-
children: FormattedNodes[];
|
5
|
-
}
|
6
|
-
|
7
|
-
export type HigherOrderFormattedNodesMap = {
|
8
|
-
[key in HigherOrderFormattedNodes['type']]: (node: HigherOrderFormattedNodes) => Promise<BaseFormattedNodes>;
|
9
|
-
};
|
10
|
-
|
11
|
-
export async function higherOrderFormattedTextToBaseFormattedText(
|
12
|
-
node: FormattedNodes,
|
13
|
-
resolvers: HigherOrderFormattedNodesMap,
|
14
|
-
): Promise<FormattedNodes> {
|
15
|
-
if (node.type in resolvers && nodeIsHigherOrder(node)) {
|
16
|
-
return await resolvers[node.type](node);
|
17
|
-
}
|
18
|
-
|
19
|
-
if (hasChildren(node)) {
|
20
|
-
const updatedChildren = await Promise.all(
|
21
|
-
node.children.map((child) => higherOrderFormattedTextToBaseFormattedText(child, resolvers)),
|
22
|
-
);
|
23
|
-
|
24
|
-
return { ...node, children: updatedChildren };
|
25
|
-
}
|
26
|
-
|
27
|
-
return node;
|
28
|
-
}
|
29
|
-
|
30
|
-
function hasChildren(node: any): node is FormattedNodeWithChildren {
|
31
|
-
return node && typeof node == 'object' && 'children' in node && Array.isArray(node.children);
|
32
|
-
}
|
33
|
-
|
34
|
-
function nodeIsHigherOrder(node: FormattedNodes): node is HigherOrderFormattedNodes {
|
35
|
-
return node.type === 'link-to-matrix-asset' || node.type === 'matrix-image';
|
36
|
-
}
|