@paroicms/server 1.36.3 → 1.38.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.
Files changed (95) hide show
  1. package/dist/common/mail/sendMail.helpers.js +3 -3
  2. package/dist/common/mail/sendMail.helpers.js.map +1 -1
  3. package/dist/modules/app.controller.js +2 -2
  4. package/dist/modules/app.controller.js.map +1 -1
  5. package/dist/modules/core/document/document.resolver.js +2 -2
  6. package/dist/modules/core/document/document.resolver.js.map +1 -1
  7. package/dist/modules/core/fields/fields.resolver.d.ts +3 -3
  8. package/dist/modules/core/fields/fields.resolver.js +16 -16
  9. package/dist/modules/core/fields/fields.resolver.js.map +1 -1
  10. package/dist/modules/core/fields/preprocess-fields.d.ts +7 -0
  11. package/dist/modules/core/fields/preprocess-fields.js +48 -0
  12. package/dist/modules/core/fields/preprocess-fields.js.map +1 -0
  13. package/dist/modules/core/fields/save-fields.queries.d.ts +1 -1
  14. package/dist/modules/core/fields/save-fields.queries.js +18 -8
  15. package/dist/modules/core/fields/save-fields.queries.js.map +1 -1
  16. package/dist/modules/core/media/media-upload.controller.js +3 -3
  17. package/dist/modules/core/media/media-upload.controller.js.map +1 -1
  18. package/dist/modules/core/media/media.js +2 -2
  19. package/dist/modules/core/media/media.js.map +1 -1
  20. package/dist/modules/core/media/media.resolver.js +6 -7
  21. package/dist/modules/core/media/media.resolver.js.map +1 -1
  22. package/dist/modules/core/part/part.queries.d.ts +0 -1
  23. package/dist/modules/core/part/part.queries.js +0 -2
  24. package/dist/modules/core/part/part.queries.js.map +1 -1
  25. package/dist/modules/core/part/part.resolver.d.ts +0 -2
  26. package/dist/modules/core/part/part.resolver.js +0 -13
  27. package/dist/modules/core/part/part.resolver.js.map +1 -1
  28. package/dist/modules/core/part/part.schema.d.ts +0 -1
  29. package/dist/modules/core/part/part.schema.js +0 -5
  30. package/dist/modules/core/part/part.schema.js.map +1 -1
  31. package/dist/modules/core/unprotected/unprotected.resolver.js +2 -2
  32. package/dist/modules/core/unprotected/unprotected.resolver.js.map +1 -1
  33. package/dist/modules/public-api/mail/contact-form-mail.js +4 -4
  34. package/dist/modules/public-api/mail/contact-form-mail.js.map +1 -1
  35. package/dist/modules/public-site/feed/feed-generator.js +28 -14
  36. package/dist/modules/public-site/feed/feed-generator.js.map +1 -1
  37. package/dist/modules/public-site/feed/feed.middleware.js +3 -3
  38. package/dist/modules/public-site/feed/feed.middleware.js.map +1 -1
  39. package/dist/modules/public-site/liquidjs-filters/head-tags-filter.js +6 -7
  40. package/dist/modules/public-site/liquidjs-filters/head-tags-filter.js.map +1 -1
  41. package/dist/modules/public-site/liquidjs-filters/image-zoom-url.js +2 -2
  42. package/dist/modules/public-site/liquidjs-filters/image-zoom-url.js.map +1 -1
  43. package/dist/modules/public-site/liquidjs-filters/info-filter.js +4 -4
  44. package/dist/modules/public-site/liquidjs-filters/info-filter.js.map +1 -1
  45. package/dist/modules/public-site/liquidjs-filters/obfuscate.js +3 -3
  46. package/dist/modules/public-site/liquidjs-filters/obfuscate.js.map +1 -1
  47. package/dist/modules/public-site/liquidjs-filters/open-graph-filter.js +8 -9
  48. package/dist/modules/public-site/liquidjs-filters/open-graph-filter.js.map +1 -1
  49. package/dist/modules/public-site/liquidjs-tags/use-image-tag.js +3 -3
  50. package/dist/modules/public-site/liquidjs-tags/use-image-tag.js.map +1 -1
  51. package/dist/modules/public-site/media-serve/_media-serve-helpers.js +2 -2
  52. package/dist/modules/public-site/media-serve/_media-serve-helpers.js.map +1 -1
  53. package/dist/modules/public-site/media-serve/media-serve.controller.js +6 -7
  54. package/dist/modules/public-site/media-serve/media-serve.controller.js.map +1 -1
  55. package/dist/modules/public-site/oauth2-client.controller.js +9 -6
  56. package/dist/modules/public-site/oauth2-client.controller.js.map +1 -1
  57. package/dist/plugins/plugin-api.js +8 -0
  58. package/dist/plugins/plugin-api.js.map +1 -1
  59. package/dist/public-payload/create-doc-drop.js +2 -2
  60. package/dist/public-payload/create-doc-drop.js.map +1 -1
  61. package/dist/public-payload/create-doc-part-drop.js +0 -14
  62. package/dist/public-payload/create-doc-part-drop.js.map +1 -1
  63. package/dist/public-payload/field-values.js +9 -5
  64. package/dist/public-payload/field-values.js.map +1 -1
  65. package/dist/public-payload/make-image-available.js +3 -4
  66. package/dist/public-payload/make-image-available.js.map +1 -1
  67. package/dist/site-context/create-site-context.js +1 -0
  68. package/dist/site-context/create-site-context.js.map +1 -1
  69. package/dist/site-context/site-context.types.d.ts +2 -0
  70. package/dist/site-context/theme-conf-reader.js +3 -3
  71. package/dist/site-context/theme-conf-reader.js.map +1 -1
  72. package/package.json +4 -4
  73. package/schema.gql +3 -5
  74. package/site-schema-lib/field-lib.site-schema.json +10 -0
  75. package/site-schema-lib/field-lib.site-schema.l10n.en.json +3 -0
  76. package/site-schema-lib/field-lib.site-schema.l10n.fr.json +3 -0
  77. package/site-schema-lib/lowcost.site-schema.json +1 -0
  78. package/dist/common/mail/html-helpers.d.ts +0 -11
  79. package/dist/common/mail/html-helpers.js +0 -78
  80. package/dist/common/mail/html-helpers.js.map +0 -1
  81. package/dist/common/mail/html-helpers.test.d.ts +0 -1
  82. package/dist/common/mail/html-helpers.test.js +0 -46
  83. package/dist/common/mail/html-helpers.test.js.map +0 -1
  84. package/dist/helpers/url.helpers.d.ts +0 -35
  85. package/dist/helpers/url.helpers.js +0 -52
  86. package/dist/helpers/url.helpers.js.map +0 -1
  87. package/dist/modules/core/fields/quill-delta.d.ts +0 -7
  88. package/dist/modules/core/fields/quill-delta.js +0 -145
  89. package/dist/modules/core/fields/quill-delta.js.map +0 -1
  90. package/dist/modules/core/fields/render-delta-fields.d.ts +0 -6
  91. package/dist/modules/core/fields/render-delta-fields.js +0 -17
  92. package/dist/modules/core/fields/render-delta-fields.js.map +0 -1
  93. package/dist/modules/public-site/helpers/obfuscate.helper.d.ts +0 -2
  94. package/dist/modules/public-site/helpers/obfuscate.helper.js +0 -27
  95. package/dist/modules/public-site/helpers/obfuscate.helper.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"theme-conf-reader.js","sourceRoot":"","sources":["../../src/site-context/theme-conf-reader.ts"],"names":[],"mappings":";;;AAAA,yDAAoG;AACpG,mFAAyF;AACzF,+CAA4C;AAC5C,yCAAiC;AACjC,wCAA2C;AAGpC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,uBAAa,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;QACxE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,MAAM,IAAA,wBAAS,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAZD,8CAYC;AAED,SAAgB,eAAe,CAAC,GAAoB;IAClD,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;IACvC,MAAM,WAAW,GAAiB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAa,CAAC,KAAK,EAAE,EAAE;QAC1E,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,IAAA,iDAAqB,EAAC,KAAK,EAAE,UAAU,CAAC;SACnD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC;AAfD,0CAeC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC,IAAA,uCAAW,EAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"theme-conf-reader.js","sourceRoot":"","sources":["../../src/site-context/theme-conf-reader.ts"],"names":[],"mappings":";;;AAAA,yDAAoG;AACpG,qDAA0E;AAC1E,+CAA4C;AAC5C,yCAAiC;AACjC,wCAA2C;AAGpC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,uBAAa,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;QACxE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,MAAM,IAAA,wBAAS,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAZD,8CAYC;AAED,SAAgB,eAAe,CAAC,GAAoB;IAClD,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;IACvC,MAAM,WAAW,GAAiB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAa,CAAC,KAAK,EAAE,EAAE;QAC1E,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,IAAA,kCAAqB,EAAC,KAAK,EAAE,UAAU,CAAC;SACnD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC;AAfD,0CAeC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC,IAAA,wBAAW,EAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAC;AACxE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paroicms/server",
