From c7c9caa84ee4a6472c52f5a7aae3311eebccd7a7 Mon Sep 17 00:00:00 2001
From: ftesson <florian.tesson@cri-paris.org>
Date: Thu, 26 Oct 2023 20:47:06 +0200
Subject: [PATCH] Add Rousset article of detocs

---
 components/content/Contributors.vue |  14 ++
 composables/useFetchArticle.ts      |   1 -
 content/3.defense-systems/abi2.md   |   1 +
 content/3.defense-systems/detocs.md |  29 ++-
 layouts/article.vue                 |   2 +-
 package-lock.json                   | 278 ++++++++++++----------------
 package.json                        |   3 +-
 server/plugins/content.ts           |  37 ++++
 8 files changed, 199 insertions(+), 166 deletions(-)
 create mode 100644 components/content/Contributors.vue
 create mode 100644 server/plugins/content.ts

diff --git a/components/content/Contributors.vue b/components/content/Contributors.vue
new file mode 100644
index 00000000..5c173d62
--- /dev/null
+++ b/components/content/Contributors.vue
@@ -0,0 +1,14 @@
+<script setup lang="ts">
+
+const { page } = useContent();
+const contributorsString = computed(() => {
+    if (page.value?.contributors) {
+        return page.value.contributors.join(', ')
+    } else { return null }
+})
+
+</script>
+<template>
+    <div v-if="contributorsString" class="mt-n6 mb-6 text-subtitle-1 text-info">Contributors: {{ contributorsString }}
+    </div>
+</template>
\ No newline at end of file
diff --git a/composables/useFetchArticle.ts b/composables/useFetchArticle.ts
index af26e93a..63439bd4 100644
--- a/composables/useFetchArticle.ts
+++ b/composables/useFetchArticle.ts
@@ -89,7 +89,6 @@ export function useFetchArticle(doi: string) {
 
         if (store.articles.size === 0) {
             const localArticles = await queryContent('/_partials/_articles').where({ _partial: true }).findOne()
-            console.log(localArticles)
             if (localArticles?.articles && store.articles.size <= 0) {
                 for (const article of localArticles.articles) {
                     store.add(article)
diff --git a/content/3.defense-systems/abi2.md b/content/3.defense-systems/abi2.md
index 6f8549ec..808a7367 100644
--- a/content/3.defense-systems/abi2.md
+++ b/content/3.defense-systems/abi2.md
@@ -12,6 +12,7 @@ tableColumns:
 ---
 
 # Abi2
+
 The Abi2 system is composed of one protein: Abi_2.
 
 Here is an example found in the RefSeq database: 
diff --git a/content/3.defense-systems/detocs.md b/content/3.defense-systems/detocs.md
index eb185621..b715ca64 100644
--- a/content/3.defense-systems/detocs.md
+++ b/content/3.defense-systems/detocs.md
@@ -6,11 +6,34 @@ tableColumns:
       abstract: |
         During viral infection, cells can deploy immune strategies that deprive viruses of molecules essential for their replication. Here, we report a family of immune effectors in bacteria that, upon phage infection, degrade cellular adenosine triphosphate (ATP) and deoxyadenosine triphosphate (dATP) by cleaving the N-glycosidic bond between the adenine and sugar moieties. These ATP nucleosidase effectors are widely distributed within multiple bacterial defense systems, including cyclic oligonucleotide-based antiviral signaling systems (CBASS), prokaryotic argonautes, and nucleotide-binding leucine-rich repeat (NLR)-like proteins, and we show that ATP and dATP degradation during infection halts phage propagation. By analyzing homologs of the immune ATP nucleosidase domain, we discover and characterize Detocs, a family of bacterial defense systems with a two-component phosphotransfer-signaling architecture. The immune ATP nucleosidase domain is also encoded within diverse eukaryotic proteins with immune-like architectures, and we show biochemically that eukaryotic homologs preserve the ATP nucleosidase activity. Our findings suggest that ATP and dATP degradation is a cell-autonomous innate immune strategy conserved across the tree of life.
     PFAM: PF01048, PF18742
+contributors: 
+    - François Rousset
 ---
 
+
 # Detocs
 
-## To do 
+## Description
+Detocs (**De**fensive **T**w**o**-**C**omponent **S**ystem) is a family of 3-gene defense systems that mediate anti-phage activity by abortive infection.
+
+## Molecular mechanism
+
+Detocs shares homology with two-component signal transduction systems. Two-component systems are ubiquitous in prokaryotes and comprise a sensor kinase that typically senses an environmental signal through its N-terminal domain, triggering autophosphorylation of a conserved histidine residue near the C-terminal kinase domain. The phosphate group is then transferred to a conserved aspartate on the N-terminal receiver domain of the second protein, called the “response regulator”. Phosphorylation of the receiver domain activates the C-terminal domain of the response regulator, usually a DNA-binding domain that regulates the expression of target genes. In Detocs, the N-terminal sensor domain on the histidine kinase (DtcA) is intracellular and comprises tetratricopeptide repeats that are believed to sense phage infection; the C-terminal domain of the response regulator (DtcC) is replaced a PNP domain that was shown to specifically cleave ATP molecules into adenine and ribose-5’-triphosphate, both in vitro and during phage infection. Detocs activity leads to a drastic reduction in ATP and dATP levels during infection and to an accumulation of adenine. In parallel, ADP, AMP, dADP and dAMP levels are also reduced, likely in an indirect manner. Detocs induces growth arrest of T5-infected cells, but not of SECphi27-infected cells, suggesting that the outcome of infection following ATP degradation is phage-specific.
+
+While the genetic architecture of Detocs is similar to that of regulatory two-component systems, Detocs also encodes another protein, DtcB, with a standalone receiver domain that is not linked to any effector domain. A point mutation in the receiving aspartate of DtcB is toxic, while overexpression of DtcB impairs the defense capacity of Detocs. Therefore, DtcB likely serves as a “buffer” protein that absorbs phosphate signals that result from inadvertent leaky activation of DtcA in the absence of phage infection, thus preventing autoimmunity.
+
+While 80% of Detocs operons encode PNP effectors, in a minority of these operons the PNP is replaced by other domains known to function as cell-killing effectors in bacterial defense systems, including endonuclease and transmembrane-spanning domains. A Detocs operon with a transmembrane α/β hydrolase effector from Enterobacter cloacae JD6301 was able to efficiently protect E. coli against diverse phages (Rousset et al., 2023).
+
+## Distribution of the system among prokaryotes
+
+Detocs is encoded in Proteobacteria, Bacteroidetes, Firmicutes, Planctomycetes and Chloroflexi phyla.
+
+## Experimental validation
+Detocs was experimentally validated using:
+
+* A system from Vibrio alginolyticus UCD-32C that has defense activity against phages T2, T4, T5, T6 and SECphi27 (Rousset et al., 2023).
+
+* A system from Enterobacter cloacae JD6301 that has defense activity against phages T2, T4, T5, T7, SECphi4, SECphi6, SECphi18 and SECphi27 (Rousset et al., 2023).
 
 ## Structure
 
@@ -69,3 +92,7 @@ items:
 ---
 ::
 
+
+## References
+
+Rousset et al., A conserved family of immune effectors cleaves cellular ATP upon viral infection. Cell 186, 1–13 (2023). https://doi.org/10.1016/j.cell.2023.07.020
diff --git a/layouts/article.vue b/layouts/article.vue
index 64e4f13a..f724344b 100644
--- a/layouts/article.vue
+++ b/layouts/article.vue
@@ -9,7 +9,7 @@ console.log("================================")
 console.log(surround)
 console.log(prev)
 console.log(next)
-
+console.log(page)
 </script>
 <template>
   <VApp>
diff --git a/package-lock.json b/package-lock.json
index 98aed1fc..484806b2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,11 +7,10 @@
       "dependencies": {
         "@observablehq/plot": "^0.6.11",
         "@pinia/nuxt": "^0.4.11",
-        "d3-dsv": "^3.0.1",
-        "d3-fetch": "^3.0.1",
         "meilisearch": "^0.35.0",
         "pinia": "^2.1.6",
-        "vue-json-csv": "^2.1.0"
+        "vue-json-csv": "^2.1.0",
+        "yaml": "^2.3.3"
       },
       "devDependencies": {
         "@nuxt/content": "^2.8.5",
@@ -53,14 +52,14 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.22.20",
+      "version": "7.23.2",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.23.0",
+      "version": "7.23.2",
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
@@ -68,10 +67,10 @@
         "@babel/generator": "^7.23.0",
         "@babel/helper-compilation-targets": "^7.22.15",
         "@babel/helper-module-transforms": "^7.23.0",
-        "@babel/helpers": "^7.23.0",
+        "@babel/helpers": "^7.23.2",
         "@babel/parser": "^7.23.0",
         "@babel/template": "^7.22.15",
-        "@babel/traverse": "^7.23.0",
+        "@babel/traverse": "^7.23.2",
         "@babel/types": "^7.23.0",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
@@ -323,11 +322,11 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.23.1",
+      "version": "7.23.2",
       "license": "MIT",
       "dependencies": {
         "@babel/template": "^7.22.15",
-        "@babel/traverse": "^7.23.0",
+        "@babel/traverse": "^7.23.2",
         "@babel/types": "^7.23.0"
       },
       "engines": {
@@ -402,7 +401,7 @@
       }
     },
     "node_modules/@babel/standalone": {
-      "version": "7.23.1",
+      "version": "7.23.2",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
@@ -421,7 +420,7 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.23.0",
+      "version": "7.23.2",
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.22.13",
@@ -460,7 +459,7 @@
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.19.4",
+      "version": "0.19.5",
       "cpu": [
         "x64"
       ],
@@ -527,7 +526,7 @@
       "license": "MIT"
     },
     "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.19",
+      "version": "0.3.20",
       "license": "MIT",
       "dependencies": {
         "@jridgewell/resolve-uri": "^3.1.0",
@@ -585,11 +584,11 @@
       }
     },
     "node_modules/@netlify/functions": {
-      "version": "2.2.1",
+      "version": "2.3.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@netlify/serverless-functions-api": "1.8.0",
+        "@netlify/serverless-functions-api": "1.9.0",
         "is-promise": "^4.0.0"
       },
       "engines": {
@@ -605,7 +604,7 @@
       }
     },
     "node_modules/@netlify/serverless-functions-api": {
-      "version": "1.8.0",
+      "version": "1.9.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -683,8 +682,7 @@
     },
     "node_modules/@nuxt/kit": {
       "version": "3.7.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.7.4.tgz",
-      "integrity": "sha512-/S5abZL62BITCvC/TY3KWA6N721U1Osln3cQdBb56XHIeafZCBVqTi92Xb0o7ovl72mMRhrKwRu7elzvz9oT/g==",
+      "license": "MIT",
       "dependencies": {
         "@nuxt/schema": "3.7.4",
         "c12": "^1.4.2",
@@ -831,11 +829,11 @@
       }
     },
     "node_modules/@nuxtjs/mdc": {
-      "version": "0.2.1",
+      "version": "0.2.2",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nuxt/kit": "latest",
+        "@nuxt/kit": "^3.7.4",
         "@types/hast": "^3.0.1",
         "@types/mdast": "^4.0.1",
         "@vue/compiler-core": "^3.3.4",
@@ -860,7 +858,7 @@
         "remark-parse": "^10.0.2",
         "remark-rehype": "^10.1.0",
         "scule": "^1.0.0",
-        "shikiji": "^0.6.8",
+        "shikiji": "^0.6.9",
         "ufo": "^1.3.1",
         "unified": "^11.0.3",
         "unist-builder": "^4.0.0",
@@ -1006,7 +1004,7 @@
       }
     },
     "node_modules/@rollup/plugin-commonjs": {
-      "version": "25.0.5",
+      "version": "25.0.7",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1015,7 +1013,7 @@
         "estree-walker": "^2.0.2",
         "glob": "^8.0.3",
         "is-reference": "1.2.1",
-        "magic-string": "^0.27.0"
+        "magic-string": "^0.30.3"
       },
       "engines": {
         "node": ">=14.0.0"
@@ -1029,25 +1027,14 @@
         }
       }
     },
