@paroicms/public-server-lib 0.34.1 → 0.35.0
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/html-helpers.d.ts +8 -0
- package/dist/html-helpers.js +48 -0
- package/dist/html-helpers.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/internal-html-utils.d.ts +4 -0
- package/dist/internal/internal-html-utils.js +35 -0
- package/dist/internal/internal-html-utils.js.map +1 -0
- package/dist/obfuscate.helper.js +1 -1
- package/dist/obfuscate.helper.js.map +1 -1
- package/package.json +1 -1
- package/types/backend-plugin-types.d.ts +30 -1
- package/dist/html-helpers/html-helpers.d.ts +0 -14
- package/dist/html-helpers/html-helpers.js +0 -76
- package/dist/html-helpers/html-helpers.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function escapeHtml(text: string | undefined, options?: {
|
|
2
|
+
newLinesToBr?: boolean;
|
|
3
|
+
}): string;
|
|
4
|
+
export declare function htmlToRawText(html: string): string;
|
|
5
|
+
export declare function stripHtmlTags(html: string, { blockSeparator }?: {
|
|
6
|
+
blockSeparator?: string;
|
|
7
|
+
}): string;
|
|
8
|
+
export declare function makeStylesheetLinkAsyncTag(href: string): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { decodeHtmlEntities, insertBlockSeparators, newLinesToBr, replaceLinks, } from "./internal/internal-html-utils.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://stackoverflow.com/a/430240/3786294
|
|
4
|
+
*/
|
|
5
|
+
const tagBody = "(?:[^\"'>]|\"[^\"]*\"|'[^']*')*";
|
|
6
|
+
const tagOrComment = new RegExp(`<(?:!--(?:(?:-*[^->])*--+|-?)|script\\b${tagBody}>[\\s\\S]*?</script\\s*|style\\b${tagBody}>[\\s\\S]*?</style\\s*|/?[a-z]${tagBody})>`, "gi");
|
|
7
|
+
/**
|
|
8
|
+
* @see https://stackoverflow.com/a/4835406/3786294
|
|
9
|
+
*/
|
|
10
|
+
const htmlEntities = {
|
|
11
|
+
"&": "&",
|
|
12
|
+
"<": "<",
|
|
13
|
+
">": ">",
|
|
14
|
+
'"': """,
|
|
15
|
+
"'": "'",
|
|
16
|
+
};
|
|
17
|
+
export function escapeHtml(text, options = {}) {
|
|
18
|
+
if (!text)
|
|
19
|
+
return "";
|
|
20
|
+
let val = text;
|
|
21
|
+
val = val.replace(/[&<>"']/g, (m) => htmlEntities[m]);
|
|
22
|
+
if (options.newLinesToBr) {
|
|
23
|
+
val = newLinesToBr(val);
|
|
24
|
+
}
|
|
25
|
+
return val;
|
|
26
|
+
}
|
|
27
|
+
export function htmlToRawText(html) {
|
|
28
|
+
return stripHtmlTags(replaceLinks(html));
|
|
29
|
+
}
|
|
30
|
+
export function stripHtmlTags(html, { blockSeparator } = {}) {
|
|
31
|
+
let val = blockSeparator ? insertBlockSeparators(html, blockSeparator) : html;
|
|
32
|
+
val = val.replace(/<br\s*\/?>/gi, "\n");
|
|
33
|
+
let prev;
|
|
34
|
+
do {
|
|
35
|
+
prev = val;
|
|
36
|
+
val = val.replace(tagOrComment, "");
|
|
37
|
+
} while (val !== prev);
|
|
38
|
+
if (blockSeparator && val.endsWith(blockSeparator)) {
|
|
39
|
+
val = val.slice(0, -blockSeparator.length);
|
|
40
|
+
}
|
|
41
|
+
return decodeHtmlEntities(val);
|
|
42
|
+
}
|
|
43
|
+
export function makeStylesheetLinkAsyncTag(href) {
|
|
44
|
+
const escHref = escapeHtml(href);
|
|
45
|
+
return `<link rel="preload" href="${escHref}" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
|
46
|
+
<noscript><link rel="stylesheet" href="${escHref}"></noscript>`;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=html-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-helpers.js","sourceRoot":"","sources":["../src/html-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,YAAY,GACb,MAAM,mCAAmC,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,GAAG,iCAAiC,CAAC;AAClD,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,0CAA0C,OAAO,mCAAmC,OAAO,iCAAiC,OAAO,IAAI,EACvI,IAAI,CACL,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAA+B;IAC/C,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF,MAAM,UAAU,UAAU,CACxB,IAAwB,EACxB,UAAsC,EAAE;IAExC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,EAAE,cAAc,KAAkC,EAAE;IAC9F,IAAI,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,IAAY,CAAC;IACjB,GAAG,CAAC;QACF,IAAI,GAAG,GAAG,CAAC;QACX,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE;IACvB,IAAI,cAAc,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACnD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,6BAA6B,OAAO;yCACJ,OAAO,eAAe,CAAC;AAChE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type * from "../types/backend-plugin-types.d.ts";
|
|
2
2
|
export * from "./api-error-handler.js";
|
|
3
3
|
export * from "./esm-module.helper.js";
|
|
4
|
-
export * from "./html-helpers
|
|
4
|
+
export * from "./html-helpers.js";
|
|
5
5
|
export * from "./obfuscate.helper.js";
|
|
6
6
|
export * from "./server-image-cache-engine.helper.js";
|
|
7
7
|
export * from "./simple-i18n.js";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from "./api-error-handler.js";
|
|
2
2
|
export * from "./esm-module.helper.js";
|
|
3
|
-
export * from "./html-helpers
|
|
3
|
+
export * from "./html-helpers.js";
|
|
4
4
|
export * from "./obfuscate.helper.js";
|
|
5
5
|
export * from "./server-image-cache-engine.helper.js";
|
|
6
6
|
export * from "./simple-i18n.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uCAAuC,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const entities = {
|
|
2
|
+
"<": "<",
|
|
3
|
+
"<": "<",
|
|
4
|
+
"<": "<",
|
|
5
|
+
">": ">",
|
|
6
|
+
">": ">",
|
|
7
|
+
">": ">",
|
|
8
|
+
"/": "/",
|
|
9
|
+
"/": "/",
|
|
10
|
+
"'": "'",
|
|
11
|
+
"'": "'",
|
|
12
|
+
"'": "'",
|
|
13
|
+
""": '"',
|
|
14
|
+
""": '"',
|
|
15
|
+
""": '"',
|
|
16
|
+
"&": "&",
|
|
17
|
+
"&": "&",
|
|
18
|
+
"&": "&",
|
|
19
|
+
};
|
|
20
|
+
export function newLinesToBr(text) {
|
|
21
|
+
return text.replace(/(?:\r\n|\r|\n)/g, "<br>\n");
|
|
22
|
+
}
|
|
23
|
+
export function decodeHtmlEntities(str) {
|
|
24
|
+
return str.replace(/<|<|<|>|>|>|/|/|'|'|'|"|"|"|&|&|&/g, (match) => entities[match]);
|
|
25
|
+
}
|
|
26
|
+
export function replaceLinks(html) {
|
|
27
|
+
return html.replace(/<a\s+[^>]*href="([^"]*)"[^>]*>([^<]*)<\/a>/gi, (_, url, label) => {
|
|
28
|
+
return `${label.trim()} ( ${url} )`;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export function insertBlockSeparators(html, sep) {
|
|
32
|
+
const regex = /(\w)(<\/(?:address|article|aside|blockquote|canvas|dd|div|dl|dt|fieldset|figcaption|figure|footer|form|h[1-6]|header|hr|li|main|nav|noscript|ol|p|pre|section|table|tfoot|ul|video)>)/g;
|
|
33
|
+
return html.replace(regex, (_, p1, p2) => `${p1}${sep}${p2}`);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=internal-html-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-html-utils.js","sourceRoot":"","sources":["../../src/internal/internal-html-utils.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAiC;IAC7C,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;CACd,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,OAAO,CAChB,8GAA8G,EAC9G,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,8CAA8C,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACpF,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,GAAW;IAC7D,MAAM,KAAK,GACT,wLAAwL,CAAC;IAC3L,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC"}
|
package/dist/obfuscate.helper.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { escapeHtml } from "./html-helpers
|
|
1
|
+
import { escapeHtml } from "./html-helpers.js";
|
|
2
2
|
export function generateObfuscatedHtml(inputString) {
|
|
3
3
|
const jsString = JSON.stringify(btoa(inputString));
|
|
4
4
|
return `<script>document.write(atob(${jsString}))</script>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obfuscate.helper.js","sourceRoot":"","sources":["../src/obfuscate.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"obfuscate.helper.js","sourceRoot":"","sources":["../src/obfuscate.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,OAAO,+BAA+B,QAAQ,aAAa,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,OAAO,sBAAsB,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACnD,OAAO,YAAY,UAAU,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC;AAC9E,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC;AACzD,CAAC"}
|
package/package.json
CHANGED
|
@@ -91,15 +91,32 @@ export interface BackendPluginInitService {
|
|
|
91
91
|
handler: PluginLiquidFilterHandler,
|
|
92
92
|
options?: { raw?: boolean },
|
|
93
93
|
): void;
|
|
94
|
+
registerLiquidTag(
|
|
95
|
+
tagName: string,
|
|
96
|
+
tagKind: "assignToVar",
|
|
97
|
+
handler: PluginLiquidTagReturnsVarHandler,
|
|
98
|
+
): void;
|
|
99
|
+
registerLiquidTag(
|
|
100
|
+
tagName: string,
|
|
101
|
+
tagKind: "injectHtml",
|
|
102
|
+
handler: PluginLiquidTagReturnsHtmlHandler,
|
|
103
|
+
): void;
|
|
94
104
|
registerFieldPreprocessor(handler: FieldPreprocessor): void;
|
|
95
105
|
registerHook(hookName: string, handler: BackendHookHandler, options?: { unique?: boolean }): void;
|
|
96
106
|
setPublicApiHandler(handler: PublicApiHandler): void;
|
|
107
|
+
/** @deprecated */
|
|
97
108
|
addHeadTag(...htmlTags: string[]): void;
|
|
109
|
+
registerHeadTags(handler: HeadTagsHandler): void;
|
|
98
110
|
registeredSite: RegisteredSite;
|
|
99
111
|
configuration: PluginConfiguration;
|
|
100
112
|
pluginAssetsUrl: string;
|
|
101
113
|
}
|
|
102
114
|
|
|
115
|
+
export type HeadTagsHandler = (options: { state: ReadonlyMap<string, unknown>; html: string }) =>
|
|
116
|
+
| string[]
|
|
117
|
+
| string
|
|
118
|
+
| undefined;
|
|
119
|
+
|
|
103
120
|
export type BackendHookHandler = (
|
|
104
121
|
service: BackendPluginService,
|
|
105
122
|
params: any,
|
|
@@ -117,6 +134,16 @@ export type PluginLiquidFilterHandler = (
|
|
|
117
134
|
},
|
|
118
135
|
) => string | Promise<string>;
|
|
119
136
|
|
|
137
|
+
export type PluginLiquidTagReturnsVarHandler = (
|
|
138
|
+
service: PluginRenderingService,
|
|
139
|
+
parameters: { [key: string]: unknown },
|
|
140
|
+
) => Generator;
|
|
141
|
+
|
|
142
|
+
export type PluginLiquidTagReturnsHtmlHandler = (
|
|
143
|
+
service: PluginRenderingService,
|
|
144
|
+
parameters: { [key: string]: unknown },
|
|
145
|
+
) => string | Promise<string>;
|
|
146
|
+
|
|
120
147
|
export type FieldPreprocessor = (
|
|
121
148
|
service: PluginRenderingService,
|
|
122
149
|
value: ReadFieldValue,
|
|
@@ -181,6 +208,8 @@ export interface NewSiteOptions {
|
|
|
181
208
|
export interface PluginRenderingService {
|
|
182
209
|
pluginService: BackendPluginService;
|
|
183
210
|
language: string;
|
|
211
|
+
homeUrl: string;
|
|
212
|
+
setRenderState(key: string, value: any): void;
|
|
184
213
|
renderChildPartials(
|
|
185
214
|
ctx: PaHttpContext,
|
|
186
215
|
options: {
|
|
@@ -244,7 +273,7 @@ export interface PluginConfigurations {
|
|
|
244
273
|
export interface PluginConfiguration {
|
|
245
274
|
[key: string]: unknown;
|
|
246
275
|
backOffice?: Obj;
|
|
247
|
-
|
|
276
|
+
googleRecaptchaSiteKey?: string;
|
|
248
277
|
}
|
|
249
278
|
|
|
250
279
|
export interface MailData {
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @see https://stackoverflow.com/a/4835406/3786294
|
|
3
|
-
*/
|
|
4
|
-
export declare function escapeHtml(text: string | undefined, options?: {
|
|
5
|
-
newLinesToBr?: boolean;
|
|
6
|
-
}): string;
|
|
7
|
-
export declare function decodeHtmlEntities(str: string): string;
|
|
8
|
-
export declare function newLinesToBr(text: string): string;
|
|
9
|
-
export declare function htmlToText(html: string): string;
|
|
10
|
-
export declare function stripHtmlTags(html: string, { blockSeparator }?: {
|
|
11
|
-
blockSeparator?: string;
|
|
12
|
-
}): string;
|
|
13
|
-
export declare function insertBlockSeparators(html: string, sep: string): string;
|
|
14
|
-
export declare function replaceLinks(html: string): string;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @see https://stackoverflow.com/a/4835406/3786294
|
|
3
|
-
*/
|
|
4
|
-
const htmlEntities = {
|
|
5
|
-
"&": "&",
|
|
6
|
-
"<": "<",
|
|
7
|
-
">": ">",
|
|
8
|
-
'"': """,
|
|
9
|
-
"'": "'",
|
|
10
|
-
};
|
|
11
|
-
export function escapeHtml(text, options = {}) {
|
|
12
|
-
if (!text)
|
|
13
|
-
return "";
|
|
14
|
-
let val = text;
|
|
15
|
-
val = val.replace(/[&<>"']/g, (m) => htmlEntities[m]);
|
|
16
|
-
if (options.newLinesToBr) {
|
|
17
|
-
val = newLinesToBr(val);
|
|
18
|
-
}
|
|
19
|
-
return val;
|
|
20
|
-
}
|
|
21
|
-
export function decodeHtmlEntities(str) {
|
|
22
|
-
const entities = {
|
|
23
|
-
"<": "<",
|
|
24
|
-
"<": "<",
|
|
25
|
-
"<": "<",
|
|
26
|
-
">": ">",
|
|
27
|
-
">": ">",
|
|
28
|
-
">": ">",
|
|
29
|
-
"/": "/",
|
|
30
|
-
"/": "/",
|
|
31
|
-
"'": "'",
|
|
32
|
-
"'": "'",
|
|
33
|
-
"'": "'",
|
|
34
|
-
""": '"',
|
|
35
|
-
""": '"',
|
|
36
|
-
""": '"',
|
|
37
|
-
"&": "&",
|
|
38
|
-
"&": "&",
|
|
39
|
-
"&": "&",
|
|
40
|
-
};
|
|
41
|
-
return str.replace(/<|<|<|>|>|>|/|/|'|'|'|"|"|"|&|&|&/g, (match) => entities[match]);
|
|
42
|
-
}
|
|
43
|
-
export function newLinesToBr(text) {
|
|
44
|
-
return text.replace(/(?:\r\n|\r|\n)/g, "<br>\n");
|
|
45
|
-
}
|
|
46
|
-
export function htmlToText(html) {
|
|
47
|
-
return stripHtmlTags(replaceLinks(html));
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Thanks to https://stackoverflow.com/a/430240/3786294
|
|
51
|
-
*/
|
|
52
|
-
const tagBody = "(?:[^\"'>]|\"[^\"]*\"|'[^']*')*";
|
|
53
|
-
const tagOrComment = new RegExp(`<(?:!--(?:(?:-*[^->])*--+|-?)|script\\b${tagBody}>[\\s\\S]*?</script\\s*|style\\b${tagBody}>[\\s\\S]*?</style\\s*|/?[a-z]${tagBody})>`, "gi");
|
|
54
|
-
export function stripHtmlTags(html, { blockSeparator } = {}) {
|
|
55
|
-
let val = blockSeparator ? insertBlockSeparators(html, blockSeparator) : html;
|
|
56
|
-
val = val.replace(/<br\s*\/?>/gi, "\n");
|
|
57
|
-
let prev;
|
|
58
|
-
do {
|
|
59
|
-
prev = val;
|
|
60
|
-
val = val.replace(tagOrComment, "");
|
|
61
|
-
} while (val !== prev);
|
|
62
|
-
if (blockSeparator && val.endsWith(blockSeparator)) {
|
|
63
|
-
val = val.slice(0, -blockSeparator.length);
|
|
64
|
-
}
|
|
65
|
-
return decodeHtmlEntities(val);
|
|
66
|
-
}
|
|
67
|
-
export function insertBlockSeparators(html, sep) {
|
|
68
|
-
const regex = /(\w)(<\/(?:address|article|aside|blockquote|canvas|dd|div|dl|dt|fieldset|figcaption|figure|footer|form|h[1-6]|header|hr|li|main|nav|noscript|ol|p|pre|section|table|tfoot|ul|video)>)/g;
|
|
69
|
-
return html.replace(regex, (_, p1, p2) => `${p1}${sep}${p2}`);
|
|
70
|
-
}
|
|
71
|
-
export function replaceLinks(html) {
|
|
72
|
-
return html.replace(/<a\s+[^>]*href="([^"]*)"[^>]*>([^<]*)<\/a>/gi, (_, url, label) => {
|
|
73
|
-
return `${label.trim()} ( ${url} )`;
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=html-helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"html-helpers.js","sourceRoot":"","sources":["../../src/html-helpers/html-helpers.ts"],"names":[],"mappings":"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"}
|