@paroicms/public-server-lib 0.34.1 → 0.35.1
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 +31 -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,17 @@ 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
|
+
options: { variableName: string },
|
|
141
|
+
) => Generator;
|
|
142
|
+
|
|
143
|
+
export type PluginLiquidTagReturnsHtmlHandler = (
|
|
144
|
+
service: PluginRenderingService,
|
|
145
|
+
parameters: { [key: string]: unknown },
|
|
146
|
+
) => string | Promise<string>;
|
|
147
|
+
|
|
120
148
|
export type FieldPreprocessor = (
|
|
121
149
|
service: PluginRenderingService,
|
|
122
150
|
value: ReadFieldValue,
|
|
@@ -181,6 +209,8 @@ export interface NewSiteOptions {
|
|
|
181
209
|
export interface PluginRenderingService {
|
|
182
210
|
pluginService: BackendPluginService;
|
|
183
211
|
language: string;
|
|
212
|
+
homeUrl: string;
|
|
213
|
+
setRenderState(key: string, value: any): void;
|
|
184
214
|
renderChildPartials(
|
|
185
215
|
ctx: PaHttpContext,
|
|
186
216
|
options: {
|
|
@@ -244,7 +274,7 @@ export interface PluginConfigurations {
|
|
|
244
274
|
export interface PluginConfiguration {
|
|
245
275
|
[key: string]: unknown;
|
|
246
276
|
backOffice?: Obj;
|
|
247
|
-
|
|
277
|
+
googleRecaptchaSiteKey?: string;
|
|
248
278
|
}
|
|
249
279
|
|
|
250
280
|
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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"}
|