@social-mail/social-mail-web-server 1.8.460 → 1.8.462
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/server/seed/ui/seed-ui.js +1 -1
- package/dist/server/services/html/HtmlForEmailService.d.ts +12 -0
- package/dist/server/services/html/HtmlForEmailService.d.ts.map +1 -0
- package/dist/server/services/html/HtmlForEmailService.js +138 -0
- package/dist/server/services/html/HtmlForEmailService.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/wwwroot/routes/index.d.ts +2 -0
- package/dist/wwwroot/routes/index.d.ts.map +1 -1
- package/dist/wwwroot/routes/index.js +10 -1
- package/dist/wwwroot/routes/index.js.map +1 -1
- package/package.json +2 -2
- package/src/server/seed/ui/seed-ui.ts +1 -1
- package/src/server/services/html/HtmlForEmailService.ts +151 -0
- package/src/wwwroot/routes/index.tsx +11 -1
|
@@ -14,7 +14,7 @@ export default async function seedUI(config) {
|
|
|
14
14
|
await config.saveVersion(UIPackageConfig, {
|
|
15
15
|
package: "@social-mail/social-mail-client",
|
|
16
16
|
view: "dist/web/AppIndex",
|
|
17
|
-
version: "1.9.
|
|
17
|
+
version: "1.9.96"
|
|
18
18
|
});
|
|
19
19
|
await config.saveVersion(WebComponentsPackageConfig, {
|
|
20
20
|
package: "@social-mail/web-components",
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
|
|
2
|
+
import SiteDiskContentCache from "../files/SiteDiskContentCache.js";
|
|
3
|
+
export default class HtmlForEmailService {
|
|
4
|
+
diskCache: SiteDiskContentCache;
|
|
5
|
+
prepare({ appFile, siteID, path, url }: {
|
|
6
|
+
appFile: LocalFile;
|
|
7
|
+
url: string;
|
|
8
|
+
siteID: any;
|
|
9
|
+
path: string[];
|
|
10
|
+
}): Promise<LocalFile>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=HtmlForEmailService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlForEmailService.d.ts","sourceRoot":"","sources":["../../../../src/server/services/html/HtmlForEmailService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAC/E,OAAO,oBAAoB,MAAM,kCAAkC,CAAC;AAKpE,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAGpC,SAAS,EAAE,oBAAoB,CAAC;IAE1B,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAAE,OAAO,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,MAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;CAe5G"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
/* eslint-disable guard-for-in */
|
|
11
|
+
/* eslint-disable @typescript-eslint/prefer-for-of */
|
|
12
|
+
import Inject, { RegisterScoped } from "@entity-access/entity-access/dist/di/di.js";
|
|
13
|
+
import SiteDiskContentCache from "../files/SiteDiskContentCache.js";
|
|
14
|
+
import { join } from "path";
|
|
15
|
+
import { JSDOM } from 'jsdom';
|
|
16
|
+
let HtmlForEmailService = class HtmlForEmailService {
|
|
17
|
+
async prepare({ appFile, siteID, path, url }) {
|
|
18
|
+
return this.diskCache.htmlCache.getOrCreateAsync(join("for-email-9", siteID, ...path), async (dest) => {
|
|
19
|
+
let html = await appFile.readAsText();
|
|
20
|
+
const browser = new JSDOM(html, { url });
|
|
21
|
+
await new Promise((resolve, reject) => {
|
|
22
|
+
browser.window.addEventListener("load", () => {
|
|
23
|
+
void inlineCSS(browser.window, browser.window.document).then(resolve);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
html = browser.window.document.documentElement.outerHTML;
|
|
27
|
+
await dest.writeAllText(html);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
__decorate([
|
|
32
|
+
Inject,
|
|
33
|
+
__metadata("design:type", SiteDiskContentCache)
|
|
34
|
+
], HtmlForEmailService.prototype, "diskCache", void 0);
|
|
35
|
+
HtmlForEmailService = __decorate([
|
|
36
|
+
RegisterScoped
|
|
37
|
+
], HtmlForEmailService);
|
|
38
|
+
export default HtmlForEmailService;
|
|
39
|
+
async function inlineCSS(window, document) {
|
|
40
|
+
let id = Date.now();
|
|
41
|
+
async function flattenStyleSheets() {
|
|
42
|
+
const styleSheets = document.querySelectorAll(`link[rel="stylesheet"]`);
|
|
43
|
+
const tasks = [];
|
|
44
|
+
const remove = [];
|
|
45
|
+
for (let i = 0; i < styleSheets.length; i++) {
|
|
46
|
+
const styleSheet = styleSheets[i];
|
|
47
|
+
const href = new URL(styleSheet.getAttribute("href"), window.location.href).toString();
|
|
48
|
+
tasks.push(fetch(href)
|
|
49
|
+
.then((x) => x.text())
|
|
50
|
+
.then((text) => ({ styleSheet, text })));
|
|
51
|
+
remove.push(styleSheet);
|
|
52
|
+
}
|
|
53
|
+
const results = await Promise.all(tasks);
|
|
54
|
+
for (const { styleSheet, text } of results) {
|
|
55
|
+
const style = document.createElement("style");
|
|
56
|
+
style.textContent = text;
|
|
57
|
+
document.head.appendChild(style);
|
|
58
|
+
remove.push(styleSheet);
|
|
59
|
+
remove.push(style);
|
|
60
|
+
}
|
|
61
|
+
return () => remove.forEach((x) => x.remove());
|
|
62
|
+
}
|
|
63
|
+
function css(el) {
|
|
64
|
+
const cs = window.getComputedStyle(el);
|
|
65
|
+
const root = window.getComputedStyle(window.document.documentElement);
|
|
66
|
+
const sheets = document.styleSheets;
|
|
67
|
+
const ret = [];
|
|
68
|
+
el.matches = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector
|
|
69
|
+
|| el.msMatchesSelector || el.oMatchesSelector;
|
|
70
|
+
for (const i in sheets) {
|
|
71
|
+
const sheet = sheets[i];
|
|
72
|
+
try {
|
|
73
|
+
const rules = sheet.cssRules;
|
|
74
|
+
for (const r in rules) {
|
|
75
|
+
const rule = rules[r];
|
|
76
|
+
if (el.matches(rule.selectorText)) {
|
|
77
|
+
const { style } = rule;
|
|
78
|
+
const properties = [];
|
|
79
|
+
for (let n = 0; n < style.length; n++) {
|
|
80
|
+
const key = style[n];
|
|
81
|
+
if (key === "box-sizing") {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
let value = style[key];
|
|
85
|
+
if (value) {
|
|
86
|
+
// we need to evaluate every var(--)
|
|
87
|
+
value = value.replace(/(var\(([^\)]+)\))/gm, (m, p1, p2) => {
|
|
88
|
+
const varName = p2.split(",")[0];
|
|
89
|
+
const cssValue = cs.getPropertyValue(varName)
|
|
90
|
+
|| root.getPropertyValue(varName);
|
|
91
|
+
return p1 ? cssValue : m;
|
|
92
|
+
});
|
|
93
|
+
properties.push({ key, value });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
ret.push(...properties);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// do nothing..
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return ret;
|
|
105
|
+
}
|
|
106
|
+
async function flattenStyler(rules) {
|
|
107
|
+
const all = document.querySelectorAll(":not(head) > *:not(style,head)");
|
|
108
|
+
for (let i = 0; i < all.length; i++) {
|
|
109
|
+
const e = all[i];
|
|
110
|
+
const remove = [];
|
|
111
|
+
for (const name of e.getAttributeNames()) {
|
|
112
|
+
if (!name.startsWith("styler-")) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
remove.push(name);
|
|
116
|
+
}
|
|
117
|
+
const styles = css(e);
|
|
118
|
+
if (styles.length) {
|
|
119
|
+
const className = "c-" + (id++).toString(36);
|
|
120
|
+
e.classList.add(className);
|
|
121
|
+
rules.push(`.${className} {
|
|
122
|
+
${styles.map((s) => s.key + ":" + s.value).join(";\n")};
|
|
123
|
+
}`);
|
|
124
|
+
}
|
|
125
|
+
for (const n of remove) {
|
|
126
|
+
e.removeAttribute(n);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const defer = await flattenStyleSheets();
|
|
131
|
+
const newRules = [];
|
|
132
|
+
await flattenStyler(newRules);
|
|
133
|
+
const newStyle = document.createElement("style");
|
|
134
|
+
document.head.appendChild(newStyle);
|
|
135
|
+
newStyle.textContent = `* { box-sizing: border-box; }\n${newRules.join("\n")}`;
|
|
136
|
+
defer();
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=HtmlForEmailService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlForEmailService.js","sourceRoot":"","sources":["../../../../src/server/services/html/HtmlForEmailService.ts"],"names":[],"mappings":"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"}
|