@welshman/content 0.3.4 → 0.3.6
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.d.ts +2 -195
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -385
- package/dist/index.js.map +1 -1
- package/dist/parser.d.ts +146 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +274 -0
- package/dist/parser.js.map +1 -0
- package/dist/render.d.ts +52 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +114 -0
- package/dist/render.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,196 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
identifier: string;
|
|
4
|
-
pubkey: string;
|
|
5
|
-
kind: number;
|
|
6
|
-
relays?: string[];
|
|
7
|
-
};
|
|
8
|
-
export type EventPointer = {
|
|
9
|
-
id: string;
|
|
10
|
-
relays?: string[];
|
|
11
|
-
author?: string;
|
|
12
|
-
kind?: number;
|
|
13
|
-
};
|
|
14
|
-
export type ProfilePointer = {
|
|
15
|
-
pubkey: string;
|
|
16
|
-
relays?: string[];
|
|
17
|
-
};
|
|
18
|
-
export type ParseContext = {
|
|
19
|
-
results: Parsed[];
|
|
20
|
-
content: string;
|
|
21
|
-
tags: string[][];
|
|
22
|
-
};
|
|
23
|
-
export declare enum ParsedType {
|
|
24
|
-
Address = "address",
|
|
25
|
-
Cashu = "cashu",
|
|
26
|
-
Code = "code",
|
|
27
|
-
Ellipsis = "ellipsis",
|
|
28
|
-
Emoji = "emoji",
|
|
29
|
-
Event = "event",
|
|
30
|
-
Invoice = "invoice",
|
|
31
|
-
Link = "link",
|
|
32
|
-
LinkGrid = "link-grid",
|
|
33
|
-
Newline = "newline",
|
|
34
|
-
Profile = "profile",
|
|
35
|
-
Text = "text",
|
|
36
|
-
Topic = "topic"
|
|
37
|
-
}
|
|
38
|
-
export type ParsedBase = {
|
|
39
|
-
raw: string;
|
|
40
|
-
};
|
|
41
|
-
export type ParsedCashu = ParsedBase & {
|
|
42
|
-
type: ParsedType.Cashu;
|
|
43
|
-
value: string;
|
|
44
|
-
};
|
|
45
|
-
export type ParsedCode = ParsedBase & {
|
|
46
|
-
type: ParsedType.Code;
|
|
47
|
-
value: string;
|
|
48
|
-
};
|
|
49
|
-
export type ParsedEllipsis = ParsedBase & {
|
|
50
|
-
type: ParsedType.Ellipsis;
|
|
51
|
-
value: string;
|
|
52
|
-
};
|
|
53
|
-
export type ParsedEmojiValue = {
|
|
54
|
-
name: string;
|
|
55
|
-
url?: string;
|
|
56
|
-
};
|
|
57
|
-
export type ParsedEmoji = ParsedBase & {
|
|
58
|
-
type: ParsedType.Emoji;
|
|
59
|
-
value: ParsedEmojiValue;
|
|
60
|
-
};
|
|
61
|
-
export type ParsedInvoice = ParsedBase & {
|
|
62
|
-
type: ParsedType.Invoice;
|
|
63
|
-
value: string;
|
|
64
|
-
};
|
|
65
|
-
export type ParsedLinkValue = {
|
|
66
|
-
url: URL;
|
|
67
|
-
meta: Record<string, string>;
|
|
68
|
-
};
|
|
69
|
-
export type ParsedLinkGridValue = {
|
|
70
|
-
links: ParsedLinkValue[];
|
|
71
|
-
};
|
|
72
|
-
export type ParsedLink = ParsedBase & {
|
|
73
|
-
type: ParsedType.Link;
|
|
74
|
-
value: ParsedLinkValue;
|
|
75
|
-
};
|
|
76
|
-
export type ParsedLinkGrid = ParsedBase & {
|
|
77
|
-
type: ParsedType.LinkGrid;
|
|
78
|
-
value: ParsedLinkGridValue;
|
|
79
|
-
};
|
|
80
|
-
export type ParsedNewline = ParsedBase & {
|
|
81
|
-
type: ParsedType.Newline;
|
|
82
|
-
value: string;
|
|
83
|
-
};
|
|
84
|
-
export type ParsedText = ParsedBase & {
|
|
85
|
-
type: ParsedType.Text;
|
|
86
|
-
value: string;
|
|
87
|
-
};
|
|
88
|
-
export type ParsedTopic = ParsedBase & {
|
|
89
|
-
type: ParsedType.Topic;
|
|
90
|
-
value: string;
|
|
91
|
-
};
|
|
92
|
-
export type ParsedEvent = ParsedBase & {
|
|
93
|
-
type: ParsedType.Event;
|
|
94
|
-
value: EventPointer;
|
|
95
|
-
};
|
|
96
|
-
export type ParsedProfile = ParsedBase & {
|
|
97
|
-
type: ParsedType.Profile;
|
|
98
|
-
value: ProfilePointer;
|
|
99
|
-
};
|
|
100
|
-
export type ParsedAddress = ParsedBase & {
|
|
101
|
-
type: ParsedType.Address;
|
|
102
|
-
value: AddressPointer;
|
|
103
|
-
};
|
|
104
|
-
export type Parsed = ParsedAddress | ParsedCashu | ParsedCode | ParsedEllipsis | ParsedEmoji | ParsedEvent | ParsedInvoice | ParsedLink | ParsedLinkGrid | ParsedNewline | ParsedProfile | ParsedText | ParsedTopic;
|
|
105
|
-
export declare const isAddress: (parsed: Parsed) => parsed is ParsedAddress;
|
|
106
|
-
export declare const isCashu: (parsed: Parsed) => parsed is ParsedCashu;
|
|
107
|
-
export declare const isCode: (parsed: Parsed) => parsed is ParsedCode;
|
|
108
|
-
export declare const isEllipsis: (parsed: Parsed) => parsed is ParsedEllipsis;
|
|
109
|
-
export declare const isEmoji: (parsed: Parsed) => parsed is ParsedEmoji;
|
|
110
|
-
export declare const isEvent: (parsed: Parsed) => parsed is ParsedEvent;
|
|
111
|
-
export declare const isInvoice: (parsed: Parsed) => parsed is ParsedInvoice;
|
|
112
|
-
export declare const isLink: (parsed: Parsed) => parsed is ParsedLink;
|
|
113
|
-
export declare const isImage: (parsed: Parsed) => parsed is ParsedLink;
|
|
114
|
-
export declare const isLinkGrid: (parsed: Parsed) => parsed is ParsedLinkGrid;
|
|
115
|
-
export declare const isNewline: (parsed: Parsed) => parsed is ParsedNewline;
|
|
116
|
-
export declare const isProfile: (parsed: Parsed) => parsed is ParsedProfile;
|
|
117
|
-
export declare const isText: (parsed: Parsed) => parsed is ParsedText;
|
|
118
|
-
export declare const isTopic: (parsed: Parsed) => parsed is ParsedTopic;
|
|
119
|
-
export declare const parseAddress: (text: string, context: ParseContext) => ParsedAddress | void;
|
|
120
|
-
export declare const parseCashu: (text: string, context: ParseContext) => ParsedCashu | void;
|
|
121
|
-
export declare const parseCodeBlock: (text: string, context: ParseContext) => ParsedCode | void;
|
|
122
|
-
export declare const parseCodeInline: (text: string, context: ParseContext) => ParsedCode | void;
|
|
123
|
-
export declare const parseEmoji: (text: string, context: ParseContext) => ParsedEmoji | void;
|
|
124
|
-
export declare const parseEvent: (text: string, context: ParseContext) => ParsedEvent | void;
|
|
125
|
-
export declare const parseInvoice: (text: string, context: ParseContext) => ParsedInvoice | void;
|
|
126
|
-
export declare const parseLink: (text: string, context: ParseContext) => ParsedLink | void;
|
|
127
|
-
export declare const parseNewline: (text: string, context: ParseContext) => ParsedNewline | void;
|
|
128
|
-
export declare const parseProfile: (text: string, context: ParseContext) => ParsedProfile | void;
|
|
129
|
-
export declare const parseTopic: (text: string, context: ParseContext) => ParsedTopic | void;
|
|
130
|
-
export declare const parseLegacyMention: (text: string, context: ParseContext) => ParsedProfile | ParsedEvent | void;
|
|
131
|
-
export declare const parsers: (((text: string, context: ParseContext) => ParsedAddress | void) | ((text: string, context: ParseContext) => ParsedCashu | void) | ((text: string, context: ParseContext) => ParsedCode | void) | ((text: string, context: ParseContext) => ParsedEmoji | void) | ((text: string, context: ParseContext) => ParsedInvoice | void) | ((text: string, context: ParseContext) => ParsedLink | void) | ((text: string, context: ParseContext) => ParsedNewline | void) | ((text: string, context: ParseContext) => ParsedTopic | void) | ((text: string, context: ParseContext) => ParsedProfile | ParsedEvent | void))[];
|
|
132
|
-
export declare const parseNext: (raw: string, context: ParseContext) => Parsed | void;
|
|
133
|
-
export declare const parse: ({ content, tags }: {
|
|
134
|
-
content?: string;
|
|
135
|
-
tags?: string[][];
|
|
136
|
-
}) => Parsed[];
|
|
137
|
-
type TruncateOpts = {
|
|
138
|
-
minLength?: number;
|
|
139
|
-
maxLength?: number;
|
|
140
|
-
mediaLength?: number;
|
|
141
|
-
entityLength?: number;
|
|
142
|
-
};
|
|
143
|
-
export declare const truncate: (content: Parsed[], { minLength, maxLength, mediaLength, entityLength }?: TruncateOpts) => Parsed[];
|
|
144
|
-
export declare const reduceLinks: (content: Parsed[]) => Parsed[];
|
|
145
|
-
export declare class Renderer {
|
|
146
|
-
readonly options: RenderOptions;
|
|
147
|
-
private value;
|
|
148
|
-
constructor(options: RenderOptions);
|
|
149
|
-
toString: () => string;
|
|
150
|
-
addText: (value: string) => void;
|
|
151
|
-
addNewlines: (count: number) => void;
|
|
152
|
-
addLink: (href: string, display: string) => void;
|
|
153
|
-
addEntityLink: (entity: string) => void;
|
|
154
|
-
}
|
|
155
|
-
export type RenderOptions = {
|
|
156
|
-
newline: string;
|
|
157
|
-
entityBase: string;
|
|
158
|
-
renderLink: (href: string, display: string) => string;
|
|
159
|
-
renderEntity: (entity: string) => string;
|
|
160
|
-
createElement: (tag: string) => any;
|
|
161
|
-
};
|
|
162
|
-
export declare const textRenderOptions: {
|
|
163
|
-
newline: string;
|
|
164
|
-
entityBase: string;
|
|
165
|
-
createElement: (tag: string) => any;
|
|
166
|
-
renderLink: (href: string, display: string) => string;
|
|
167
|
-
renderEntity: (entity: string) => string;
|
|
168
|
-
};
|
|
169
|
-
export declare const htmlRenderOptions: {
|
|
170
|
-
newline: string;
|
|
171
|
-
entityBase: string;
|
|
172
|
-
createElement: (tag: string) => any;
|
|
173
|
-
renderLink(href: string, display: string): any;
|
|
174
|
-
renderEntity: (entity: string) => string;
|
|
175
|
-
};
|
|
176
|
-
export declare const makeTextRenderer: (options?: Partial<RenderOptions>) => Renderer;
|
|
177
|
-
export declare const makeHtmlRenderer: (options?: Partial<RenderOptions>) => Renderer;
|
|
178
|
-
export declare const renderCashu: (p: ParsedCashu, r: Renderer) => void;
|
|
179
|
-
export declare const renderCode: (p: ParsedCode, r: Renderer) => void;
|
|
180
|
-
export declare const renderEllipsis: (p: ParsedEllipsis, r: Renderer) => void;
|
|
181
|
-
export declare const renderEmoji: (p: ParsedEmoji, r: Renderer) => void;
|
|
182
|
-
export declare const renderInvoice: (p: ParsedInvoice, r: Renderer) => void;
|
|
183
|
-
export declare const renderLink: (p: ParsedLink, r: Renderer) => void;
|
|
184
|
-
export declare const renderNewline: (p: ParsedNewline, r: Renderer) => void;
|
|
185
|
-
export declare const renderText: (p: ParsedText, r: Renderer) => void;
|
|
186
|
-
export declare const renderTopic: (p: ParsedTopic, r: Renderer) => void;
|
|
187
|
-
export declare const renderEvent: (p: ParsedEvent, r: Renderer) => void;
|
|
188
|
-
export declare const renderProfile: (p: ParsedProfile, r: Renderer) => void;
|
|
189
|
-
export declare const renderAddress: (p: ParsedAddress, r: Renderer) => void;
|
|
190
|
-
export declare const renderOne: (parsed: Parsed, renderer: Renderer) => Renderer;
|
|
191
|
-
export declare const renderMany: (parsed: Parsed[], renderer: Renderer) => Renderer;
|
|
192
|
-
export declare const render: (parsed: Parsed | Parsed[], renderer: Renderer) => Renderer;
|
|
193
|
-
export declare const renderAsText: (parsed: Parsed | Parsed[], options?: Partial<RenderOptions>) => Renderer;
|
|
194
|
-
export declare const renderAsHtml: (parsed: Parsed | Parsed[], options?: Partial<RenderOptions>) => Renderer;
|
|
195
|
-
export {};
|
|
1
|
+
export * from "./parser.js";
|
|
2
|
+
export * from "./render.js";
|
|
196
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,386 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const last = (xs, ...args) => xs[xs.length - 1];
|
|
4
|
-
const fromNostrURI = (s) => s.replace(/^nostr:\/?\/?/, "");
|
|
5
|
-
export const urlIsMedia = (url) => Boolean(url.match(/\.(jpe?g|png|wav|mp3|mp4|mov|avi|webm|webp|gif|bmp|svg)$/));
|
|
6
|
-
export var ParsedType;
|
|
7
|
-
(function (ParsedType) {
|
|
8
|
-
ParsedType["Address"] = "address";
|
|
9
|
-
ParsedType["Cashu"] = "cashu";
|
|
10
|
-
ParsedType["Code"] = "code";
|
|
11
|
-
ParsedType["Ellipsis"] = "ellipsis";
|
|
12
|
-
ParsedType["Emoji"] = "emoji";
|
|
13
|
-
ParsedType["Event"] = "event";
|
|
14
|
-
ParsedType["Invoice"] = "invoice";
|
|
15
|
-
ParsedType["Link"] = "link";
|
|
16
|
-
ParsedType["LinkGrid"] = "link-grid";
|
|
17
|
-
ParsedType["Newline"] = "newline";
|
|
18
|
-
ParsedType["Profile"] = "profile";
|
|
19
|
-
ParsedType["Text"] = "text";
|
|
20
|
-
ParsedType["Topic"] = "topic";
|
|
21
|
-
})(ParsedType || (ParsedType = {}));
|
|
22
|
-
// Matchers
|
|
23
|
-
export const isAddress = (parsed) => parsed.type === ParsedType.Address;
|
|
24
|
-
export const isCashu = (parsed) => parsed.type === ParsedType.Cashu;
|
|
25
|
-
export const isCode = (parsed) => parsed.type === ParsedType.Code;
|
|
26
|
-
export const isEllipsis = (parsed) => parsed.type === ParsedType.Ellipsis;
|
|
27
|
-
export const isEmoji = (parsed) => parsed.type === ParsedType.Emoji;
|
|
28
|
-
export const isEvent = (parsed) => parsed.type === ParsedType.Event;
|
|
29
|
-
export const isInvoice = (parsed) => parsed.type === ParsedType.Invoice;
|
|
30
|
-
export const isLink = (parsed) => parsed.type === ParsedType.Link;
|
|
31
|
-
export const isImage = (parsed) => isLink(parsed) && Boolean(parsed.value.url.toString().match(/\.(jpe?g|png|gif|webp)$/));
|
|
32
|
-
export const isLinkGrid = (parsed) => parsed.type === ParsedType.LinkGrid;
|
|
33
|
-
export const isNewline = (parsed) => parsed.type === ParsedType.Newline;
|
|
34
|
-
export const isProfile = (parsed) => parsed.type === ParsedType.Profile;
|
|
35
|
-
export const isText = (parsed) => parsed.type === ParsedType.Text;
|
|
36
|
-
export const isTopic = (parsed) => parsed.type === ParsedType.Topic;
|
|
37
|
-
// Parsers for known formats
|
|
38
|
-
export const parseAddress = (text, context) => {
|
|
39
|
-
const [naddr] = text.match(/^(web\+)?(nostr:)naddr1[\d\w]+/i) || [];
|
|
40
|
-
if (naddr) {
|
|
41
|
-
try {
|
|
42
|
-
const { data } = decode(fromNostrURI(naddr));
|
|
43
|
-
return { type: ParsedType.Address, value: data, raw: naddr };
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
// Pass
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
export const parseCashu = (text, context) => {
|
|
51
|
-
const [value] = text.match(/^cashu:cashu[-\d\w=]{50,5000}/i) || [];
|
|
52
|
-
if (value) {
|
|
53
|
-
return { type: ParsedType.Cashu, value, raw: value };
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
export const parseCodeBlock = (text, context) => {
|
|
57
|
-
const [raw, value] = text.match(/^```([^]*?)```/i) || [];
|
|
58
|
-
if (raw) {
|
|
59
|
-
return { type: ParsedType.Code, value, raw };
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
export const parseCodeInline = (text, context) => {
|
|
63
|
-
const [raw, value] = text.match(/^`(.*?)`/i) || [];
|
|
64
|
-
if (raw) {
|
|
65
|
-
return { type: ParsedType.Code, value, raw };
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
export const parseEmoji = (text, context) => {
|
|
69
|
-
const [raw, name] = text.match(/^:(\w+):/i) || [];
|
|
70
|
-
if (raw) {
|
|
71
|
-
const url = context.tags.find(t => t[0] === "emoji" && t[1] === name)?.[2];
|
|
72
|
-
return { type: ParsedType.Emoji, value: { name, url }, raw };
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
export const parseEvent = (text, context) => {
|
|
76
|
-
const [entity] = text.match(/^(web\+)?(nostr:)n(event|ote)1[\d\w]+/i) || [];
|
|
77
|
-
if (entity) {
|
|
78
|
-
try {
|
|
79
|
-
const { type, data } = decode(fromNostrURI(entity));
|
|
80
|
-
const value = type === "note" ? { id: data, relays: [] } : data;
|
|
81
|
-
return { type: ParsedType.Event, value, raw: entity };
|
|
82
|
-
}
|
|
83
|
-
catch (e) {
|
|
84
|
-
// Pass
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
export const parseInvoice = (text, context) => {
|
|
89
|
-
const [raw, _, value] = text.match(/^(lightning:)(ln(bc|url)[0-9a-z]{10,})/i) || [];
|
|
90
|
-
if (raw && value) {
|
|
91
|
-
return { type: ParsedType.Invoice, value, raw };
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
export const parseLink = (text, context) => {
|
|
95
|
-
const prev = last(context.results);
|
|
96
|
-
const link = text.match(/^([a-z\+:]{2,30}:\/\/)?[-\.~\w]+\.[\w]{2,6}([^\s]*[^<>"'\.!,:\s\)\(]+)?/gi)?.[0];
|
|
97
|
-
// Skip url if it's just the end of a filepath or an ellipse
|
|
98
|
-
if (!link || (prev?.type === ParsedType.Text && prev.value.endsWith("/")) || link.match(/\.\./)) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
// Skip it if it looks like an IP address but doesn't have a protocol
|
|
102
|
-
if (link.match(/\d+\.\d+/) && !link.includes("://")) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
// Parse using URL, make sure there's a protocol
|
|
106
|
-
let url;
|
|
107
|
-
try {
|
|
108
|
-
url = new URL(link.match(/^\w+:\/\//) ? link : "https://" + link);
|
|
109
|
-
}
|
|
110
|
-
catch (e) {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const meta = Object.fromEntries(new URLSearchParams(url.hash.slice(1)).entries());
|
|
114
|
-
for (const tag of context.tags) {
|
|
115
|
-
if (tag[0] === "imeta" && tag.find(t => t.includes(`url ${link}`))) {
|
|
116
|
-
Object.assign(meta, Object.fromEntries(tag.slice(1).map((m) => m.split(" "))));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return { type: ParsedType.Link, value: { url, meta }, raw: link };
|
|
120
|
-
};
|
|
121
|
-
export const parseNewline = (text, context) => {
|
|
122
|
-
const [value] = text.match(/^\n+/) || [];
|
|
123
|
-
if (value) {
|
|
124
|
-
return { type: ParsedType.Newline, value, raw: value };
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
export const parseProfile = (text, context) => {
|
|
128
|
-
const [entity] = text.match(/^@?(web\+)?(nostr:)n(profile|pub)1[\d\w]+/i) || [];
|
|
129
|
-
if (entity) {
|
|
130
|
-
try {
|
|
131
|
-
const { type, data } = decode(fromNostrURI(entity.replace("@", "")));
|
|
132
|
-
const value = type === "npub" ? { pubkey: data, relays: [] } : data;
|
|
133
|
-
return { type: ParsedType.Profile, value, raw: entity };
|
|
134
|
-
}
|
|
135
|
-
catch (e) {
|
|
136
|
-
// Pass
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
export const parseTopic = (text, context) => {
|
|
141
|
-
const [value] = text.match(/^#[^\s!\"#$%&'()*+,-.\/:;<=>?@[\\\]^_`{|}~]+/i) || [];
|
|
142
|
-
// Skip numeric topics
|
|
143
|
-
if (value && !value.match(/^#\d+$/)) {
|
|
144
|
-
return { type: ParsedType.Topic, value: value.slice(1), raw: value };
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
// Parse other formats to known types
|
|
148
|
-
export const parseLegacyMention = (text, context) => {
|
|
149
|
-
const mentionMatch = text.match(/^#\[(\d+)\]/i) || [];
|
|
150
|
-
if (mentionMatch) {
|
|
151
|
-
const [tag, value, url] = context.tags[parseInt(mentionMatch[1])] || [];
|
|
152
|
-
const relays = url ? [url] : [];
|
|
153
|
-
if (tag === "p") {
|
|
154
|
-
return { type: ParsedType.Profile, value: { pubkey: value, relays }, raw: mentionMatch[0] };
|
|
155
|
-
}
|
|
156
|
-
if (tag === "e") {
|
|
157
|
-
return { type: ParsedType.Event, value: { id: value, relays }, raw: mentionMatch[0] };
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
export const parsers = [
|
|
162
|
-
parseNewline,
|
|
163
|
-
parseLegacyMention,
|
|
164
|
-
parseTopic,
|
|
165
|
-
parseCodeBlock,
|
|
166
|
-
parseCodeInline,
|
|
167
|
-
parseAddress,
|
|
168
|
-
parseProfile,
|
|
169
|
-
parseEmoji,
|
|
170
|
-
parseEvent,
|
|
171
|
-
parseCashu,
|
|
172
|
-
parseInvoice,
|
|
173
|
-
parseLink,
|
|
174
|
-
];
|
|
175
|
-
export const parseNext = (raw, context) => {
|
|
176
|
-
for (const parser of parsers) {
|
|
177
|
-
const result = parser(raw, context);
|
|
178
|
-
if (result) {
|
|
179
|
-
return result;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
// Main exports
|
|
184
|
-
export const parse = ({ content = "", tags = [] }) => {
|
|
185
|
-
const context = { content, tags, results: [] };
|
|
186
|
-
let buffer = "";
|
|
187
|
-
let remaining = content.trim() || tags.find(t => t[0] === "alt")?.[1] || "";
|
|
188
|
-
while (remaining) {
|
|
189
|
-
const parsed = parseNext(remaining, context);
|
|
190
|
-
if (parsed) {
|
|
191
|
-
if (buffer) {
|
|
192
|
-
context.results.push({ type: ParsedType.Text, value: buffer, raw: buffer });
|
|
193
|
-
buffer = "";
|
|
194
|
-
}
|
|
195
|
-
context.results.push(parsed);
|
|
196
|
-
remaining = remaining.slice(parsed.raw.length);
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
// Instead of going character by character and re-running all the above regular expressions
|
|
200
|
-
// a million times, try to match the next word and add it to the buffer
|
|
201
|
-
const [match] = remaining.match(/^[\w\d]+ ?/i) || remaining[0];
|
|
202
|
-
buffer += match;
|
|
203
|
-
remaining = remaining.slice(match.length);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
if (buffer) {
|
|
207
|
-
context.results.push({ type: ParsedType.Text, value: buffer, raw: buffer });
|
|
208
|
-
}
|
|
209
|
-
return context.results;
|
|
210
|
-
};
|
|
211
|
-
export const truncate = (content, { minLength = 500, maxLength = 700, mediaLength = 200, entityLength = 30 } = {}) => {
|
|
212
|
-
// Get a list of content sizes so we know where to truncate
|
|
213
|
-
// Non-plaintext things might take up more or less room if rendered
|
|
214
|
-
const sizes = content.map((parsed) => {
|
|
215
|
-
switch (parsed.type) {
|
|
216
|
-
case ParsedType.Link:
|
|
217
|
-
case ParsedType.LinkGrid:
|
|
218
|
-
case ParsedType.Cashu:
|
|
219
|
-
case ParsedType.Invoice:
|
|
220
|
-
return mediaLength;
|
|
221
|
-
case ParsedType.Event:
|
|
222
|
-
case ParsedType.Address:
|
|
223
|
-
case ParsedType.Profile:
|
|
224
|
-
return entityLength;
|
|
225
|
-
case ParsedType.Emoji:
|
|
226
|
-
return parsed.value.name.length;
|
|
227
|
-
default:
|
|
228
|
-
return parsed.value.length;
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
// If total size fits inside our max, we're done
|
|
232
|
-
if (sizes.reduce((r, x) => r + x, 0) < maxLength) {
|
|
233
|
-
return content;
|
|
234
|
-
}
|
|
235
|
-
let currentSize = 0;
|
|
236
|
-
// Otherwise, truncate more then necessary so that when the user expands the note
|
|
237
|
-
// they have more than just a tiny bit to look at. Truncating a single word is annoying.
|
|
238
|
-
sizes.every((size, i) => {
|
|
239
|
-
currentSize += size;
|
|
240
|
-
if (currentSize > minLength) {
|
|
241
|
-
content = content
|
|
242
|
-
.slice(0, Math.max(1, i + 1))
|
|
243
|
-
.concat({ type: ParsedType.Ellipsis, value: "…", raw: "" });
|
|
244
|
-
return false;
|
|
245
|
-
}
|
|
246
|
-
return true;
|
|
247
|
-
});
|
|
248
|
-
return content;
|
|
249
|
-
};
|
|
250
|
-
export const reduceLinks = (content) => {
|
|
251
|
-
const result = [];
|
|
252
|
-
const buffer = [];
|
|
253
|
-
for (const parsed of content) {
|
|
254
|
-
const prev = last(result);
|
|
255
|
-
// If we have a link and we're in our own block, start a grid
|
|
256
|
-
if (isLink(parsed) && (!prev || isNewline(prev))) {
|
|
257
|
-
buffer.push(parsed.value);
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
// Ignore newlines and empty space if we're building a grid
|
|
261
|
-
if (isNewline(parsed) && buffer.length > 0)
|
|
262
|
-
continue;
|
|
263
|
-
if (isText(parsed) && !parsed.value.trim() && buffer.length > 0)
|
|
264
|
-
continue;
|
|
265
|
-
if (buffer.length > 0) {
|
|
266
|
-
result.push({ type: ParsedType.LinkGrid, value: { links: buffer.splice(0) }, raw: "" });
|
|
267
|
-
}
|
|
268
|
-
result.push(parsed);
|
|
269
|
-
}
|
|
270
|
-
if (buffer.length > 0) {
|
|
271
|
-
result.push({ type: ParsedType.LinkGrid, value: { links: buffer.splice(0) }, raw: "" });
|
|
272
|
-
}
|
|
273
|
-
return result;
|
|
274
|
-
};
|
|
275
|
-
// Renderer
|
|
276
|
-
export class Renderer {
|
|
277
|
-
options;
|
|
278
|
-
value = "";
|
|
279
|
-
constructor(options) {
|
|
280
|
-
this.options = options;
|
|
281
|
-
}
|
|
282
|
-
toString = () => this.value;
|
|
283
|
-
addText = (value) => {
|
|
284
|
-
const element = this.options.createElement("div");
|
|
285
|
-
element.innerText = value;
|
|
286
|
-
this.value += element.innerHTML;
|
|
287
|
-
};
|
|
288
|
-
addNewlines = (count) => {
|
|
289
|
-
for (let i = 0; i < count; i++) {
|
|
290
|
-
this.value += this.options.newline;
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
addLink = (href, display) => {
|
|
294
|
-
this.value += this.options.renderLink(href, display);
|
|
295
|
-
};
|
|
296
|
-
addEntityLink = (entity) => {
|
|
297
|
-
this.addLink(this.options.entityBase + entity, this.options.renderEntity(entity));
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
const createElement = (tag) => document.createElement(tag);
|
|
301
|
-
export const textRenderOptions = {
|
|
302
|
-
newline: "\n",
|
|
303
|
-
entityBase: "",
|
|
304
|
-
createElement,
|
|
305
|
-
renderLink: (href, display) => href,
|
|
306
|
-
renderEntity: (entity) => entity.slice(0, 16) + "…",
|
|
307
|
-
};
|
|
308
|
-
export const htmlRenderOptions = {
|
|
309
|
-
newline: "\n",
|
|
310
|
-
entityBase: "https://njump.me/",
|
|
311
|
-
createElement,
|
|
312
|
-
renderLink(href, display) {
|
|
313
|
-
const element = this.createElement("a");
|
|
314
|
-
element.href = sanitizeUrl(href);
|
|
315
|
-
element.target = "_blank";
|
|
316
|
-
element.innerText = display;
|
|
317
|
-
return element.outerHTML;
|
|
318
|
-
},
|
|
319
|
-
renderEntity: (entity) => entity.slice(0, 16) + "…",
|
|
320
|
-
};
|
|
321
|
-
export const makeTextRenderer = (options = {}) => new Renderer({ ...textRenderOptions, ...options });
|
|
322
|
-
export const makeHtmlRenderer = (options = {}) => new Renderer({ ...htmlRenderOptions, ...options });
|
|
323
|
-
// Top level render methods
|
|
324
|
-
export const renderCashu = (p, r) => r.addText(p.value);
|
|
325
|
-
export const renderCode = (p, r) => r.addText(p.value);
|
|
326
|
-
export const renderEllipsis = (p, r) => r.addText("…");
|
|
327
|
-
export const renderEmoji = (p, r) => r.addText(p.raw);
|
|
328
|
-
export const renderInvoice = (p, r) => r.addLink("lightning:" + p.value, p.value.slice(0, 16) + "…");
|
|
329
|
-
export const renderLink = (p, r) => r.addLink(p.value.url.toString(), p.value.url.host + p.value.url.pathname);
|
|
330
|
-
export const renderNewline = (p, r) => r.addNewlines(Array.from(p.value).length);
|
|
331
|
-
export const renderText = (p, r) => r.addText(p.value);
|
|
332
|
-
export const renderTopic = (p, r) => r.addText(p.value);
|
|
333
|
-
export const renderEvent = (p, r) => r.addEntityLink(neventEncode(p.value));
|
|
334
|
-
export const renderProfile = (p, r) => r.addEntityLink(nprofileEncode(p.value));
|
|
335
|
-
export const renderAddress = (p, r) => r.addEntityLink(naddrEncode(p.value));
|
|
336
|
-
export const renderOne = (parsed, renderer) => {
|
|
337
|
-
switch (parsed.type) {
|
|
338
|
-
case ParsedType.Address:
|
|
339
|
-
renderAddress(parsed, renderer);
|
|
340
|
-
break;
|
|
341
|
-
case ParsedType.Cashu:
|
|
342
|
-
renderCashu(parsed, renderer);
|
|
343
|
-
break;
|
|
344
|
-
case ParsedType.Code:
|
|
345
|
-
renderCode(parsed, renderer);
|
|
346
|
-
break;
|
|
347
|
-
case ParsedType.Ellipsis:
|
|
348
|
-
renderEllipsis(parsed, renderer);
|
|
349
|
-
break;
|
|
350
|
-
case ParsedType.Emoji:
|
|
351
|
-
renderEmoji(parsed, renderer);
|
|
352
|
-
break;
|
|
353
|
-
case ParsedType.Event:
|
|
354
|
-
renderEvent(parsed, renderer);
|
|
355
|
-
break;
|
|
356
|
-
case ParsedType.Invoice:
|
|
357
|
-
renderInvoice(parsed, renderer);
|
|
358
|
-
break;
|
|
359
|
-
case ParsedType.Link:
|
|
360
|
-
renderLink(parsed, renderer);
|
|
361
|
-
break;
|
|
362
|
-
case ParsedType.Newline:
|
|
363
|
-
renderNewline(parsed, renderer);
|
|
364
|
-
break;
|
|
365
|
-
case ParsedType.Profile:
|
|
366
|
-
renderProfile(parsed, renderer);
|
|
367
|
-
break;
|
|
368
|
-
case ParsedType.Text:
|
|
369
|
-
renderText(parsed, renderer);
|
|
370
|
-
break;
|
|
371
|
-
case ParsedType.Topic:
|
|
372
|
-
renderTopic(parsed, renderer);
|
|
373
|
-
break;
|
|
374
|
-
}
|
|
375
|
-
return renderer;
|
|
376
|
-
};
|
|
377
|
-
export const renderMany = (parsed, renderer) => {
|
|
378
|
-
for (const p of parsed) {
|
|
379
|
-
renderOne(p, renderer);
|
|
380
|
-
}
|
|
381
|
-
return renderer;
|
|
382
|
-
};
|
|
383
|
-
export const render = (parsed, renderer) => Array.isArray(parsed) ? renderMany(parsed, renderer) : renderOne(parsed, renderer);
|
|
384
|
-
export const renderAsText = (parsed, options = {}) => render(parsed, makeTextRenderer(options));
|
|
385
|
-
export const renderAsHtml = (parsed, options = {}) => render(parsed, makeHtmlRenderer(options));
|
|
1
|
+
export * from "./parser.js";
|
|
2
|
+
export * from "./render.js";
|
|
386
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
|
package/dist/parser.d.ts
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
export declare const urlIsMedia: (url: string) => boolean;
|
|
2
|
+
export type AddressPointer = {
|
|
3
|
+
identifier: string;
|
|
4
|
+
pubkey: string;
|
|
5
|
+
kind: number;
|
|
6
|
+
relays?: string[];
|
|
7
|
+
};
|
|
8
|
+
export type EventPointer = {
|
|
9
|
+
id: string;
|
|
10
|
+
relays?: string[];
|
|
11
|
+
author?: string;
|
|
12
|
+
kind?: number;
|
|
13
|
+
};
|
|
14
|
+
export type ProfilePointer = {
|
|
15
|
+
pubkey: string;
|
|
16
|
+
relays?: string[];
|
|
17
|
+
};
|
|
18
|
+
export type ParseContext = {
|
|
19
|
+
results: Parsed[];
|
|
20
|
+
content: string;
|
|
21
|
+
tags: string[][];
|
|
22
|
+
};
|
|
23
|
+
export declare enum ParsedType {
|
|
24
|
+
Address = "address",
|
|
25
|
+
Cashu = "cashu",
|
|
26
|
+
Code = "code",
|
|
27
|
+
Ellipsis = "ellipsis",
|
|
28
|
+
Emoji = "emoji",
|
|
29
|
+
Event = "event",
|
|
30
|
+
Invoice = "invoice",
|
|
31
|
+
Link = "link",
|
|
32
|
+
LinkGrid = "link-grid",
|
|
33
|
+
Newline = "newline",
|
|
34
|
+
Profile = "profile",
|
|
35
|
+
Text = "text",
|
|
36
|
+
Topic = "topic"
|
|
37
|
+
}
|
|
38
|
+
export type ParsedBase = {
|
|
39
|
+
raw: string;
|
|
40
|
+
};
|
|
41
|
+
export type ParsedCashu = ParsedBase & {
|
|
42
|
+
type: ParsedType.Cashu;
|
|
43
|
+
value: string;
|
|
44
|
+
};
|
|
45
|
+
export type ParsedCode = ParsedBase & {
|
|
46
|
+
type: ParsedType.Code;
|
|
47
|
+
value: string;
|
|
48
|
+
};
|
|
49
|
+
export type ParsedEllipsis = ParsedBase & {
|
|
50
|
+
type: ParsedType.Ellipsis;
|
|
51
|
+
value: string;
|
|
52
|
+
};
|
|
53
|
+
export type ParsedEmojiValue = {
|
|
54
|
+
name: string;
|
|
55
|
+
url?: string;
|
|
56
|
+
};
|
|
57
|
+
export type ParsedEmoji = ParsedBase & {
|
|
58
|
+
type: ParsedType.Emoji;
|
|
59
|
+
value: ParsedEmojiValue;
|
|
60
|
+
};
|
|
61
|
+
export type ParsedInvoice = ParsedBase & {
|
|
62
|
+
type: ParsedType.Invoice;
|
|
63
|
+
value: string;
|
|
64
|
+
};
|
|
65
|
+
export type ParsedLinkValue = {
|
|
66
|
+
url: URL;
|
|
67
|
+
meta: Record<string, string>;
|
|
68
|
+
};
|
|
69
|
+
export type ParsedLinkGridValue = {
|
|
70
|
+
links: ParsedLinkValue[];
|
|
71
|
+
};
|
|
72
|
+
export type ParsedLink = ParsedBase & {
|
|
73
|
+
type: ParsedType.Link;
|
|
74
|
+
value: ParsedLinkValue;
|
|
75
|
+
};
|
|
76
|
+
export type ParsedLinkGrid = ParsedBase & {
|
|
77
|
+
type: ParsedType.LinkGrid;
|
|
78
|
+
value: ParsedLinkGridValue;
|
|
79
|
+
};
|
|
80
|
+
export type ParsedNewline = ParsedBase & {
|
|
81
|
+
type: ParsedType.Newline;
|
|
82
|
+
value: string;
|
|
83
|
+
};
|
|
84
|
+
export type ParsedText = ParsedBase & {
|
|
85
|
+
type: ParsedType.Text;
|
|
86
|
+
value: string;
|
|
87
|
+
};
|
|
88
|
+
export type ParsedTopic = ParsedBase & {
|
|
89
|
+
type: ParsedType.Topic;
|
|
90
|
+
value: string;
|
|
91
|
+
};
|
|
92
|
+
export type ParsedEvent = ParsedBase & {
|
|
93
|
+
type: ParsedType.Event;
|
|
94
|
+
value: EventPointer;
|
|
95
|
+
};
|
|
96
|
+
export type ParsedProfile = ParsedBase & {
|
|
97
|
+
type: ParsedType.Profile;
|
|
98
|
+
value: ProfilePointer;
|
|
99
|
+
};
|
|
100
|
+
export type ParsedAddress = ParsedBase & {
|
|
101
|
+
type: ParsedType.Address;
|
|
102
|
+
value: AddressPointer;
|
|
103
|
+
};
|
|
104
|
+
export type Parsed = ParsedAddress | ParsedCashu | ParsedCode | ParsedEllipsis | ParsedEmoji | ParsedEvent | ParsedInvoice | ParsedLink | ParsedLinkGrid | ParsedNewline | ParsedProfile | ParsedText | ParsedTopic;
|
|
105
|
+
export declare const isAddress: (parsed: Parsed) => parsed is ParsedAddress;
|
|
106
|
+
export declare const isCashu: (parsed: Parsed) => parsed is ParsedCashu;
|
|
107
|
+
export declare const isCode: (parsed: Parsed) => parsed is ParsedCode;
|
|
108
|
+
export declare const isEllipsis: (parsed: Parsed) => parsed is ParsedEllipsis;
|
|
109
|
+
export declare const isEmoji: (parsed: Parsed) => parsed is ParsedEmoji;
|
|
110
|
+
export declare const isEvent: (parsed: Parsed) => parsed is ParsedEvent;
|
|
111
|
+
export declare const isInvoice: (parsed: Parsed) => parsed is ParsedInvoice;
|
|
112
|
+
export declare const isLink: (parsed: Parsed) => parsed is ParsedLink;
|
|
113
|
+
export declare const isImage: (parsed: Parsed) => parsed is ParsedLink;
|
|
114
|
+
export declare const isLinkGrid: (parsed: Parsed) => parsed is ParsedLinkGrid;
|
|
115
|
+
export declare const isNewline: (parsed: Parsed) => parsed is ParsedNewline;
|
|
116
|
+
export declare const isProfile: (parsed: Parsed) => parsed is ParsedProfile;
|
|
117
|
+
export declare const isText: (parsed: Parsed) => parsed is ParsedText;
|
|
118
|
+
export declare const isTopic: (parsed: Parsed) => parsed is ParsedTopic;
|
|
119
|
+
export declare const parseAddress: (text: string, context: ParseContext) => ParsedAddress | void;
|
|
120
|
+
export declare const parseCashu: (text: string, context: ParseContext) => ParsedCashu | void;
|
|
121
|
+
export declare const parseCodeBlock: (text: string, context: ParseContext) => ParsedCode | void;
|
|
122
|
+
export declare const parseCodeInline: (text: string, context: ParseContext) => ParsedCode | void;
|
|
123
|
+
export declare const parseEmoji: (text: string, context: ParseContext) => ParsedEmoji | void;
|
|
124
|
+
export declare const parseEvent: (text: string, context: ParseContext) => ParsedEvent | void;
|
|
125
|
+
export declare const parseInvoice: (text: string, context: ParseContext) => ParsedInvoice | void;
|
|
126
|
+
export declare const parseLink: (text: string, context: ParseContext) => ParsedLink | void;
|
|
127
|
+
export declare const parseNewline: (text: string, context: ParseContext) => ParsedNewline | void;
|
|
128
|
+
export declare const parseProfile: (text: string, context: ParseContext) => ParsedProfile | void;
|
|
129
|
+
export declare const parseTopic: (text: string, context: ParseContext) => ParsedTopic | void;
|
|
130
|
+
export declare const parseLegacyMention: (text: string, context: ParseContext) => ParsedProfile | ParsedEvent | void;
|
|
131
|
+
export declare const parsers: (((text: string, context: ParseContext) => ParsedAddress | void) | ((text: string, context: ParseContext) => ParsedCashu | void) | ((text: string, context: ParseContext) => ParsedCode | void) | ((text: string, context: ParseContext) => ParsedEmoji | void) | ((text: string, context: ParseContext) => ParsedInvoice | void) | ((text: string, context: ParseContext) => ParsedLink | void) | ((text: string, context: ParseContext) => ParsedNewline | void) | ((text: string, context: ParseContext) => ParsedTopic | void) | ((text: string, context: ParseContext) => ParsedProfile | ParsedEvent | void))[];
|
|
132
|
+
export declare const parseNext: (raw: string, context: ParseContext) => Parsed | void;
|
|
133
|
+
export declare const parse: ({ content, tags }: {
|
|
134
|
+
content?: string;
|
|
135
|
+
tags?: string[][];
|
|
136
|
+
}) => Parsed[];
|
|
137
|
+
type TruncateOpts = {
|
|
138
|
+
minLength?: number;
|
|
139
|
+
maxLength?: number;
|
|
140
|
+
mediaLength?: number;
|
|
141
|
+
entityLength?: number;
|
|
142
|
+
};
|
|
143
|
+
export declare const truncate: (content: Parsed[], { minLength, maxLength, mediaLength, entityLength }?: TruncateOpts) => Parsed[];
|
|
144
|
+
export declare const reduceLinks: (content: Parsed[]) => Parsed[];
|
|
145
|
+
export {};
|
|
146
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.js
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { decode } from "nostr-tools/nip19";
|
|
2
|
+
const last = (xs, ...args) => xs[xs.length - 1];
|
|
3
|
+
const fromNostrURI = (s) => s.replace(/^nostr:\/?\/?/, "");
|
|
4
|
+
export const urlIsMedia = (url) => Boolean(url.match(/\.(jpe?g|png|wav|mp3|mp4|mov|avi|webm|webp|gif|bmp|svg)$/));
|
|
5
|
+
export var ParsedType;
|
|
6
|
+
(function (ParsedType) {
|
|
7
|
+
ParsedType["Address"] = "address";
|
|
8
|
+
ParsedType["Cashu"] = "cashu";
|
|
9
|
+
ParsedType["Code"] = "code";
|
|
10
|
+
ParsedType["Ellipsis"] = "ellipsis";
|
|
11
|
+
ParsedType["Emoji"] = "emoji";
|
|
12
|
+
ParsedType["Event"] = "event";
|
|
13
|
+
ParsedType["Invoice"] = "invoice";
|
|
14
|
+
ParsedType["Link"] = "link";
|
|
15
|
+
ParsedType["LinkGrid"] = "link-grid";
|
|
16
|
+
ParsedType["Newline"] = "newline";
|
|
17
|
+
ParsedType["Profile"] = "profile";
|
|
18
|
+
ParsedType["Text"] = "text";
|
|
19
|
+
ParsedType["Topic"] = "topic";
|
|
20
|
+
})(ParsedType || (ParsedType = {}));
|
|
21
|
+
// Matchers
|
|
22
|
+
export const isAddress = (parsed) => parsed.type === ParsedType.Address;
|
|
23
|
+
export const isCashu = (parsed) => parsed.type === ParsedType.Cashu;
|
|
24
|
+
export const isCode = (parsed) => parsed.type === ParsedType.Code;
|
|
25
|
+
export const isEllipsis = (parsed) => parsed.type === ParsedType.Ellipsis;
|
|
26
|
+
export const isEmoji = (parsed) => parsed.type === ParsedType.Emoji;
|
|
27
|
+
export const isEvent = (parsed) => parsed.type === ParsedType.Event;
|
|
28
|
+
export const isInvoice = (parsed) => parsed.type === ParsedType.Invoice;
|
|
29
|
+
export const isLink = (parsed) => parsed.type === ParsedType.Link;
|
|
30
|
+
export const isImage = (parsed) => isLink(parsed) && Boolean(parsed.value.url.toString().match(/\.(jpe?g|png|gif|webp)$/));
|
|
31
|
+
export const isLinkGrid = (parsed) => parsed.type === ParsedType.LinkGrid;
|
|
32
|
+
export const isNewline = (parsed) => parsed.type === ParsedType.Newline;
|
|
33
|
+
export const isProfile = (parsed) => parsed.type === ParsedType.Profile;
|
|
34
|
+
export const isText = (parsed) => parsed.type === ParsedType.Text;
|
|
35
|
+
export const isTopic = (parsed) => parsed.type === ParsedType.Topic;
|
|
36
|
+
// Parsers for known formats
|
|
37
|
+
export const parseAddress = (text, context) => {
|
|
38
|
+
const [naddr] = text.match(/^(web\+)?(nostr:)naddr1[\d\w]+/i) || [];
|
|
39
|
+
if (naddr) {
|
|
40
|
+
try {
|
|
41
|
+
const { data } = decode(fromNostrURI(naddr));
|
|
42
|
+
return { type: ParsedType.Address, value: data, raw: naddr };
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
// Pass
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
export const parseCashu = (text, context) => {
|
|
50
|
+
const [value] = text.match(/^cashu:cashu[-\d\w=]{50,5000}/i) || [];
|
|
51
|
+
if (value) {
|
|
52
|
+
return { type: ParsedType.Cashu, value, raw: value };
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
export const parseCodeBlock = (text, context) => {
|
|
56
|
+
const [raw, value] = text.match(/^```([^]*?)```/i) || [];
|
|
57
|
+
if (raw) {
|
|
58
|
+
return { type: ParsedType.Code, value, raw };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
export const parseCodeInline = (text, context) => {
|
|
62
|
+
const [raw, value] = text.match(/^`(.*?)`/i) || [];
|
|
63
|
+
if (raw) {
|
|
64
|
+
return { type: ParsedType.Code, value, raw };
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export const parseEmoji = (text, context) => {
|
|
68
|
+
const [raw, name] = text.match(/^:(\w+):/i) || [];
|
|
69
|
+
if (raw) {
|
|
70
|
+
const url = context.tags.find(t => t[0] === "emoji" && t[1] === name)?.[2];
|
|
71
|
+
return { type: ParsedType.Emoji, value: { name, url }, raw };
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
export const parseEvent = (text, context) => {
|
|
75
|
+
const [entity] = text.match(/^(web\+)?(nostr:)n(event|ote)1[\d\w]+/i) || [];
|
|
76
|
+
if (entity) {
|
|
77
|
+
try {
|
|
78
|
+
const { type, data } = decode(fromNostrURI(entity));
|
|
79
|
+
const value = type === "note" ? { id: data, relays: [] } : data;
|
|
80
|
+
return { type: ParsedType.Event, value, raw: entity };
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
// Pass
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
export const parseInvoice = (text, context) => {
|
|
88
|
+
const [raw, _, value] = text.match(/^(lightning:)(ln(bc|url)[0-9a-z]{10,})/i) || [];
|
|
89
|
+
if (raw && value) {
|
|
90
|
+
return { type: ParsedType.Invoice, value, raw };
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
export const parseLink = (text, context) => {
|
|
94
|
+
const prev = last(context.results);
|
|
95
|
+
const link = text.match(/^([a-z\+:]{2,30}:\/\/)?[-\.~\w]+\.[\w]{2,6}([^\s]*[^<>"'\.!,:\s\)\(]+)?/gi)?.[0];
|
|
96
|
+
// Skip url if it's just the end of a filepath or an ellipse
|
|
97
|
+
if (!link || (prev?.type === ParsedType.Text && prev.value.endsWith("/")) || link.match(/\.\./)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Skip it if it looks like an IP address but doesn't have a protocol
|
|
101
|
+
if (link.match(/\d+\.\d+/) && !link.includes("://")) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Parse using URL, make sure there's a protocol
|
|
105
|
+
let url;
|
|
106
|
+
try {
|
|
107
|
+
url = new URL(link.match(/^\w+:\/\//) ? link : "https://" + link);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const meta = Object.fromEntries(new URLSearchParams(url.hash.slice(1)).entries());
|
|
113
|
+
for (const tag of context.tags) {
|
|
114
|
+
if (tag[0] === "imeta" && tag.find(t => t.includes(`url ${link}`))) {
|
|
115
|
+
Object.assign(meta, Object.fromEntries(tag.slice(1).map((m) => m.split(" "))));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return { type: ParsedType.Link, value: { url, meta }, raw: link };
|
|
119
|
+
};
|
|
120
|
+
export const parseNewline = (text, context) => {
|
|
121
|
+
const [value] = text.match(/^\n+/) || [];
|
|
122
|
+
if (value) {
|
|
123
|
+
return { type: ParsedType.Newline, value, raw: value };
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
export const parseProfile = (text, context) => {
|
|
127
|
+
const [entity] = text.match(/^@?(web\+)?(nostr:)n(profile|pub)1[\d\w]+/i) || [];
|
|
128
|
+
if (entity) {
|
|
129
|
+
try {
|
|
130
|
+
const { type, data } = decode(fromNostrURI(entity.replace("@", "")));
|
|
131
|
+
const value = type === "npub" ? { pubkey: data, relays: [] } : data;
|
|
132
|
+
return { type: ParsedType.Profile, value, raw: entity };
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
// Pass
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
export const parseTopic = (text, context) => {
|
|
140
|
+
const [value] = text.match(/^#[^\s!\"#$%&'()*+,-.\/:;<=>?@[\\\]^_`{|}~]+/i) || [];
|
|
141
|
+
// Skip numeric topics
|
|
142
|
+
if (value && !value.match(/^#\d+$/)) {
|
|
143
|
+
return { type: ParsedType.Topic, value: value.slice(1), raw: value };
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
// Parse other formats to known types
|
|
147
|
+
export const parseLegacyMention = (text, context) => {
|
|
148
|
+
const mentionMatch = text.match(/^#\[(\d+)\]/i) || [];
|
|
149
|
+
if (mentionMatch) {
|
|
150
|
+
const [tag, value, url] = context.tags[parseInt(mentionMatch[1])] || [];
|
|
151
|
+
const relays = url ? [url] : [];
|
|
152
|
+
if (tag === "p") {
|
|
153
|
+
return { type: ParsedType.Profile, value: { pubkey: value, relays }, raw: mentionMatch[0] };
|
|
154
|
+
}
|
|
155
|
+
if (tag === "e") {
|
|
156
|
+
return { type: ParsedType.Event, value: { id: value, relays }, raw: mentionMatch[0] };
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
export const parsers = [
|
|
161
|
+
parseNewline,
|
|
162
|
+
parseLegacyMention,
|
|
163
|
+
parseTopic,
|
|
164
|
+
parseCodeBlock,
|
|
165
|
+
parseCodeInline,
|
|
166
|
+
parseAddress,
|
|
167
|
+
parseProfile,
|
|
168
|
+
parseEmoji,
|
|
169
|
+
parseEvent,
|
|
170
|
+
parseCashu,
|
|
171
|
+
parseInvoice,
|
|
172
|
+
parseLink,
|
|
173
|
+
];
|
|
174
|
+
export const parseNext = (raw, context) => {
|
|
175
|
+
for (const parser of parsers) {
|
|
176
|
+
const result = parser(raw, context);
|
|
177
|
+
if (result) {
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
// Main exports
|
|
183
|
+
export const parse = ({ content = "", tags = [] }) => {
|
|
184
|
+
const context = { content, tags, results: [] };
|
|
185
|
+
let buffer = "";
|
|
186
|
+
let remaining = content.trim() || tags.find(t => t[0] === "alt")?.[1] || "";
|
|
187
|
+
while (remaining) {
|
|
188
|
+
const parsed = parseNext(remaining, context);
|
|
189
|
+
if (parsed) {
|
|
190
|
+
if (buffer) {
|
|
191
|
+
context.results.push({ type: ParsedType.Text, value: buffer, raw: buffer });
|
|
192
|
+
buffer = "";
|
|
193
|
+
}
|
|
194
|
+
context.results.push(parsed);
|
|
195
|
+
remaining = remaining.slice(parsed.raw.length);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// Instead of going character by character and re-running all the above regular expressions
|
|
199
|
+
// a million times, try to match the next word and add it to the buffer
|
|
200
|
+
const [match] = remaining.match(/^[\w\d]+ ?/i) || remaining[0];
|
|
201
|
+
buffer += match;
|
|
202
|
+
remaining = remaining.slice(match.length);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (buffer) {
|
|
206
|
+
context.results.push({ type: ParsedType.Text, value: buffer, raw: buffer });
|
|
207
|
+
}
|
|
208
|
+
return context.results;
|
|
209
|
+
};
|
|
210
|
+
export const truncate = (content, { minLength = 500, maxLength = 700, mediaLength = 200, entityLength = 30 } = {}) => {
|
|
211
|
+
// Get a list of content sizes so we know where to truncate
|
|
212
|
+
// Non-plaintext things might take up more or less room if rendered
|
|
213
|
+
const sizes = content.map((parsed) => {
|
|
214
|
+
switch (parsed.type) {
|
|
215
|
+
case ParsedType.Link:
|
|
216
|
+
case ParsedType.LinkGrid:
|
|
217
|
+
case ParsedType.Cashu:
|
|
218
|
+
case ParsedType.Invoice:
|
|
219
|
+
return mediaLength;
|
|
220
|
+
case ParsedType.Event:
|
|
221
|
+
case ParsedType.Address:
|
|
222
|
+
case ParsedType.Profile:
|
|
223
|
+
return entityLength;
|
|
224
|
+
case ParsedType.Emoji:
|
|
225
|
+
return parsed.value.name.length;
|
|
226
|
+
default:
|
|
227
|
+
return parsed.value.length;
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
// If total size fits inside our max, we're done
|
|
231
|
+
if (sizes.reduce((r, x) => r + x, 0) < maxLength) {
|
|
232
|
+
return content;
|
|
233
|
+
}
|
|
234
|
+
let currentSize = 0;
|
|
235
|
+
// Otherwise, truncate more then necessary so that when the user expands the note
|
|
236
|
+
// they have more than just a tiny bit to look at. Truncating a single word is annoying.
|
|
237
|
+
sizes.every((size, i) => {
|
|
238
|
+
currentSize += size;
|
|
239
|
+
if (currentSize > minLength) {
|
|
240
|
+
content = content
|
|
241
|
+
.slice(0, Math.max(1, i + 1))
|
|
242
|
+
.concat({ type: ParsedType.Ellipsis, value: "…", raw: "" });
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
return true;
|
|
246
|
+
});
|
|
247
|
+
return content;
|
|
248
|
+
};
|
|
249
|
+
export const reduceLinks = (content) => {
|
|
250
|
+
const result = [];
|
|
251
|
+
const buffer = [];
|
|
252
|
+
for (const parsed of content) {
|
|
253
|
+
const prev = last(result);
|
|
254
|
+
// If we have a link and we're in our own block, start a grid
|
|
255
|
+
if (isLink(parsed) && (!prev || isNewline(prev))) {
|
|
256
|
+
buffer.push(parsed.value);
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
// Ignore newlines and empty space if we're building a grid
|
|
260
|
+
if (isNewline(parsed) && buffer.length > 0)
|
|
261
|
+
continue;
|
|
262
|
+
if (isText(parsed) && !parsed.value.trim() && buffer.length > 0)
|
|
263
|
+
continue;
|
|
264
|
+
if (buffer.length > 0) {
|
|
265
|
+
result.push({ type: ParsedType.LinkGrid, value: { links: buffer.splice(0) }, raw: "" });
|
|
266
|
+
}
|
|
267
|
+
result.push(parsed);
|
|
268
|
+
}
|
|
269
|
+
if (buffer.length > 0) {
|
|
270
|
+
result.push({ type: ParsedType.LinkGrid, value: { links: buffer.splice(0) }, raw: "" });
|
|
271
|
+
}
|
|
272
|
+
return result;
|
|
273
|
+
};
|
|
274
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Parsed, ParsedTopic, ParsedProfile, ParsedNewline, ParsedLink, ParsedInvoice, ParsedEvent, ParsedEmoji, ParsedEllipsis, ParsedCode, ParsedCashu, ParsedAddress, ParsedText } from "./parser.js";
|
|
2
|
+
export declare class Renderer {
|
|
3
|
+
readonly options: RenderOptions;
|
|
4
|
+
private value;
|
|
5
|
+
constructor(options: RenderOptions);
|
|
6
|
+
toString: () => string;
|
|
7
|
+
addText: (value: string) => void;
|
|
8
|
+
addNewlines: (count: number) => void;
|
|
9
|
+
addLink: (href: string, display: string) => void;
|
|
10
|
+
addEntityLink: (entity: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export type RenderOptions = {
|
|
13
|
+
newline: string;
|
|
14
|
+
entityBase: string;
|
|
15
|
+
renderLink: (href: string, display: string) => string;
|
|
16
|
+
renderEntity: (entity: string) => string;
|
|
17
|
+
createElement: (tag: string) => any;
|
|
18
|
+
};
|
|
19
|
+
export declare const textRenderOptions: {
|
|
20
|
+
newline: string;
|
|
21
|
+
entityBase: string;
|
|
22
|
+
createElement: (tag: string) => any;
|
|
23
|
+
renderLink: (href: string, display: string) => string;
|
|
24
|
+
renderEntity: (entity: string) => string;
|
|
25
|
+
};
|
|
26
|
+
export declare const htmlRenderOptions: {
|
|
27
|
+
newline: string;
|
|
28
|
+
entityBase: string;
|
|
29
|
+
createElement: (tag: string) => any;
|
|
30
|
+
renderLink(href: string, display: string): any;
|
|
31
|
+
renderEntity: (entity: string) => string;
|
|
32
|
+
};
|
|
33
|
+
export declare const makeTextRenderer: (options?: Partial<RenderOptions>) => Renderer;
|
|
34
|
+
export declare const makeHtmlRenderer: (options?: Partial<RenderOptions>) => Renderer;
|
|
35
|
+
export declare const renderCashu: (p: ParsedCashu, r: Renderer) => void;
|
|
36
|
+
export declare const renderCode: (p: ParsedCode, r: Renderer) => void;
|
|
37
|
+
export declare const renderEllipsis: (p: ParsedEllipsis, r: Renderer) => void;
|
|
38
|
+
export declare const renderEmoji: (p: ParsedEmoji, r: Renderer) => void;
|
|
39
|
+
export declare const renderInvoice: (p: ParsedInvoice, r: Renderer) => void;
|
|
40
|
+
export declare const renderLink: (p: ParsedLink, r: Renderer) => void;
|
|
41
|
+
export declare const renderNewline: (p: ParsedNewline, r: Renderer) => void;
|
|
42
|
+
export declare const renderText: (p: ParsedText, r: Renderer) => void;
|
|
43
|
+
export declare const renderTopic: (p: ParsedTopic, r: Renderer) => void;
|
|
44
|
+
export declare const renderEvent: (p: ParsedEvent, r: Renderer) => void;
|
|
45
|
+
export declare const renderProfile: (p: ParsedProfile, r: Renderer) => void;
|
|
46
|
+
export declare const renderAddress: (p: ParsedAddress, r: Renderer) => void;
|
|
47
|
+
export declare const renderOne: (parsed: Parsed, renderer: Renderer) => Renderer;
|
|
48
|
+
export declare const renderMany: (parsed: Parsed[], renderer: Renderer) => Renderer;
|
|
49
|
+
export declare const render: (parsed: Parsed | Parsed[], renderer: Renderer) => Renderer;
|
|
50
|
+
export declare const renderAsText: (parsed: Parsed | Parsed[], options?: Partial<RenderOptions>) => Renderer;
|
|
51
|
+
export declare const renderAsHtml: (parsed: Parsed | Parsed[], options?: Partial<RenderOptions>) => Renderer;
|
|
52
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
package/dist/render.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { neventEncode, nprofileEncode, naddrEncode } from "nostr-tools/nip19";
|
|
2
|
+
import { sanitizeUrl } from "@braintree/sanitize-url";
|
|
3
|
+
import { ParsedType, } from "./parser.js";
|
|
4
|
+
export class Renderer {
|
|
5
|
+
options;
|
|
6
|
+
value = "";
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.options = options;
|
|
9
|
+
}
|
|
10
|
+
toString = () => this.value;
|
|
11
|
+
addText = (value) => {
|
|
12
|
+
const element = this.options.createElement("div");
|
|
13
|
+
element.innerText = value;
|
|
14
|
+
this.value += element.innerHTML;
|
|
15
|
+
};
|
|
16
|
+
addNewlines = (count) => {
|
|
17
|
+
for (let i = 0; i < count; i++) {
|
|
18
|
+
this.value += this.options.newline;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
addLink = (href, display) => {
|
|
22
|
+
this.value += this.options.renderLink(href, display);
|
|
23
|
+
};
|
|
24
|
+
addEntityLink = (entity) => {
|
|
25
|
+
this.addLink(this.options.entityBase + entity, this.options.renderEntity(entity));
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const createElement = (tag) => document.createElement(tag);
|
|
29
|
+
export const textRenderOptions = {
|
|
30
|
+
newline: "\n",
|
|
31
|
+
entityBase: "",
|
|
32
|
+
createElement,
|
|
33
|
+
renderLink: (href, display) => href,
|
|
34
|
+
renderEntity: (entity) => entity.slice(0, 16) + "…",
|
|
35
|
+
};
|
|
36
|
+
export const htmlRenderOptions = {
|
|
37
|
+
newline: "\n",
|
|
38
|
+
entityBase: "https://njump.me/",
|
|
39
|
+
createElement,
|
|
40
|
+
renderLink(href, display) {
|
|
41
|
+
const element = this.createElement("a");
|
|
42
|
+
element.href = sanitizeUrl(href);
|
|
43
|
+
element.target = "_blank";
|
|
44
|
+
element.innerText = display;
|
|
45
|
+
return element.outerHTML;
|
|
46
|
+
},
|
|
47
|
+
renderEntity: (entity) => entity.slice(0, 16) + "…",
|
|
48
|
+
};
|
|
49
|
+
export const makeTextRenderer = (options = {}) => new Renderer({ ...textRenderOptions, ...options });
|
|
50
|
+
export const makeHtmlRenderer = (options = {}) => new Renderer({ ...htmlRenderOptions, ...options });
|
|
51
|
+
// Top level render methods
|
|
52
|
+
export const renderCashu = (p, r) => r.addText(p.value);
|
|
53
|
+
export const renderCode = (p, r) => r.addText(p.value);
|
|
54
|
+
export const renderEllipsis = (p, r) => r.addText("…");
|
|
55
|
+
export const renderEmoji = (p, r) => r.addText(p.raw);
|
|
56
|
+
export const renderInvoice = (p, r) => r.addLink("lightning:" + p.value, p.value.slice(0, 16) + "…");
|
|
57
|
+
export const renderLink = (p, r) => r.addLink(p.value.url.toString(), p.value.url.host + p.value.url.pathname);
|
|
58
|
+
export const renderNewline = (p, r) => r.addNewlines(Array.from(p.value).length);
|
|
59
|
+
export const renderText = (p, r) => r.addText(p.value);
|
|
60
|
+
export const renderTopic = (p, r) => r.addText(p.value);
|
|
61
|
+
export const renderEvent = (p, r) => r.addEntityLink(neventEncode(p.value));
|
|
62
|
+
export const renderProfile = (p, r) => r.addEntityLink(nprofileEncode(p.value));
|
|
63
|
+
export const renderAddress = (p, r) => r.addEntityLink(naddrEncode(p.value));
|
|
64
|
+
export const renderOne = (parsed, renderer) => {
|
|
65
|
+
switch (parsed.type) {
|
|
66
|
+
case ParsedType.Address:
|
|
67
|
+
renderAddress(parsed, renderer);
|
|
68
|
+
break;
|
|
69
|
+
case ParsedType.Cashu:
|
|
70
|
+
renderCashu(parsed, renderer);
|
|
71
|
+
break;
|
|
72
|
+
case ParsedType.Code:
|
|
73
|
+
renderCode(parsed, renderer);
|
|
74
|
+
break;
|
|
75
|
+
case ParsedType.Ellipsis:
|
|
76
|
+
renderEllipsis(parsed, renderer);
|
|
77
|
+
break;
|
|
78
|
+
case ParsedType.Emoji:
|
|
79
|
+
renderEmoji(parsed, renderer);
|
|
80
|
+
break;
|
|
81
|
+
case ParsedType.Event:
|
|
82
|
+
renderEvent(parsed, renderer);
|
|
83
|
+
break;
|
|
84
|
+
case ParsedType.Invoice:
|
|
85
|
+
renderInvoice(parsed, renderer);
|
|
86
|
+
break;
|
|
87
|
+
case ParsedType.Link:
|
|
88
|
+
renderLink(parsed, renderer);
|
|
89
|
+
break;
|
|
90
|
+
case ParsedType.Newline:
|
|
91
|
+
renderNewline(parsed, renderer);
|
|
92
|
+
break;
|
|
93
|
+
case ParsedType.Profile:
|
|
94
|
+
renderProfile(parsed, renderer);
|
|
95
|
+
break;
|
|
96
|
+
case ParsedType.Text:
|
|
97
|
+
renderText(parsed, renderer);
|
|
98
|
+
break;
|
|
99
|
+
case ParsedType.Topic:
|
|
100
|
+
renderTopic(parsed, renderer);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
return renderer;
|
|
104
|
+
};
|
|
105
|
+
export const renderMany = (parsed, renderer) => {
|
|
106
|
+
for (const p of parsed) {
|
|
107
|
+
renderOne(p, renderer);
|
|
108
|
+
}
|
|
109
|
+
return renderer;
|
|
110
|
+
};
|
|
111
|
+
export const render = (parsed, renderer) => Array.isArray(parsed) ? renderMany(parsed, renderer) : renderOne(parsed, renderer);
|
|
112
|
+
export const renderAsText = (parsed, options = {}) => render(parsed, makeTextRenderer(options));
|
|
113
|
+
export const renderAsHtml = (parsed, options = {}) => render(parsed, makeHtmlRenderer(options));
|
|
114
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/index.ts"],"version":"5.8.2"}
|
|
1
|
+
{"root":["../src/index.ts","../src/parser.ts","../src/render.ts"],"version":"5.8.2"}
|