@bobfrankston/rmfmail 1.2.278 → 1.2.280
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/.commitmsg +16 -26
- package/bin/build-tinymce.js +17 -2
- package/client/app.bundle.js +21 -2
- package/client/app.bundle.js.map +2 -2
- package/client/app.js +33 -1
- package/client/app.js.map +1 -1
- package/client/app.ts +30 -1
- package/npmchanges.md +51 -0
- package/package.json +1 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-65048 → node_modules.npmglobalize-stash-18028}/.package-lock.json +0 -0
package/.commitmsg
CHANGED
|
@@ -1,29 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
About: show the bundled editor version
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
CORRECTION to 1.2.279. That release added the resolved tinymce / tinymce-i18n
|
|
4
|
+
versions to build-tinymce.js's console output, on the claim that this put the
|
|
5
|
+
answer in the build transcript every publish archives. It does not:
|
|
6
|
+
npmglobalize swallows a sub-build's stdout and reports only "✓ Build
|
|
7
|
+
succeeded", so the line never reaches c:\temp\rebuild\. The echo is still
|
|
8
|
+
correct when the script is run directly, but the build log is not where this
|
|
9
|
+
question gets answered.
|
|
5
10
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
lowercased when parsed (8.7.0) — that is quoted mail passing through a
|
|
12
|
-
reply/forward.
|
|
13
|
-
- Copying or dragging in an image didn't set width/height on the tag (8.7.0),
|
|
14
|
-
which the inline-image → cid path then had to carry.
|
|
15
|
-
- The link plugin threw a querySelectorAll syntax error on anchors containing
|
|
16
|
-
semicolons (8.8.0). Mail bodies are full of odd links.
|
|
11
|
+
About… now carries an "Editor bundle" row — "TinyMCE 8.8.2 · 61 languages" —
|
|
12
|
+
read at display time from client/lib/tinymce/package.json and langs/index.json,
|
|
13
|
+
the same tree the editor loads from, so it cannot drift from what is actually
|
|
14
|
+
running. That answers it on the machine showing the symptom, which is where it
|
|
15
|
+
matters, rather than requiring a checkout of the matching tag.
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Verified before publishing: all 17 plugins we request still exist in 8.8.2, the
|
|
22
|
-
dom model is unchanged, and the package still ships no langs/ directory — the
|
|
23
|
-
61 packs added in 1.2.277 come from tinymce-i18n and are copied after the tree,
|
|
24
|
-
so the re-copy keeps them (62 files present, manifest included).
|
|
25
|
-
|
|
26
|
-
The spec moves from ^8.5.0 to ^8.8.2. The old floor already permitted 8.8.2;
|
|
27
|
-
the tree had simply drifted at 8.6.0 with nothing to notice it, which is what
|
|
28
|
-
prompted this. Raising the floor makes the intent explicit rather than leaving
|
|
29
|
-
a fresh install free to resolve lower.
|
|
17
|
+
Why this keeps mattering: both specs are caret ranges, so the resolved version
|
|
18
|
+
moves whenever npm re-resolves the tree — tinymce sat at 8.6.0 for weeks under
|
|
19
|
+
a ^8.5.0 spec with nothing to notice.
|
package/bin/build-tinymce.js
CHANGED
|
@@ -18,6 +18,21 @@ const dst = path.join(root, "client", "lib", "tinymce");
|
|
|
18
18
|
const langSrc = path.join(root, "node_modules", "tinymce-i18n", "langs8");
|
|
19
19
|
const langDst = path.join(dst, "langs");
|
|
20
20
|
|
|
21
|
+
// Which versions went into this build. The spec is a caret range, so the
|
|
22
|
+
// resolved version moves on its own whenever npm re-resolves the tree — it sat
|
|
23
|
+
// at 8.6.0 for weeks under a ^8.5.0 spec with nothing to notice (Bob
|
|
24
|
+
// 2026-08-23: "do you track updates for TinyMCE?"). Pinning would only trade
|
|
25
|
+
// silent drift for silent staleness. Printing it puts the answer in the build
|
|
26
|
+
// transcript every publish archives, at no cost and with no network call.
|
|
27
|
+
// (Claude Code 2026-08-24)
|
|
28
|
+
function pkgVersion(name) {
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(fs.readFileSync(path.join(root, "node_modules", name, "package.json"), "utf-8")).version;
|
|
31
|
+
} catch {
|
|
32
|
+
return "unknown";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
21
36
|
if (!fs.existsSync(src)) {
|
|
22
37
|
console.error(`build-tinymce: source not found at ${src} — run npm install first`);
|
|
23
38
|
process.exit(1);
|
|
@@ -53,7 +68,7 @@ if (fs.existsSync(langSrc)) {
|
|
|
53
68
|
}
|
|
54
69
|
langs.sort();
|
|
55
70
|
fs.writeFileSync(path.join(langDst, "index.json"), JSON.stringify(langs, null, 2) + "\n");
|
|
56
|
-
console.log(`build-tinymce: copied ${langs.length} language packs → client/lib/tinymce/langs/`);
|
|
71
|
+
console.log(`build-tinymce: copied ${langs.length} language packs (tinymce-i18n ${pkgVersion("tinymce-i18n")}) → client/lib/tinymce/langs/`);
|
|
57
72
|
} else {
|
|
58
73
|
// Never silently ship an editor whose language menu is empty.
|
|
59
74
|
console.error(`build-tinymce: WARNING no language packs at ${langSrc} — run npm install; the editor will be English-only`);
|
|
@@ -66,4 +81,4 @@ function tally(p) {
|
|
|
66
81
|
else { count++; bytes += st.size; }
|
|
67
82
|
}
|
|
68
83
|
tally(dst);
|
|
69
|
-
console.log(`build-tinymce: copied ${count} files (${(bytes / 1024 / 1024).toFixed(1)} MB) → client/lib/tinymce/`);
|
|
84
|
+
console.log(`build-tinymce: copied tinymce ${pkgVersion("tinymce")} — ${count} files (${(bytes / 1024 / 1024).toFixed(1)} MB) → client/lib/tinymce/`);
|
package/client/app.bundle.js
CHANGED
|
@@ -13315,9 +13315,27 @@ async function openAboutDialog() {
|
|
|
13315
13315
|
if (e.target === backdrop) close();
|
|
13316
13316
|
});
|
|
13317
13317
|
try {
|
|
13318
|
-
const
|
|
13318
|
+
const editorBundle = async () => {
|
|
13319
|
+
const readJson = async (url) => {
|
|
13320
|
+
try {
|
|
13321
|
+
const r = await fetch(url);
|
|
13322
|
+
return r.ok ? await r.json() : null;
|
|
13323
|
+
} catch {
|
|
13324
|
+
return null;
|
|
13325
|
+
}
|
|
13326
|
+
};
|
|
13327
|
+
const [pkg, langs] = await Promise.all([
|
|
13328
|
+
readJson("lib/tinymce/package.json"),
|
|
13329
|
+
readJson("lib/tinymce/langs/index.json")
|
|
13330
|
+
]);
|
|
13331
|
+
if (!pkg?.version) return "";
|
|
13332
|
+
const n = langs?.length || 0;
|
|
13333
|
+
return n ? `TinyMCE ${pkg.version} \xB7 ${n} languages` : `TinyMCE ${pkg.version}`;
|
|
13334
|
+
};
|
|
13335
|
+
const [v, accounts, editorInfo] = await Promise.all([
|
|
13319
13336
|
getVersion().catch(() => ({})),
|
|
13320
|
-
getAccounts().catch(() => [])
|
|
13337
|
+
getAccounts().catch(() => []),
|
|
13338
|
+
editorBundle()
|
|
13321
13339
|
]);
|
|
13322
13340
|
const storage = v.storage || {};
|
|
13323
13341
|
const isApp2 = typeof mailxapi !== "undefined" && mailxapi?.isApp;
|
|
@@ -13336,6 +13354,7 @@ async function openAboutDialog() {
|
|
|
13336
13354
|
if (storage.folderId) rows.push(["Drive folderId", storage.folderId]);
|
|
13337
13355
|
if (storage.folderOwner) rows.push(["Drive owner", storage.folderOwner]);
|
|
13338
13356
|
if (storage.configDir) rows.push(["Config dir", storage.configDir]);
|
|
13357
|
+
if (editorInfo) rows.push(["Editor bundle", editorInfo]);
|
|
13339
13358
|
rows.push(["Accounts", String((accounts || []).length)]);
|
|
13340
13359
|
rows.push(["User agent", navigator.userAgent]);
|
|
13341
13360
|
rows.push(["Screen", `${screen.width}\xD7${screen.height}`]);
|