spamscanner 7.0.9 → 7.0.10

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/esm/cli.js CHANGED
@@ -6089,7 +6089,7 @@ import net from "node:net";
6089
6089
  var package_default = {
6090
6090
  name: "spamscanner",
6091
6091
  description: "Spam, phishing and malware filter for email in any language: a trainable classifier, link and attachment checks, SPF/DKIM/DMARC, and an optional AI second opinion from any LLM, including local Ollama models. Works as a library, CLI, Postfix milter or HTTP API.",
6092
- version: "7.0.9",
6092
+ version: "7.0.10",
6093
6093
  author: "Forward Email (https://forwardemail.net)",
6094
6094
  bin: {
6095
6095
  spamscanner: "./dist/esm/cli.js"
@@ -7780,6 +7780,7 @@ var MACRO_EXTENSIONS = /* @__PURE__ */ new Set(["docm", "dotm", "xlsm", "xltm",
7780
7780
  var DOCUMENT_EXTENSIONS = /* @__PURE__ */ new Set(["pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "rtf", "jpg", "jpeg", "png", "gif", "zip", "csv", "odt", "ods", "html", "htm", "mp3", "mp4", "mov", "wav", "eml", "msg", "xml", "json"]);
7781
7781
  var TEMPORARY_EXTENSIONS = /* @__PURE__ */ new Set(["tmp"]);
7782
7782
  var BIDI_CONTROLS = characterClass([[8234, 8238], [8294, 8297]], "u");
7783
+ var ALL_BIDI_CONTROLS = characterClass([[8234, 8238], [8294, 8297]], "gu");
7783
7784
  var ARCHIVE_TYPES = /* @__PURE__ */ new Set(["zip", "rar", "7z", "gz", "bz2", "xz", "cab", "iso", "tar", "zst", "lzh", "ace", "arj"]);
7784
7785
  function sniff(buffer) {
7785
7786
  if (!Buffer11.isBuffer(buffer) || buffer.length < 4) {
@@ -7963,7 +7964,16 @@ function shorten(name, max = 100) {
7963
7964
  return characters.length <= max ? name : `${characters.slice(0, max - 41).join("")}\u2026${characters.slice(-40).join("")}`;
7964
7965
  }
7965
7966
  function extensionOf(name) {
7966
- const base = trimEndOf(String(name).toLowerCase().split(/[/\\]/).pop(), ". ");
7967
+ const base = trimEndOf(String(name).toLowerCase().replace(ALL_BIDI_CONTROLS, "").split(/[/\\]/).pop(), ". ");
7968
+ const whole = lastExtension(base);
7969
+ const file = base.replace(/^[a-z]:/, "");
7970
+ const colon = file.indexOf(":");
7971
+ if (colon !== -1 && /^(?::?\$data)?$/.test(file.slice(colon + 1))) {
7972
+ return lastExtension(trimEndOf(file.slice(0, colon), ". "));
7973
+ }
7974
+ return whole;
7975
+ }
7976
+ function lastExtension(base) {
7967
7977
  const dot = base.lastIndexOf(".");
7968
7978
  return dot === -1 ? "" : base.slice(dot + 1).trim();
7969
7979
  }