@player-ui/markdown-plugin 0.3.1--canary.193.5900

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.
@@ -0,0 +1,314 @@
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
+ const isMultiParagraph = children.length > 1;
238
+ if (isMultiParagraph) {
239
+ const value = children.map((node) => {
240
+ const transformer2 = transformers[node.type];
241
+ return transformer2({
242
+ astNode: node,
243
+ asset,
244
+ mappers,
245
+ transformers
246
+ });
247
+ });
248
+ const collection = mappers.collection({
249
+ originalAsset: asset,
250
+ value
251
+ });
252
+ return (parser == null ? void 0 : parser(collection, player.NodeType.Asset)) || null;
253
+ }
254
+ const transformer = transformers[children[0].type];
255
+ const content = transformer({
256
+ astNode: children[0],
257
+ asset,
258
+ mappers,
259
+ transformers
260
+ });
261
+ return (parser == null ? void 0 : parser(content, player.NodeType.Asset)) || null;
262
+ }
263
+
264
+ var __defProp = Object.defineProperty;
265
+ var __defProps = Object.defineProperties;
266
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
267
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
268
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
269
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
270
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
271
+ var __spreadValues = (a, b) => {
272
+ for (var prop in b || (b = {}))
273
+ if (__hasOwnProp.call(b, prop))
274
+ __defNormalProp(a, prop, b[prop]);
275
+ if (__getOwnPropSymbols)
276
+ for (var prop of __getOwnPropSymbols(b)) {
277
+ if (__propIsEnum.call(b, prop))
278
+ __defNormalProp(a, prop, b[prop]);
279
+ }
280
+ return a;
281
+ };
282
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
283
+ class MarkdownPlugin {
284
+ constructor(mappers) {
285
+ this.name = "MarkdownPlugin";
286
+ this.mappers = mappers;
287
+ }
288
+ apply(player$1) {
289
+ player$1.hooks.view.tap(this.name, (view) => {
290
+ view.hooks.resolver.tap(this.name, (resolver) => {
291
+ resolver.hooks.beforeResolve.tap(this.name, (node, options) => {
292
+ if ((node == null ? void 0 : node.type) === player.NodeType.Asset && node.value.type === "markdown") {
293
+ const resolvedContent = player.resolveDataRefsInString(node.value.value, {
294
+ evaluate: options.evaluate,
295
+ model: options.data.model
296
+ });
297
+ const parsed = parseAssetMarkdownContent({
298
+ asset: __spreadProps(__spreadValues({}, node.value), {
299
+ value: resolvedContent
300
+ }),
301
+ mappers: this.mappers,
302
+ parser: options.parseNode
303
+ });
304
+ return parsed;
305
+ }
306
+ return node;
307
+ });
308
+ });
309
+ });
310
+ }
311
+ }
312
+
313
+ exports.MarkdownPlugin = MarkdownPlugin;
314
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1,144 @@
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
+ * required collection Asset to wrap arrays of assets
39
+ */
40
+ collection: CompositeMapper;
41
+ /**
42
+ * strong markdown (e.g. **bold**)
43
+ */
44
+ strong?: CompositeMapper;
45
+ /**
46
+ * emphasis markdown (e.g. *italic*)
47
+ */
48
+ emphasis?: CompositeMapper;
49
+ /**
50
+ * blockquote markdown (e.g. > blockquote)
51
+ */
52
+ blockquote?: CompositeMapper;
53
+ /**
54
+ * ordered or unordered list markdown (e.g. 1. item\n2. item, - item\n- item)
55
+ */
56
+ list?: CompositeMapper<{
57
+ /**
58
+ * Whether the list is ordered or not.
59
+ */
60
+ ordered: boolean;
61
+ /**
62
+ * The starting list number.
63
+ */
64
+ start?: number;
65
+ }>;
66
+ /**
67
+ * horizontalRule markdown (e.g. ---)
68
+ */
69
+ horizontalRule?: LiteralMapper;
70
+ /**
71
+ * link markdown (e.g. `[text](url)`)
72
+ */
73
+ link?: CompositeMapper<{
74
+ /**
75
+ * Link URL
76
+ */
77
+ href: string;
78
+ }>;
79
+ /**
80
+ * image markdown (e.g. `![alt](url)`)
81
+ */
82
+ image?: LiteralMapper<{
83
+ /**
84
+ * Image source URL
85
+ */
86
+ src: string;
87
+ }>;
88
+ /**
89
+ * code block markdown (e.g. ```code```)
90
+ */
91
+ code?: LiteralMapper<{
92
+ /**
93
+ * The language of the code block.
94
+ */
95
+ lang?: string;
96
+ }>;
97
+ /**
98
+ * heading markdown (e.g. # heading)
99
+ */
100
+ heading?: CompositeMapper<{
101
+ /**
102
+ * The heading depth.
103
+ */
104
+ depth: number;
105
+ }>;
106
+ /**
107
+ * inline code markdown (e.g. `code`)
108
+ */
109
+ inlineCode?: LiteralMapper;
110
+ /**
111
+ * list item markdown (e.g. - item)
112
+ */
113
+ listItem?: CompositeMapper;
114
+ }
115
+ declare type Transformer<T = any> = (args: {
116
+ /**
117
+ * AST Node (e.g. Link)
118
+ */
119
+ astNode: T;
120
+ /**
121
+ * Player Asset
122
+ */
123
+ asset: Asset;
124
+ /**
125
+ * Record off mappers (markdown element -> Asset)
126
+ */
127
+ mappers: Mappers;
128
+ /**
129
+ * Record of parsers (e.g., { link :linkParser })
130
+ */
131
+ transformers: Record<string, Transformer>;
132
+ }) => Asset;
133
+
134
+ /**
135
+ * A plugin that parses markdown written into text assets using the given converters for markdown features into existing assets.
136
+ */
137
+ declare class MarkdownPlugin implements PlayerPlugin {
138
+ name: string;
139
+ private mappers;
140
+ constructor(mappers: Mappers);
141
+ apply(player: Player): void;
142
+ }
143
+
144
+ export { BaseArgs, CompositeMapper, FallbackMapper, LiteralMapper, Mappers, MarkdownPlugin, Transformer };