-    "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": {
-      "version": "0.27.0",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.4.13"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/@rollup/plugin-inject": {
-      "version": "5.0.4",
+      "version": "5.0.5",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@rollup/pluginutils": "^5.0.1",
         "estree-walker": "^2.0.2",
-        "magic-string": "^0.27.0"
+        "magic-string": "^0.30.3"
       },
       "engines": {
         "node": ">=14.0.0"
@@ -1061,17 +1048,6 @@
         }
       }
     },
-    "node_modules/@rollup/plugin-inject/node_modules/magic-string": {
-      "version": "0.27.0",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.4.13"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/@rollup/plugin-json": {
       "version": "6.0.1",
       "dev": true,
@@ -1116,12 +1092,12 @@
       }
     },
     "node_modules/@rollup/plugin-replace": {
-      "version": "5.0.3",
+      "version": "5.0.4",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@rollup/pluginutils": "^5.0.1",
-        "magic-string": "^0.27.0"
+        "magic-string": "^0.30.3"
       },
       "engines": {
         "node": ">=14.0.0"
@@ -1135,17 +1111,6 @@
         }
       }
     },
-    "node_modules/@rollup/plugin-replace/node_modules/magic-string": {
-      "version": "0.27.0",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.4.13"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/@rollup/plugin-terser": {
       "version": "0.4.4",
       "dev": true,
@@ -1231,7 +1196,7 @@
       }
     },
     "node_modules/@types/debug": {
-      "version": "4.1.9",
+      "version": "4.1.10",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1239,11 +1204,11 @@
       }
     },
     "node_modules/@types/estree": {
-      "version": "1.0.2",
+      "version": "1.0.3",
       "license": "MIT"
     },
     "node_modules/@types/hast": {
-      "version": "3.0.1",
+      "version": "3.0.2",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1251,7 +1216,7 @@
       }
     },
     "node_modules/@types/http-proxy": {
-      "version": "1.17.12",
+      "version": "1.17.13",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1259,7 +1224,7 @@
       }
     },
     "node_modules/@types/mdast": {
-      "version": "4.0.1",
+      "version": "4.0.2",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1267,12 +1232,12 @@
       }
     },
     "node_modules/@types/ms": {
-      "version": "0.7.32",
+      "version": "0.7.33",
       "dev": true,
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "18.18.4",
+      "version": "18.18.6",
       "dev": true,
       "license": "MIT"
     },
