@player-ui/markdown-plugin 0.4.0--canary.143.5197
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/dist/index.cjs.js +302 -0
- package/dist/index.d.ts +140 -0
- package/dist/index.esm.js +298 -0
- package/dist/markdown-plugin.dev.js +26467 -0
- package/dist/markdown-plugin.prod.js +2 -0
- package/package.json +69 -0
- package/src/index.ts +54 -0
- package/src/types.ts +140 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/markdownParser.ts +53 -0
- package/src/utils/transformers.ts +327 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var player = require('@player-ui/player');
|
|
6
|
+
var mdastUtilFromMarkdown = require('mdast-util-from-markdown');
|
|
7
|
+
|
|
8
|
+
var __defProp$1 = Object.defineProperty;
|
|
9
|
+
var __defProps$1 = Object.defineProperties;
|
|
10
|
+
var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
|
|
11
|
+
var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
|
|
12
|
+
var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
|
|
13
|
+
var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
|
|
14
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
15
|
+
var __spreadValues$1 = (a, b) => {
|
|
16
|
+
for (var prop in b || (b = {}))
|
|
17
|
+
if (__hasOwnProp$1.call(b, prop))
|
|
18
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
19
|
+
if (__getOwnPropSymbols$1)
|
|
20
|
+
for (var prop of __getOwnPropSymbols$1(b)) {
|
|
21
|
+
if (__propIsEnum$1.call(b, prop))
|
|
22
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
23
|
+
}
|
|
24
|
+
return a;
|
|
25
|
+
};
|
|
26
|
+
var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
27
|
+
function swapMarkdownType(asset) {
|
|
28
|
+
return __spreadProps$1(__spreadValues$1({}, asset), { type: "text" });
|
|
29
|
+
}
|
|
30
|
+
const textTransformer = ({ astNode, asset, mappers }) => {
|
|
31
|
+
const { value } = astNode;
|
|
32
|
+
return mappers.text({
|
|
33
|
+
originalAsset: asset,
|
|
34
|
+
value
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
const emphasisTransformer = ({
|
|
38
|
+
astNode,
|
|
39
|
+
asset,
|
|
40
|
+
mappers,
|
|
41
|
+
transformers: transformers2
|
|
42
|
+
}) => {
|
|
43
|
+
if (mappers.emphasis) {
|
|
44
|
+
const { children } = astNode;
|
|
45
|
+
const value = children.map((node) => transformers2[node.type]({ astNode: node, asset, mappers, transformers: transformers2 }));
|
|
46
|
+
return mappers.emphasis({
|
|
47
|
+
originalAsset: asset,
|
|
48
|
+
value
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return swapMarkdownType(asset);
|
|
52
|
+
};
|
|
53
|
+
const strongTransformer = ({
|
|
54
|
+
astNode,
|
|
55
|
+
asset,
|
|
56
|
+
mappers,
|
|
57
|
+
transformers: transformers2
|
|
58
|
+
}) => {
|
|
59
|
+
if (mappers.strong) {
|
|
60
|
+
const { children } = astNode;
|
|
61
|
+
const value = children.map((node) => transformers2[node.type]({ astNode: node, asset, mappers, transformers: transformers2 }));
|
|
62
|
+
return mappers.strong({
|
|
63
|
+
originalAsset: asset,
|
|
64
|
+
value
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return swapMarkdownType(asset);
|
|
68
|
+
};
|
|
69
|
+
const paragraphTransformer = ({
|
|
70
|
+
astNode,
|
|
71
|
+
asset,
|
|
72
|
+
mappers,
|
|
73
|
+
transformers: transformers2
|
|
74
|
+
}) => {
|
|
75
|
+
const { children } = astNode;
|
|
76
|
+
if (children.every(({ type }) => Boolean(mappers[type]))) {
|
|
77
|
+
const value = children.map((node) => transformers2[node.type]({ astNode: node, asset, mappers, transformers: transformers2 }));
|
|
78
|
+
return mappers.paragraph({
|
|
79
|
+
originalAsset: asset,
|
|
80
|
+
value
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return swapMarkdownType(asset);
|
|
84
|
+
};
|
|
85
|
+
const listTransformer = ({
|
|
86
|
+
astNode,
|
|
87
|
+
asset,
|
|
88
|
+
mappers,
|
|
89
|
+
transformers: transformers2
|
|
90
|
+
}) => {
|
|
91
|
+
if (mappers.list) {
|
|
92
|
+
const { children, ordered, start } = astNode;
|
|
93
|
+
const value = children.map((node) => transformers2[node.type]({ astNode: node, asset, mappers, transformers: transformers2 }));
|
|
94
|
+
return mappers.list({
|
|
95
|
+
originalAsset: asset,
|
|
96
|
+
value,
|
|
97
|
+
ordered: Boolean(ordered),
|
|
98
|
+
start: start || void 0
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return swapMarkdownType(asset);
|
|
102
|
+
};
|
|
103
|
+
const listItemTransformer = ({
|
|
104
|
+
astNode,
|
|
105
|
+
asset,
|
|
106
|
+
mappers,
|
|
107
|
+
transformers: transformers2
|
|
108
|
+
}) => {
|
|
109
|
+
const { children } = astNode;
|
|
110
|
+
const value = children.map((node) => transformers2[node.type]({ astNode: node, asset, mappers, transformers: transformers2 }));
|
|
111
|
+
const mapper = mappers.listItem || mappers.paragraph;
|
|
112
|
+
return mapper({
|
|
113
|
+
originalAsset: asset,
|
|
114
|
+
value
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
const linkTransformer = ({
|
|
118
|
+
astNode,
|
|
119
|
+
asset,
|
|
120
|
+
mappers,
|
|
121
|
+
transformers: transformers2
|
|
122
|
+
}) => {
|
|
123
|
+
if (mappers.link) {
|
|
124
|
+
const { children, url } = astNode;
|
|
125
|
+
const value = children.map((node) => transformers2[node.type]({ astNode: node, asset, mappers, transformers: transformers2 }));
|
|
126
|
+
return mappers.link({
|
|
127
|
+
originalAsset: asset,
|
|
128
|
+
href: url,
|
|
129
|
+
value
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return swapMarkdownType(asset);
|
|
133
|
+
};
|
|
134
|
+
const imageTransformer = ({ astNode, asset, mappers }) => {
|
|
135
|
+
if (mappers.image) {
|
|
136
|
+
const { title, url, alt } = astNode;
|
|
137
|
+
return mappers.image({
|
|
138
|
+
originalAsset: asset,
|
|
139
|
+
src: url,
|
|
140
|
+
value: title || alt || ""
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return swapMarkdownType(asset);
|
|
144
|
+
};
|
|
145
|
+
const blockquoteTransformer = ({
|
|
146
|
+
astNode,
|
|
147
|
+
asset,
|
|
148
|
+
mappers,
|
|
149
|
+
transformers: transformers2
|
|
150
|
+
}) => {
|
|
151
|
+
if (mappers.blockquote) {
|
|
152
|
+
const { children } = astNode;
|
|
153
|
+
const value = children.map((node) => transformers2[node.type]({ astNode: node, asset, mappers, transformers: transformers2 }));
|
|
154
|
+
return mappers.blockquote({
|
|
155
|
+
originalAsset: asset,
|
|
156
|
+
value
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return swapMarkdownType(asset);
|
|
160
|
+
};
|
|
161
|
+
const inlineCodeTransformer = ({
|
|
162
|
+
astNode,
|
|
163
|
+
asset,
|
|
164
|
+
mappers
|
|
165
|
+
}) => {
|
|
166
|
+
if (mappers.inlineCode) {
|
|
167
|
+
const { value } = astNode;
|
|
168
|
+
return mappers.inlineCode({
|
|
169
|
+
originalAsset: asset,
|
|
170
|
+
value
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return swapMarkdownType(asset);
|
|
174
|
+
};
|
|
175
|
+
const codeTransformer = ({ astNode, asset, mappers }) => {
|
|
176
|
+
if (mappers.code) {
|
|
177
|
+
const { value, lang } = astNode;
|
|
178
|
+
return mappers.code({
|
|
179
|
+
originalAsset: asset,
|
|
180
|
+
value,
|
|
181
|
+
lang: lang || void 0
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return swapMarkdownType(asset);
|
|
185
|
+
};
|
|
186
|
+
const horizontalRuleTransformer = ({
|
|
187
|
+
asset,
|
|
188
|
+
mappers
|
|
189
|
+
}) => {
|
|
190
|
+
if (mappers.horizontalRule) {
|
|
191
|
+
return mappers.horizontalRule({
|
|
192
|
+
originalAsset: asset,
|
|
193
|
+
value: "---"
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
return swapMarkdownType(asset);
|
|
197
|
+
};
|
|
198
|
+
const headingTransformer = ({
|
|
199
|
+
astNode,
|
|
200
|
+
asset,
|
|
201
|
+
mappers,
|
|
202
|
+
transformers: transformers2
|
|
203
|
+
}) => {
|
|
204
|
+
if (mappers.heading) {
|
|
205
|
+
const { children, depth } = astNode;
|
|
206
|
+
const value = children.map((node) => transformers2[node.type]({ astNode: node, asset, mappers, transformers: transformers2 }));
|
|
207
|
+
return mappers.heading({
|
|
208
|
+
originalAsset: asset,
|
|
209
|
+
value,
|
|
210
|
+
depth
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
return swapMarkdownType(asset);
|
|
214
|
+
};
|
|
215
|
+
const transformers = {
|
|
216
|
+
horizontalRule: horizontalRuleTransformer,
|
|
217
|
+
text: textTransformer,
|
|
218
|
+
emphasis: emphasisTransformer,
|
|
219
|
+
strong: strongTransformer,
|
|
220
|
+
blockquote: blockquoteTransformer,
|
|
221
|
+
list: listTransformer,
|
|
222
|
+
listItem: listItemTransformer,
|
|
223
|
+
link: linkTransformer,
|
|
224
|
+
image: imageTransformer,
|
|
225
|
+
paragraph: paragraphTransformer,
|
|
226
|
+
code: codeTransformer,
|
|
227
|
+
heading: headingTransformer,
|
|
228
|
+
inlineCode: inlineCodeTransformer
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
function parseAssetMarkdownContent({
|
|
232
|
+
asset,
|
|
233
|
+
mappers,
|
|
234
|
+
parser
|
|
235
|
+
}) {
|
|
236
|
+
const { children } = mdastUtilFromMarkdown.fromMarkdown(asset.value);
|
|
237
|
+
return children.map((node) => {
|
|
238
|
+
const transformer = transformers[node.type];
|
|
239
|
+
const content = transformer({
|
|
240
|
+
astNode: node,
|
|
241
|
+
asset,
|
|
242
|
+
mappers,
|
|
243
|
+
transformers
|
|
244
|
+
});
|
|
245
|
+
return (parser == null ? void 0 : parser(content, children.length > 1 ? player.NodeType.Value : player.NodeType.Asset)) || null;
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
var __defProp = Object.defineProperty;
|
|
250
|
+
var __defProps = Object.defineProperties;
|
|
251
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
252
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
253
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
254
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
255
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
256
|
+
var __spreadValues = (a, b) => {
|
|
257
|
+
for (var prop in b || (b = {}))
|
|
258
|
+
if (__hasOwnProp.call(b, prop))
|
|
259
|
+
__defNormalProp(a, prop, b[prop]);
|
|
260
|
+
if (__getOwnPropSymbols)
|
|
261
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
262
|
+
if (__propIsEnum.call(b, prop))
|
|
263
|
+
__defNormalProp(a, prop, b[prop]);
|
|
264
|
+
}
|
|
265
|
+
return a;
|
|
266
|
+
};
|
|
267
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
268
|
+
class MarkdownPlugin {
|
|
269
|
+
constructor(mappers) {
|
|
270
|
+
this.name = "MarkdownPlugin";
|
|
271
|
+
this.mappers = mappers;
|
|
272
|
+
}
|
|
273
|
+
apply(player$1) {
|
|
274
|
+
player$1.hooks.view.tap(this.name, (view) => {
|
|
275
|
+
view.hooks.resolver.tap(this.name, (resolver) => {
|
|
276
|
+
resolver.hooks.beforeResolve.tap(this.name, (node, options) => {
|
|
277
|
+
if ((node == null ? void 0 : node.type) === player.NodeType.Asset && node.value.type === "markdown") {
|
|
278
|
+
const resolvedContent = player.resolveDataRefsInString(node.value.value, {
|
|
279
|
+
evaluate: options.evaluate,
|
|
280
|
+
model: options.data.model
|
|
281
|
+
});
|
|
282
|
+
const parsed = parseAssetMarkdownContent({
|
|
283
|
+
asset: __spreadProps(__spreadValues({}, node.value), {
|
|
284
|
+
value: resolvedContent
|
|
285
|
+
}),
|
|
286
|
+
mappers: this.mappers,
|
|
287
|
+
parser: options.parseNode
|
|
288
|
+
});
|
|
289
|
+
if (parsed.length === 1) {
|
|
290
|
+
return parsed[0];
|
|
291
|
+
}
|
|
292
|
+
return __spreadProps(__spreadValues({}, node), { nodeType: player.NodeType.MultiNode, values: parsed });
|
|
293
|
+
}
|
|
294
|
+
return node;
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
exports.MarkdownPlugin = MarkdownPlugin;
|
|
302
|
+
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { PlayerPlugin, Player } from '@player-ui/player';
|
|
2
|
+
import { Asset } from '@player-ui/types';
|
|
3
|
+
|
|
4
|
+
interface BaseArgs {
|
|
5
|
+
/**
|
|
6
|
+
* Unparsed Asset
|
|
7
|
+
*/
|
|
8
|
+
originalAsset: Asset;
|
|
9
|
+
}
|
|
10
|
+
declare type LiteralMapper<T extends object = object> = (args: {
|
|
11
|
+
/**
|
|
12
|
+
* markdown element value
|
|
13
|
+
*/
|
|
14
|
+
value: string;
|
|
15
|
+
} & BaseArgs & T) => Asset;
|
|
16
|
+
declare type CompositeMapper<T extends object = object> = (args: {
|
|
17
|
+
/**
|
|
18
|
+
* array of assets resulted from the recursion over the AST node children
|
|
19
|
+
*/
|
|
20
|
+
value: Asset[];
|
|
21
|
+
} & BaseArgs & T) => Asset;
|
|
22
|
+
declare type FallbackMapper = (args: {
|
|
23
|
+
/**
|
|
24
|
+
* markdown element value
|
|
25
|
+
*/
|
|
26
|
+
value: string | Asset[];
|
|
27
|
+
} & BaseArgs) => Asset;
|
|
28
|
+
interface Mappers {
|
|
29
|
+
/**
|
|
30
|
+
* required text Asset
|
|
31
|
+
*/
|
|
32
|
+
text: LiteralMapper;
|
|
33
|
+
/**
|
|
34
|
+
* required paragraph (composite) Asset
|
|
35
|
+
*/
|
|
36
|
+
paragraph: CompositeMapper;
|
|
37
|
+
/**
|
|
38
|
+
* strong markdown (e.g. **bold**)
|
|
39
|
+
*/
|
|
40
|
+
strong?: CompositeMapper;
|
|
41
|
+
/**
|
|
42
|
+
* emphasis markdown (e.g. *italic*)
|
|
43
|
+
*/
|
|
44
|
+
emphasis?: CompositeMapper;
|
|
45
|
+
/**
|
|
46
|
+
* blockquote markdown (e.g. > blockquote)
|
|
47
|
+
*/
|
|
48
|
+
blockquote?: CompositeMapper;
|
|
49
|
+
/**
|
|
50
|
+
* ordered or unordered list markdown (e.g. 1. item\n2. item, - item\n- item)
|
|
51
|
+
*/
|
|
52
|
+
list?: CompositeMapper<{
|
|
53
|
+
/**
|
|
54
|
+
* Whether the list is ordered or not.
|
|
55
|
+
*/
|
|
56
|
+
ordered: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* The starting list number.
|
|
59
|
+
*/
|
|
60
|
+
start?: number;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* horizontalRule markdown (e.g. ---)
|
|
64
|
+
*/
|
|
65
|
+
horizontalRule?: LiteralMapper;
|
|
66
|
+
/**
|
|
67
|
+
* link markdown (e.g. `[text](url)`)
|
|
68
|
+
*/
|
|
69
|
+
link?: CompositeMapper<{
|
|
70
|
+
/**
|
|
71
|
+
* Link URL
|
|
72
|
+
*/
|
|
73
|
+
href: string;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* image markdown (e.g. ``)
|
|
77
|
+
*/
|
|
78
|
+
image?: LiteralMapper<{
|
|
79
|
+
/**
|
|
80
|
+
* Image source URL
|
|
81
|
+
*/
|
|
82
|
+
src: string;
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* code block markdown (e.g. ```code```)
|
|
86
|
+
*/
|
|
87
|
+
code?: LiteralMapper<{
|
|
88
|
+
/**
|
|
89
|
+
* The language of the code block.
|
|
90
|
+
*/
|
|
91
|
+
lang?: string;
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* heading markdown (e.g. # heading)
|
|
95
|
+
*/
|
|
96
|
+
heading?: CompositeMapper<{
|
|
97
|
+
/**
|
|
98
|
+
* The heading depth.
|
|
99
|
+
*/
|
|
100
|
+
depth: number;
|
|
101
|
+
}>;
|
|
102
|
+
/**
|
|
103
|
+
* inline code markdown (e.g. `code`)
|
|
104
|
+
*/
|
|
105
|
+
inlineCode?: LiteralMapper;
|
|
106
|
+
/**
|
|
107
|
+
* list item markdown (e.g. - item)
|
|
108
|
+
*/
|
|
109
|
+
listItem?: CompositeMapper;
|
|
110
|
+
}
|
|
111
|
+
declare type Transformer<T = any> = (args: {
|
|
112
|
+
/**
|
|
113
|
+
* AST Node (e.g. Link)
|
|
114
|
+
*/
|
|
115
|
+
astNode: T;
|
|
116
|
+
/**
|
|
117
|
+
* Player Asset
|
|
118
|
+
*/
|
|
119
|
+
asset: Asset;
|
|
120
|
+
/**
|
|
121
|
+
* Record off mappers (markdown element -> Asset)
|
|
122
|
+
*/
|
|
123
|
+
mappers: Mappers;
|
|
124
|
+
/**
|
|
125
|
+
* Record of parsers (e.g., { link :linkParser })
|
|
126
|
+
*/
|
|
127
|
+
transformers: Record<string, Transformer>;
|
|
128
|
+
}) => Asset;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* A plugin that parses markdown written into text assets using the given converters for markdown features into existing assets.
|
|
132
|
+
*/
|
|
133
|
+
declare class MarkdownPlugin implements PlayerPlugin {
|
|
134
|
+
name: string;
|
|
135
|
+
private mappers;
|
|
136
|
+
constructor(mappers: Mappers);
|
|
137
|
+
apply(player: Player): void;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export { BaseArgs, CompositeMapper, FallbackMapper, LiteralMapper, Mappers, MarkdownPlugin, Transformer };
|