3
- "version": "1.36.3",
3
+ "version": "1.38.0",
4
4
  "description": "The ParoiCMS server",
5
5
  "keywords": [
6
6
  "cms",
@@ -49,10 +49,10 @@
49
49
  "@paroi/data-formatters-lib": "~0.3.0",
50
50
  "@paroi/quill-delta-to-html": "~0.12.2",
51
51
  "@paroicms/anywhere-lib": "1.13.1",
52
- "@paroicms/bo": "1.28.3",
53
- "@paroicms/plugin-lib": "0.3.1",
52
+ "@paroicms/bo": "1.30.0",
53
+ "@paroicms/plugin-lib": "0.4.0",
54
54
  "@paroicms/server-database-media-storage": "1.6.2",
55
- "@paroicms/server-image-cache-engine": "1.7.3",
55
+ "@paroicms/server-image-cache-engine": "1.8.0",
56
56
  "@paroicms/server-lib": "1.5.5",
57
57
  "@paroicms/server-text-cache-system": "1.5.3",
58
58
  "@paroicms/site-app": "1.7.0",
package/schema.gql CHANGED
@@ -175,9 +175,7 @@ type PagedSectionWraps {
175
175
  }
176
176
 
177
177
  type Part {
178
- featuredImage: Media
179
- featuredImageHandle: String!
180
- fieldValues(fieldNames: [String!], quillDeltaToHtml: Boolean): String!
178
+ fieldValues(fieldNames: [String!], preprocess: Boolean): String!
181
179
  language: String!
182
180
  leafId: ID!
183
181
  leafType: String!
@@ -211,7 +209,7 @@ type Query {
211
209
  searchDocuments(language: String!, limit: Int!, orderBy: [OrderByItem!], queryString: String!, start: Int!): PagedSectionWraps!
212
210
  sectionWrap(sectionId: ID!): SectionWrap!
213
211
  sectionWraps(parentSectionId: ID!): [SectionWrap!]!
214
- siteFieldValues(fieldNames: [String!], language: String, quillDeltaToHtml: Boolean): String!
212
+ siteFieldValues(fieldNames: [String!], language: String, preprocess: Boolean): String!
215
213
  siteInfo: SiteInfo!
216
214
  siteSchema: String!
217
215
  thisSiteConstants: ThisSiteConstants!
@@ -238,7 +236,7 @@ type SectionTranslation {
238
236
  type SectionWrap {
239
237
  breadcrumb: [BreadcrumbItem!]!
240
238
  document: Document
241
- fieldValues(fieldNames: [String!], quillDeltaToHtml: Boolean): String!
239
+ fieldValues(fieldNames: [String!], preprocess: Boolean): String!
242
240
  language: String!
243
241
  leaf: Leaf!
244
242
  leafId: String!
@@ -79,6 +79,16 @@
79
79
  "useAsExcerpt": 2,
80
80
  "useAsDefaultImage": 2,
81
81
  "visibility": ["overview", "feed"]
82
+ },
83
+ {
84
+ "name": "image",
85
+ "storedOn": "leaf",
86
+ "storedAs": "mediaHandle",
87
+ "dataType": "media",
88
+ "accept": "image/*",
89
+ "refuse": "image/svg+xml",
90
+ "useAsDefaultImage": 1,
91
+ "visibility": ["table", "overview", "feed"]
82
92
  }
83
93
  ]
84
94
  }
@@ -21,6 +21,9 @@
21
21
  },
22
22
  "htmlContent": {
23
23
  "label": "Content"
24
+ },
25
+ "image": {
26
+ "label": "Image"
24
27
  }
25
28
  }