@@ -1287,7 +1252,7 @@
       "license": "MIT"
     },
     "node_modules/@types/unist": {
-      "version": "3.0.0",
+      "version": "3.0.1",
       "dev": true,
       "license": "MIT"
     },
@@ -2159,7 +2124,7 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001547",
+      "version": "1.0.30001551",
       "funding": [
         {
           "type": "opencollective",
@@ -2469,8 +2434,7 @@
     },
     "node_modules/cross-fetch": {
       "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
-      "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
+      "license": "MIT",
       "dependencies": {
         "node-fetch": "^2.6.12"
       }
@@ -3235,7 +3199,7 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.548",
+      "version": "1.4.559",
       "license": "ISC"
     },
     "node_modules/emoji-regex": {
@@ -3339,7 +3303,7 @@
       }
     },
     "node_modules/esbuild": {
-      "version": "0.19.4",
+      "version": "0.19.5",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -3350,28 +3314,28 @@
         "node": ">=12"
       },
       "optionalDependencies": {
-        "@esbuild/android-arm": "0.19.4",
-        "@esbuild/android-arm64": "0.19.4",
-        "@esbuild/android-x64": "0.19.4",
-        "@esbuild/darwin-arm64": "0.19.4",
-        "@esbuild/darwin-x64": "0.19.4",
-        "@esbuild/freebsd-arm64": "0.19.4",
-        "@esbuild/freebsd-x64": "0.19.4",
-        "@esbuild/linux-arm": "0.19.4",
-        "@esbuild/linux-arm64": "0.19.4",
-        "@esbuild/linux-ia32": "0.19.4",
-        "@esbuild/linux-loong64": "0.19.4",
-        "@esbuild/linux-mips64el": "0.19.4",
-        "@esbuild/linux-ppc64": "0.19.4",
-        "@esbuild/linux-riscv64": "0.19.4",
-        "@esbuild/linux-s390x": "0.19.4",
-        "@esbuild/linux-x64": "0.19.4",
-        "@esbuild/netbsd-x64": "0.19.4",
-        "@esbuild/openbsd-x64": "0.19.4",
-        "@esbuild/sunos-x64": "0.19.4",
-        "@esbuild/win32-arm64": "0.19.4",
-        "@esbuild/win32-ia32": "0.19.4",
-        "@esbuild/win32-x64": "0.19.4"
+        "@esbuild/android-arm": "0.19.5",
+        "@esbuild/android-arm64": "0.19.5",
+        "@esbuild/android-x64": "0.19.5",
+        "@esbuild/darwin-arm64": "0.19.5",
+        "@esbuild/darwin-x64": "0.19.5",
+        "@esbuild/freebsd-arm64": "0.19.5",
+        "@esbuild/freebsd-x64": "0.19.5",
+        "@esbuild/linux-arm": "0.19.5",
+        "@esbuild/linux-arm64": "0.19.5",
+        "@esbuild/linux-ia32": "0.19.5",
+        "@esbuild/linux-loong64": "0.19.5",
+        "@esbuild/linux-mips64el": "0.19.5",
+        "@esbuild/linux-ppc64": "0.19.5",
+        "@esbuild/linux-riscv64": "0.19.5",
+        "@esbuild/linux-s390x": "0.19.5",
+        "@esbuild/linux-x64": "0.19.5",
+        "@esbuild/netbsd-x64": "0.19.5",
+        "@esbuild/openbsd-x64": "0.19.5",
+        "@esbuild/sunos-x64": "0.19.5",
+        "@esbuild/win32-arm64": "0.19.5",
+        "@esbuild/win32-ia32": "0.19.5",
+        "@esbuild/win32-x64": "0.19.5"
       }
     },
     "node_modules/escalade": {
@@ -3474,8 +3438,7 @@
     },
     "node_modules/file-saver": {
       "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
-      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+      "license": "MIT"
     },
     "node_modules/file-uri-to-path": {
       "version": "1.0.0",
@@ -3528,7 +3491,7 @@
       }
     },
     "node_modules/fraction.js": {
-      "version": "4.3.6",
+      "version": "4.3.7",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3673,7 +3636,7 @@
       }
     },
     "node_modules/git-url-parse": {
-      "version": "13.1.0",
+      "version": "13.1.1",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3813,7 +3776,7 @@
       }
     },
     "node_modules/hast-util-from-parse5/node_modules/@types/hast": {
-      "version": "2.3.6",
+      "version": "2.3.7",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3821,7 +3784,7 @@
       }
     },
     "node_modules/hast-util-from-parse5/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -3862,7 +3825,7 @@
       }
     },
     "node_modules/hast-util-parse-selector/node_modules/@types/hast": {
-      "version": "2.3.6",
+      "version": "2.3.7",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3870,7 +3833,7 @@
       }
     },
     "node_modules/hast-util-parse-selector/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -3897,7 +3860,7 @@
       }
     },
     "node_modules/hast-util-raw/node_modules/@types/hast": {
-      "version": "2.3.6",
+      "version": "2.3.7",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3905,7 +3868,7 @@
       }
     },
     "node_modules/hast-util-raw/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -4150,7 +4113,7 @@
       }
     },
     "node_modules/hast-util-to-parse5/node_modules/@types/hast": {
-      "version": "2.3.6",
+      "version": "2.3.7",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4158,7 +4121,7 @@
       }
     },
     "node_modules/hast-util-to-parse5/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -4203,7 +4166,7 @@
       }
     },
     "node_modules/hastscript/node_modules/@types/hast": {
-      "version": "2.3.6",
+      "version": "2.3.7",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4211,7 +4174,7 @@
       }
     },
     "node_modules/hastscript/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -4800,8 +4763,7 @@
     },
     "node_modules/lodash.mapkeys": {
       "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/lodash.mapkeys/-/lodash.mapkeys-4.6.0.tgz",
-      "integrity": "sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA=="
+      "license": "MIT"
     },
     "node_modules/lodash.memoize": {
       "version": "4.1.2",
@@ -4814,8 +4776,7 @@
     },
     "node_modules/lodash.pickby": {
       "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz",
-      "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q=="
+      "license": "MIT"
     },
     "node_modules/lodash.uniq": {
       "version": "4.5.0",
@@ -4839,7 +4800,7 @@
       }
     },
     "node_modules/magic-string": {
-      "version": "0.30.4",
+      "version": "0.30.5",
       "license": "MIT",
       "dependencies": {
         "@jridgewell/sourcemap-codec": "^1.4.15"
@@ -4905,7 +4866,7 @@
       }
     },
     "node_modules/mdast-util-definitions/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4913,7 +4874,7 @@
       }
     },
     "node_modules/mdast-util-definitions/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -4995,7 +4956,7 @@
       }
     },
     "node_modules/mdast-util-from-markdown/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5003,7 +4964,7 @@
       }
     },
     "node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -5465,7 +5426,7 @@
       }
     },
     "node_modules/mdast-util-gfm-autolink-literal/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5473,7 +5434,7 @@
       }
     },
     "node_modules/mdast-util-gfm-autolink-literal/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -5581,7 +5542,7 @@
       }
     },
     "node_modules/mdast-util-gfm-footnote/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5589,7 +5550,7 @@
       }
     },
     "node_modules/mdast-util-gfm-footnote/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -5640,7 +5601,7 @@
       }
     },
     "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5648,7 +5609,7 @@
       }
     },
     "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -5668,7 +5629,7 @@
       }
     },
     "node_modules/mdast-util-gfm-table/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5676,7 +5637,7 @@
       }
     },
     "node_modules/mdast-util-gfm-table/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -5694,7 +5655,7 @@
       }
     },
     "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5702,7 +5663,7 @@
       }
     },
     "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -5720,7 +5681,7 @@
       }
     },
     "node_modules/mdast-util-phrasing/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5728,7 +5689,7 @@
       }
     },
     "node_modules/mdast-util-phrasing/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -5783,7 +5744,7 @@
       }
     },
     "node_modules/mdast-util-to-markdown/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5791,7 +5752,7 @@
       }
     },
     "node_modules/mdast-util-to-markdown/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -5870,8 +5831,7 @@
     },
     "node_modules/meilisearch": {
       "version": "0.35.0",
-      "resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.35.0.tgz",
-      "integrity": "sha512-gF1I6K5/Wpe7BWfjBnG+o19y/FIpJ9HbN+byON6CB9U3uE7qc6GvwUbjKOllh7LKXQVVxH/kCu7Jn0ODCUwqbQ==",
+      "license": "MIT",
       "dependencies": {
         "cross-fetch": "^3.1.6"
       }
@@ -7979,8 +7939,7 @@
     },
     "node_modules/papaparse": {
       "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz",
-      "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw=="
+      "license": "MIT"
     },
     "node_modules/parse-entities": {
       "version": "4.0.1",
@@ -8002,7 +7961,7 @@
       }
     },
     "node_modules/parse-entities/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -8114,7 +8073,7 @@
       }
     },
     "node_modules/pinia": {
-      "version": "2.1.6",
+      "version": "2.1.7",
       "license": "MIT",
       "dependencies": {
         "@vue/devtools-api": "^6.5.0",
@@ -8861,7 +8820,7 @@
       }
     },
     "node_modules/rehype-raw/node_modules/@types/hast": {
-      "version": "2.3.6",
+      "version": "2.3.7",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8869,7 +8828,7 @@
       }
     },
     "node_modules/rehype-raw/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -8963,7 +8922,7 @@
       }
     },
     "node_modules/remark-gfm/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8971,7 +8930,7 @@
       }
     },
     "node_modules/remark-gfm/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -9109,7 +9068,7 @@
       }
     },
     "node_modules/remark-parse/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9117,7 +9076,7 @@
       }
     },
     "node_modules/remark-parse/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -9155,7 +9114,7 @@
       }
     },
     "node_modules/remark-rehype/node_modules/@types/hast": {
-      "version": "2.3.6",
+      "version": "2.3.7",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9163,7 +9122,7 @@
       }
     },
     "node_modules/remark-rehype/node_modules/@types/mdast": {
-      "version": "3.0.13",
+      "version": "3.0.14",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9171,7 +9130,7 @@
       }
     },
     "node_modules/remark-rehype/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -9356,7 +9315,7 @@
       }
     },
     "node_modules/resolve": {
-      "version": "1.22.6",
+      "version": "1.22.8",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9691,7 +9650,7 @@
       "license": "MIT"
     },
     "node_modules/shikiji": {
-      "version": "0.6.9",
+      "version": "0.6.10",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9994,7 +9953,7 @@
       "license": "ISC"
     },
     "node_modules/terser": {
-      "version": "5.21.0",
+      "version": "5.22.0",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -10124,7 +10083,7 @@
       }
     },
     "node_modules/undici": {
-      "version": "5.25.4",
+      "version": "5.26.4",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -10593,7 +10552,7 @@
       }
     },
     "node_modules/vfile-location/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -10611,7 +10570,7 @@
       }
     },
     "node_modules/vfile-message/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -10628,7 +10587,7 @@
       }
     },
     "node_modules/vfile/node_modules/@types/unist": {
-      "version": "2.0.8",
+      "version": "2.0.9",
       "dev": true,
       "license": "MIT"
     },
@@ -10645,7 +10604,7 @@
       }
     },
     "node_modules/vite": {
-      "version": "4.4.11",
+      "version": "4.5.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11051,8 +11010,6 @@
     },
     "node_modules/vue-json-csv": {
       "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/vue-json-csv/-/vue-json-csv-2.1.0.tgz",
-      "integrity": "sha512-JCHtHViiIIFgrJR9csLWq/d3X7sHVc8kDnPl5FgrVeCslYkaV/asacKyxKKZok8jVMPeFNWPAlwDbtUC1p/J/w==",
       "dependencies": {
         "file-saver": "^2.0.5",
         "lodash.mapkeys": "^4.6.0",
@@ -11077,7 +11034,7 @@
       }
     },
     "node_modules/vuetify": {
-      "version": "3.3.20",
+      "version": "3.3.22",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -11110,7 +11067,7 @@
       }
     },
     "node_modules/vuetify-nuxt-module": {
-      "version": "0.5.14",
+      "version": "0.5.15",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11275,8 +11232,7 @@
       "license": "ISC"
     },
     "node_modules/yaml": {
-      "version": "2.3.2",
-      "dev": true,
+      "version": "2.3.3",
       "license": "ISC",
       "engines": {
         "node": ">= 14"
diff --git a/package.json b/package.json
index 4fcdc51d..fc09b403 100644
--- a/package.json
+++ b/package.json
@@ -20,8 +20,7 @@
   "dependencies": {
     "@observablehq/plot": "^0.6.11",
     "@pinia/nuxt": "^0.4.11",
-    "d3-dsv": "^3.0.1",
-    "d3-fetch": "^3.0.1",
+    "yaml": "^2.3.3",
     "meilisearch": "^0.35.0",
     "pinia": "^2.1.6",
     "vue-json-csv": "^2.1.0"
diff --git a/server/plugins/content.ts b/server/plugins/content.ts
new file mode 100644
index 00000000..0f843c65
--- /dev/null
+++ b/server/plugins/content.ts
@@ -0,0 +1,37 @@
+import YAML from 'yaml'
+
+export default defineNitroPlugin((nitroApp) => {
+    nitroApp.hooks.hook('content:file:beforeParse',
+        (file) => {
+            if (file?._id?.startsWith('content:3.defense-systems:') && file?._id?.endsWith('.md')) {
+                const regexp = /(?<=---\n).*?(?=\n---)/sg;
+                const match = file.body.match(regexp);
+                const frontMatter = match[0]
+                const parsedFrontMatter = YAML.parse(frontMatter)
+                if (parsedFrontMatter?.contributors?.length > 0) {
+                    file.body = file.body.replace(/(^#[\s+]\w*[\s\S])/gm, "$1:contributors\n\n")
+
+                }
+            }
+        })
+
+
+    // nitroApp.hooks.hook(
+    //     'content:file:afterParse',
+    //     (file) => {
+    //         if (file._id.endsWith('.md')) {
+
+    //             file.body.children.push({
+    //                 type: "element",
+    //                 tag: 'article-doi-list',
+    //                 props: {
+    //                     items: [
+    //                         { doi: '10.1016/j.mib.2005.06.006' },
+    //                         { doi: '10.1016/j.mib.2005.06.006' }]
+    //                 },
+    //                 children: []
+    //             })
+
+    //         }
+    //     })
+})
\ No newline at end of file
-- 
GitLab