26
29
  }
@@ -21,6 +21,9 @@
21
21
  },
22
22
  "htmlContent": {
23
23
  "label": "Contenu"
24
+ },
25
+ "image": {
26
+ "label": "Image"
24
27
  }
25
28
  }
26
29
  }
@@ -47,6 +47,7 @@
47
47
  "leafType": "urlPartner",
48
48
  "fields": [
49
49
  "title",
50
+ "image",
50
51
  {
51
52
  "name": "url",
52
53
  "storedOn": "leaf",
@@ -1,11 +0,0 @@
1
- export declare function escapeHtml(text: string, options?: {
2
- newLinesToBr?: boolean;
3
- }): string;
4
- export declare function decodeHtmlEntities(str: string): string;
5
- export declare function newLinesToBr(text: string): string;
6
- export declare function htmlToText(html: string): string;
7
- export declare function stripHtmlTags(html: string, { blockSeparator }?: {
8
- blockSeparator?: string;
9
- }): string;
10
- export declare function insertBlockSeparators(html: string, sep: string): string;
11
- export declare function replaceLinks(html: string): string;
@@ -1,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.replaceLinks = exports.insertBlockSeparators = exports.stripHtmlTags = exports.htmlToText = exports.newLinesToBr = exports.decodeHtmlEntities = exports.escapeHtml = void 0;
4
- const htmlEntities = {
5
- "&": "&",
6
- "<": "&lt;",
7
- ">": "&gt;",
8
- '"': "&quot;",
9
- "'": "&#039;",
10
- };
11
- function escapeHtml(text, options = {}) {
12
- let val = text;
13
- val = val.replace(/[&<>"']/g, (m) => htmlEntities[m]);
14
- if (options.newLinesToBr) {
15
- val = newLinesToBr(val);
16
- }
17
- return val;
18
- }
19
- exports.escapeHtml = escapeHtml;
20
- function decodeHtmlEntities(str) {
21
- const entities = {
22
- "&lt;": "<",
23
- "&#60;": "<",
24
- "&#x3C;": "<",
25
- "&gt;": ">",
26
- "&#62;": ">",
27
- "&#x3E;": ">",
28
- "&#47;": "/",
29
- "&#x2F;": "/",
30
- "&apos;": "'",
31
- "&#39;": "'",
32
- "&#x27;": "'",
33
- "&quot;": '"',
34
- "&#34;": '"',
35
- "&#x22;": '"',
36
- "&amp;": "&",
37
- "&#38;": "&",
38
- "&#x26;": "&",
39
- };
40
- return str.replace(/&lt;|&#60;|&#x3C;|&gt;|&#62;|&#x3E;|&#47;|&#x2F;|&apos;|&#39;|&#x27;|&quot;|&#34;|&#x22;|&amp;|&#38;|&#x26;/g, (match) => entities[match]);
41
- }
42
- exports.decodeHtmlEntities = decodeHtmlEntities;
43
- function newLinesToBr(text) {
44
- return text.replace(/(?:\r\n|\r|\n)/g, "<br>\n");
45
- }
46
- exports.newLinesToBr = newLinesToBr;
47
- function htmlToText(html) {
48
- return stripHtmlTags(replaceLinks(html));
49
- }
50
- exports.htmlToText = htmlToText;
51
- const tagBody = "(?:[^\"'>]|\"[^\"]*\"|'[^']*')*";
52
- const tagOrComment = new RegExp(`<(?:!--(?:(?:-*[^->])*--+|-?)|script\\b${tagBody}>[\\s\\S]*?</script\\s*|style\\b${tagBody}>[\\s\\S]*?</style\\s*|/?[a-z]${tagBody})>`, "gi");
53
- function stripHtmlTags(html, { blockSeparator } = {}) {
54
- let val = blockSeparator ? insertBlockSeparators(html, blockSeparator) : html;
55
- val = val.replace(/<br\s*\/?>/gi, "\n");
56
- let prev;
57
- do {
58
- prev = val;
59
- val = val.replace(tagOrComment, "");
60
- } while (val !== prev);
61
- if (blockSeparator && val.endsWith(blockSeparator)) {
62
- val = val.slice(0, -blockSeparator.length);
63
- }
64
- return decodeHtmlEntities(val);
65
- }
66
- exports.stripHtmlTags = stripHtmlTags;
67
- 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
- exports.insertBlockSeparators = insertBlockSeparators;
72
- function replaceLinks(html) {
73
- return html.replace(/<a\s+[^>]*href="([^"]*)"[^>]*>([^<]*)<\/a>/gi, (_, url, label) => {
74
- return `${label.trim()} ( ${url} )`;
75
- });
76
- }
77
- exports.replaceLinks = replaceLinks;
78
- //# sourceMappingURL=html-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"html-helpers.js","sourceRoot":"","sources":["../../../src/common/mail/html-helpers.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const html_helpers_1 = require("./html-helpers");
5
- (0, vitest_1.describe)("escapeHtml", () => {
6
- (0, vitest_1.it)("should escape HTML entities", () => {
7
- (0, vitest_1.expect)((0, html_helpers_1.escapeHtml)("&lt;script&gt;alert('XSS')&lt;/script&gt;")).toBe("&amp;lt;script&amp;gt;alert(&#039;XSS&#039;)&amp;lt;/script&amp;gt;");
8
- (0, vitest_1.expect)((0, html_helpers_1.escapeHtml)("<div>Hello, world!</div>")).toBe("&lt;div&gt;Hello, world!&lt;/div&gt;");
9
- });
10
- (0, vitest_1.it)("should convert new lines to <br> tags if specified", () => {
11
- (0, vitest_1.expect)((0, html_helpers_1.escapeHtml)("Hello\nWorld", { newLinesToBr: true })).toBe("Hello<br>\nWorld");
12
- (0, vitest_1.expect)((0, html_helpers_1.escapeHtml)("Hello\r\nWorld", { newLinesToBr: true })).toBe("Hello<br>\nWorld");
13
- });
14
- });
15
- (0, vitest_1.describe)("newLinesToBr", () => {
16
- (0, vitest_1.it)("should replace new lines with <br> tags", () => {
17
- (0, vitest_1.expect)((0, html_helpers_1.newLinesToBr)("Hello\nWorld")).toBe("Hello<br>\nWorld");
18
- (0, vitest_1.expect)((0, html_helpers_1.newLinesToBr)("Hello\r\nWorld")).toBe("Hello<br>\nWorld");
19
- });
20
- });
21
- (0, vitest_1.describe)("htmlToText", () => {
22
- (0, vitest_1.it)("should strip HTML tags and replace links", () => {
23
- (0, vitest_1.expect)((0, html_helpers_1.htmlToText)(`<p>Hello, <a href="https://example.com">World</a>!</p>`)).toBe("Hello, World ( https://example.com )!");
24
- (0, vitest_1.expect)((0, html_helpers_1.htmlToText)("<h1>Title</h1> <p>Content</p>")).toBe("Title Content");
25
- });
26
- });
27
- (0, vitest_1.describe)("stripHtmlTags", () => {
28
- (0, vitest_1.it)("should remove HTML tags", () => {
29
- (0, vitest_1.expect)((0, html_helpers_1.stripHtmlTags)("<p>Hello, <strong>World</strong>!</p>")).toBe("Hello, World!");
30
- (0, vitest_1.expect)((0, html_helpers_1.stripHtmlTags)("<h1>Title</h1><p>Content</p>")).toBe("TitleContent");
31
- });
32
- (0, vitest_1.it)("should insert block separators if specified", () => {
33
- (0, vitest_1.expect)((0, html_helpers_1.stripHtmlTags)("<p>Paragraph 1</p><p>Paragraph 2</p>", { blockSeparator: "#" })).toBe("Paragraph 1#Paragraph 2");
34
- });
35
- });
36
- (0, vitest_1.describe)("insertBlockSeparators", () => {
37
- (0, vitest_1.it)("should insert block separators between specified HTML tags", () => {
38
- (0, vitest_1.expect)((0, html_helpers_1.insertBlockSeparators)("<p>Paragraph 1</p><div>Block 1</div><p>Paragraph 2</p><div>Block 2</div>", "#")).toBe("<p>Paragraph 1#</p><div>Block 1#</div><p>Paragraph 2#</p><div>Block 2#</div>");
39
- });
40
- });
41
- (0, vitest_1.describe)("replaceLinks", () => {
42
- (0, vitest_1.it)("should replace anchor tags with their label and URL", () => {
43
- (0, vitest_1.expect)((0, html_helpers_1.replaceLinks)(`<a href="https://example.com">Link 1</a><a href="https://example.org">Link 2</a>`)).toBe("Link 1 ( https://example.com )Link 2 ( https://example.org )");
44
- });
45
- });
46
- //# sourceMappingURL=html-helpers.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"html-helpers.test.js","sourceRoot":"","sources":["../../../src/common/mail/html-helpers.test.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import type { VariantName } from "@paroicms/anywhere-lib";
2
- import type { SiteConf } from "../site-context/site-conf";
3
- import type { SiteContext } from "../site-context/site-context.types";
4
- export declare function getBoUrl(siteConf: SiteConf, path?: string): string;
5
- export interface UrlOfMediaFileValues {
6
- mediaUid: string;
7
- mediaType: string;
8
- originalName: string | undefined;
9
- absoluteUrl?: boolean;
10
- }
11
- export declare function makeUrlOfMediaFile(siteContext: Pick<SiteContext, "siteUrl">, values: UrlOfMediaFileValues): string;
12
- export declare function makeUrlOfMediaFile(siteContext: Pick<SiteContext, "siteUrl">, values: UrlOfMediaFileValues, options: {
13
- returnObj: true;
14
- }): {
15
- url: string;
16
- fileName: string;
17
- };
18
- export interface UrlOfImageVariantValues {
19
- mediaUid: string;
20
- mediaType: string;
21
- variantName: VariantName;
22
- resourceVersion: string | undefined;
23
- slug: string | undefined;
24
- absoluteUrl?: boolean;
25
- }
26
- export declare function makeUrlOfImageVariant(siteContext: Pick<SiteContext, "siteUrl">, values: UrlOfImageVariantValues): string;
27
- export declare function makeUrlOfImageVariant(siteContext: Pick<SiteContext, "siteUrl">, values: UrlOfImageVariantValues, options: {
28
- returnObj: true;
29
- }): {
30
- url: string;
31
- fileName: string;
32
- };
33
- export declare function fileExtensionOf(mediaType: string): string;
34
- export declare function toAbsoluteUrl(siteContext: Pick<SiteContext, "siteUrl">, url: string): string;
35
- export declare function makeFeedUrl(siteContext: SiteContext, language?: string): string;
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeFeedUrl = exports.toAbsoluteUrl = exports.fileExtensionOf = exports.makeUrlOfImageVariant = exports.makeUrlOfMediaFile = exports.getBoUrl = void 0;
4
- const context_1 = require("../context");
5
- function getBoUrl(siteConf, path) {
6
- const { publicProtocol, boPort } = context_1.appConf;
7
- const { fqdn } = siteConf;
8
- return `${publicProtocol}://${fqdn}${boPort === 80 ? "" : `:${boPort}`}${path ?? ""}`;
9
- }
10
- exports.getBoUrl = getBoUrl;
11
- function makeUrlOfMediaFile(siteContext, values, options) {
12
- const { mediaUid, mediaType, originalName, absoluteUrl } = values;
13
- const fileName = `${originalName ?? "unamed"}${fileExtensionOf(mediaType)}`;
14
- const relUrl = `/medias/${encodeURIComponent(mediaUid)}/file/${encodeURIComponent(fileName)}`;
15
- const url = absoluteUrl ? toAbsoluteUrl(siteContext, relUrl) : relUrl;
16
- return options?.returnObj ? { url, fileName } : url;
17
- }
18
- exports.makeUrlOfMediaFile = makeUrlOfMediaFile;
19
- function makeUrlOfImageVariant(siteContext, values, options) {
20
- const { mediaUid, mediaType, variantName, slug, resourceVersion, absoluteUrl } = values;
21
- const fileName = `${slug ?? "unamed"}-${variantName}${fileExtensionOf(mediaType)}`;
22
- let relUrl;
23
- if (resourceVersion) {
24
- relUrl = `/medias/${encodeURIComponent(mediaUid)}/image/${encodeURIComponent(resourceVersion)}/${encodeURIComponent(fileName)}`;
25
- }
26
- else {
27
- relUrl = `/medias/${encodeURIComponent(mediaUid)}/image/${encodeURIComponent(fileName)}`;
28
- }
29
- const url = absoluteUrl ? toAbsoluteUrl(siteContext, relUrl) : relUrl;
30
- return options?.returnObj ? { url, fileName } : url;
31
- }
32
- exports.makeUrlOfImageVariant = makeUrlOfImageVariant;
33
- function fileExtensionOf(mediaType) {
34
- const regexMatchArray = mediaType.match(/\w+\/([-+.\w]+)/);
35
- if (!regexMatchArray) {
36
- throw new Error("media extension is incorrect.");
37
- }
38
- return `.${regexMatchArray[1]}`;
39
- }
40
- exports.fileExtensionOf = fileExtensionOf;
41
- function toAbsoluteUrl(siteContext, url) {
42
- return url.startsWith("/") ? `${siteContext.siteUrl}${url}` : url;
43
- }
44
- exports.toAbsoluteUrl = toAbsoluteUrl;
45
- function makeFeedUrl(siteContext, language) {
46
- if (siteContext.multilingual && !language) {
47
- throw new Error("language is required for multilingual site");
48
- }
49
- return toAbsoluteUrl(siteContext, siteContext.multilingual ? `/${language}/feed` : "/feed");
50
- }
51
- exports.makeFeedUrl = makeFeedUrl;
52
- //# sourceMappingURL=url.helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"url.helpers.js","sourceRoot":"","sources":["../../src/helpers/url.helpers.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { RenderingContext } from "../../../liquidjs-tools/liquidjs-rendering/rendering-context";
2
- import type { SiteContext } from "../../../site-context/site-context.types";
3
- export interface QuillDeltaToHtmlOptions {
4
- absoluteImageUrls?: boolean;
5
- }
6
- export declare function convertQuillDeltaToHtml(siteContext: SiteContext, renderingContext: RenderingContext, delta: any, options?: QuillDeltaToHtmlOptions): Promise<string>;
7
- export declare function convertQuillDeltaToPlainText(delta: any): string;
@@ -1,145 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertQuillDeltaToPlainText = exports.convertQuillDeltaToHtml = void 0;
4
- const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
5
- const quill_delta_to_html_1 = require("@paroi/quill-delta-to-html");
6
- const server_image_cache_engine_1 = require("@paroicms/server-image-cache-engine");
7
- const html_helpers_1 = require("../../../common/mail/html-helpers");
8
- const context_1 = require("../../../context");
9
- const url_helpers_1 = require("../../../helpers/url.helpers");
10
- const make_image_available_1 = require("../../../public-payload/make-image-available");
11
- const obfuscate_helper_1 = require("../../public-site/helpers/obfuscate.helper");
12
- async function convertQuillDeltaToHtml(siteContext, renderingContext, delta, options) {
13
- const ops = delta.ops;
14
- preprocessDelta(ops);
15
- const converter = new quill_delta_to_html_1.QuillDeltaToHtmlAsyncConverter(ops, {
16
- multiLineParagraph: false,
17
- });
18
- converter.renderCustomWith((customOp) => {
19
- const { type, value } = customOp.insert;
20
- if (type === "html-snippet")
21
- return value.html;
22
- if (type === "img")
23
- return imgBlotProcessing(siteContext, renderingContext, value, options);
24
- if (type === "obfuscate")
25
- return obfuscateBlotProcessing(value, customOp.attributes);
26
- context_1.platformLog.warn(`Invalid blot '${type}'`);
27
- return "";
28
- });
29
- return await converter.convert();
30
- }
31
- exports.convertQuillDeltaToHtml = convertQuillDeltaToHtml;
32
- function convertQuillDeltaToPlainText(delta) {
33
- const converter = new quill_delta_to_html_1.QuillDeltaToHtmlConverter(delta.ops);
34
- converter.renderCustomWith((customOp) => {
35
- const { type, value } = customOp.insert;
36
- if (type === "html-snippet")
37
- return value.html;
38
- if (type === "img")
39
- return "";
40
- context_1.platformLog.warn(`Invalid blot '${type}'`);
41
- return "";
42
- });
43
- const html = converter.convert();
44
- return (0, html_helpers_1.stripHtmlTags)(html, { blockSeparator: " – " });
45
- }
46
- exports.convertQuillDeltaToPlainText = convertQuillDeltaToPlainText;
47
- function preprocessDelta(ops) {
48
- for (const op of ops) {
49
- if (!op.insert || !op.attributes?.obfuscate)
50
- continue;
51
- op.insert = {
52
- obfuscate: op.insert,
53
- };
54
- }
55
- }
56
- function obfuscateBlotProcessing(value, inlineAttributes) {
57
- const textVal = (0, data_formatters_lib_1.strValOrUndef)(value);
58
- if (!textVal)
59
- return "";
60
- const asALink = formatObfuscateAsALink((0, data_formatters_lib_1.strVal)(inlineAttributes.obfuscate));
61
- let obfuscatedVal;
62
- if (asALink === "mailto" || asALink === "tel") {
63
- obfuscatedVal = (0, obfuscate_helper_1.obfuscateAsHtmlLink)(textVal);
64
- }
65
- else {
66
- obfuscatedVal = (0, obfuscate_helper_1.generateObfuscatedHtml)(textVal);
67
- }
68
- let result = obfuscatedVal;
69
- if (inlineAttributes.strike) {
70
- result = `<s>${result}</s>`;
71
- }
72
- if (inlineAttributes.italic) {
73
- result = `<em>${result}</em>`;
74
- }
75
- if (inlineAttributes.bold) {
76
- result = `<strong>${result}</strong>`;
77
- }
78
- return result;
79
- }
80
- function formatObfuscateAsALink(val) {
81
- if (val === "raw")
82
- return "raw";
83
- if (val === "mailto")
84
- return "mailto";
85
- if (val === "tel")
86
- return "tel";
87
- throw new Error(`invalid link-type '${val}'`);
88
- }
89
- async function imgBlotProcessing(siteContext, renderingContext, value, options) {
90
- const uid = (0, data_formatters_lib_1.strValOrUndef)(value.uid, { varName: "uid" });
91
- const variant = (0, data_formatters_lib_1.strValOrUndef)(value.variant, { varName: "variant" });
92
- const align = (0, data_formatters_lib_1.strValOrUndef)(value.align);
93
- const zoom = (0, data_formatters_lib_1.strValOrUndef)(value.zoom);
94
- const hasZoom = zoom !== "none";
95
- let imgAttributes;
96
- if (uid && variant && (0, server_image_cache_engine_1.isImageSize)(variant)) {
97
- const realSize = (0, server_image_cache_engine_1.applyRatioToImageSize)(variant, siteContext.themeConf.pixelRatio);
98
- const image = await (0, make_image_available_1.makeImageAvailable)(siteContext, renderingContext, {
99
- imageSel: { uid },
100
- size: realSize,
101
- });
102
- let dataZoomSrc;
103
- if (hasZoom) {
104
- const zoomImage = await (0, make_image_available_1.makeImageAvailable)(siteContext, renderingContext, {
105
- imageSel: { uid },
106
- size: (0, server_image_cache_engine_1.applyRatioToImageSize)("x1900x", siteContext.themeConf.pixelRatio),
107
- });
108
- dataZoomSrc = options?.absoluteImageUrls
109
- ? (0, url_helpers_1.toAbsoluteUrl)(siteContext, zoomImage.url)
110
- : zoomImage.url;
111
- }
112
- imgAttributes = {
113
- dataZoomSrc,
114
- src: options?.absoluteImageUrls ? (0, url_helpers_1.toAbsoluteUrl)(siteContext, image.url) : image.url,
115
- width: Math.round(image.width / siteContext.themeConf.pixelRatio),
116
- height: Math.round(image.height / siteContext.themeConf.pixelRatio),
117
- };
118
- }
119
- else {
120
- const src = (0, data_formatters_lib_1.strValOrUndef)(value.src, { varName: "src" });
121
- if (!src) {
122
- context_1.platformLog.warn("missing 'uid' and 'src' in 'img' blot");
123
- return "";
124
- }
125
- imgAttributes = {
126
- dataZoomSrc: hasZoom ? src : undefined,
127
- src,
128
- width: (0, data_formatters_lib_1.nbValOrUndef)(value.width),
129
- height: (0, data_formatters_lib_1.nbValOrUndef)(value.height),
130
- };
131
- }
132
- const attributes = [];
133
- if (imgAttributes.dataZoomSrc) {
134
- attributes.push(`data-zoom-src="${(0, html_helpers_1.escapeHtml)(imgAttributes.dataZoomSrc)}"`);
135
- }
136
- attributes.push(`src="${(0, html_helpers_1.escapeHtml)(imgAttributes.src)}"`);
137
- attributes.push(`class="Img${align ? ` ${(0, html_helpers_1.escapeHtml)(align)}` : ""}"`);
138
- attributes.push(`loading="lazy"`);
139
- if (imgAttributes.width !== undefined)
140
- attributes.push(`width="${imgAttributes.width}"`);
141
- if (imgAttributes.height !== undefined)
142
- attributes.push(`height="${imgAttributes.height}"`);
143
- return `<img ${attributes.join(" ")}>`;
144
- }
145
- //# sourceMappingURL=quill-delta.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quill-delta.js","sourceRoot":"","sources":["../../../../src/modules/core/fields/quill-delta.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { FieldType } from "@paroicms/anywhere-lib";
2
- import type { RenderingContext } from "../../../liquidjs-tools/liquidjs-rendering/rendering-context";
3
- import type { SiteContext } from "../../../site-context/site-context.types";
4
- import type { FieldValues } from "./load-fields.queries";
5
- import { type QuillDeltaToHtmlOptions } from "./quill-delta";
6
- export declare function renderQuillDeltaFields(siteContext: SiteContext, renderingContext: RenderingContext, values: FieldValues, fieldTypes: FieldType[], options?: QuillDeltaToHtmlOptions): Promise<void>;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderQuillDeltaFields = void 0;
4
- const quill_delta_1 = require("./quill-delta");
5
- async function renderQuillDeltaFields(siteContext, renderingContext, values, fieldTypes, options) {
6
- for (const { name, dataType } of fieldTypes) {
7
- if (dataType !== "quillDelta")
8
- continue;
9
- const val = values[name];
10
- values[name] =
11
- val !== undefined && val !== null && typeof val === "object" && "delta" in val && val.delta
12
- ? await (0, quill_delta_1.convertQuillDeltaToHtml)(siteContext, renderingContext, val.delta, options)
13
- : undefined;
14
- }
15
- }
16
- exports.renderQuillDeltaFields = renderQuillDeltaFields;
17
- //# sourceMappingURL=render-delta-fields.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-delta-fields.js","sourceRoot":"","sources":["../../../../src/modules/core/fields/render-delta-fields.ts"],"names":[],"mappings":";;;AAIA,+CAAsF;AAE/E,KAAK,UAAU,sBAAsB,CAC1C,WAAwB,EACxB,gBAAkC,EAClC,MAAmB,EACnB,UAAuB,EACvB,OAAiC;IAEjC,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5C,IAAI,QAAQ,KAAK,YAAY;YAAE,SAAS;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK;gBACzF,CAAC,CAAC,MAAM,IAAA,qCAAuB,EAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;gBAClF,CAAC,CAAC,SAAS,CAAC;IAClB,CAAC;AACH,CAAC;AAfD,wDAeC"}
@@ -1,2 +0,0 @@
1
- export declare function generateObfuscatedHtml(inputString: string): string;
2
- export declare function obfuscateAsHtmlLink(phoneOrEmail: string): string;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.obfuscateAsHtmlLink = exports.generateObfuscatedHtml = void 0;
4
- const html_helpers_1 = require("../../../common/mail/html-helpers");
5
- function generateObfuscatedHtml(inputString) {
6
- const jsString = JSON.stringify(btoa(inputString));
7
- return `<script>document.write(atob(${jsString}))</script>`;
8
- }
9
- exports.generateObfuscatedHtml = generateObfuscatedHtml;
10
- function obfuscateAsHtmlLink(phoneOrEmail) {
11
- return generateObfuscatedHtml(generateTargetHtml(phoneOrEmail));
12
- }
13
- exports.obfuscateAsHtmlLink = obfuscateAsHtmlLink;
14
- function generateTargetHtml(str) {
15
- const inputString = str.trim();
16
- const linkString = generateLinkString(inputString);
17
- return `<a href="${(0, html_helpers_1.escapeHtml)(linkString)}">${(0, html_helpers_1.escapeHtml)(inputString)}</a>`;
18
- }
19
- function generateLinkString(inputString) {
20
- if (inputString.includes("@")) {
21
- return `mailto:${inputString}`;
22
- }
23
- const plus = inputString.startsWith("+");
24
- const allDigits = inputString.replaceAll(/[^0-9]/g, "");
25
- return plus ? `tel:+${allDigits}` : `tel:${allDigits}`;
26
- }
27
- //# sourceMappingURL=obfuscate.helper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obfuscate.helper.js","sourceRoot":"","sources":["../../../../src/modules/public-site/helpers/obfuscate.helper.ts"],"names":[],"mappings":";;;AAAA,oEAA+D;AAE/D,SAAgB,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;AAHD,wDAGC;AAED,SAAgB,mBAAmB,CAAC,YAAoB;IACtD,OAAO,sBAAsB,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;AAClE,CAAC;AAFD,kDAEC;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,IAAA,yBAAU,EAAC,UAAU,CAAC,KAAK,IAAA,yBAAU,EAAC,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"}